《2022年嵌入式系统课程设计报告书.pdf》由会员分享,可在线阅读,更多相关《2022年嵌入式系统课程设计报告书.pdf(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、嵌入式系统课程设计报告书学 生 课 程 实 践 能 力 考 查题目: 温度按键设定、显示、报警系统设计课程名称 :嵌入式系统开发专业班级 : 学生学号 : 学生姓名 : 考查地点 : 考查时长 : 4小时所属院部 : 指导教师 : 2017 2018 学年第 2 学期金陵科技学院教务成绩精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 18 页 - - - - - - - - - - 嵌入式系统课程设计报告书2017-2018 学年 第 2 学期 嵌入式系统开发实践能力考核班级姓名学号课程名称嵌
2、入式系统开发课程编号0806504151 授课时间2018 年 2 月 26 日- 2018年 5 月 4 日周学时4 学分2 简要评语(从完成情况、就是否具备独立开发能力、就是否独立完成、编程熟练程度等角度评价。 ) 任课教师签名 : 日期: 温度按键设定、显示、报警系统设计要求: 1、读取 DS18B20 温度, 在液晶上实时显示 , 并显示上、下限 , 初始值上限 32, 下限26。2、通过按键可以设置环境温度的上限与下限, WK_UP键按下调节上限 , 再按下调节下限 , 再按下调节上限KEY1 按下加 1; KEY0 按下减 1, 根据上限与下限判断当前温度有没有超出范围。3、当温度
3、超过上限 ,LED1隔1秒亮一次。 超过下限 ,LED2隔1秒亮一次。 ( 也可自定义报警方式) 4、串口波特率一律用 9600bps。液晶显示的信息: STM32 test name: xxxxxxxxx Maximum is 32C,Minimum is 26 C The temperature is 29 C,now!(xxxxx 就是自己的名字拼音 ) 目录:第一章 . 系统要求1、1 设计要求精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 18 页 - - - - - - - - -
4、 - 嵌入式系统课程设计报告书 1 、2 设计方案第二章 . 硬件设计2、1 开发板原理图2、2 DS18B20模块2、3 按键模块2、4 LCD显示模块2、5 LED 模块第三章 . 软件设计3、1 程序流程图3、2 程序部分代码3、2、1 主函数、main、c 3、2、2 LED 函数 led 、c3、2、3 温度代码 s18b20 、c 3、2、4 键盘代码 key、c 第四章、实物效果图第五章、课程总结第一章 . 设计要求及方案1、1 设计要求1、读取 DS18B20 温度, 在液晶上实时显示 , 并显示上、下限 , 初始值上限 32, 下限26。2、通过按键可以设置环境温度的上限与下
5、限, WK_UP键按下调节上限 , 再按下调节下限 , 再按下调节上限KEY1 按下加 1; KEY0 按下减 1, 根据上限与下限判断当前温度有没有超出范围。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 18 页 - - - - - - - - - - 嵌入式系统课程设计报告书3、当温度超过上限 ,LED1隔1秒亮一次。超过下限 ,LED2隔1秒亮一次。 ( 也可自定义报警方式) 4、串口波特率一律用 9600bps。液晶显示的信息 : STM32 test name: xxxxxxxxx
6、 Maximum is 32C,Minimum is 26 C The temperature is 29 C,now! (xxxxx 就是自己的名字拼音 ) 1、2 设计方案本次课程设计的要求就是使用STM32F103 设计一个温度测控系统 ,ALIENTEK MiniSTM32 V3 版开发板选择的就是 STM32F103RCT6 作为 MCU,它拥有的资源包括:48KB SRAM 、 256KB FLASH 、2 个基本定时器、 4 个通用定时器、 2 个高级定时器、 2 个 DMA 控制器 (共 12 个通道 ) 、3 个SPI、 2 个 IIC 、 5 个串口、1 个 USB、 1
7、个 CAN 、 3 个 12 位 ADC 、 1 个 12 位 DAC 、 1 个 SDIO 接口及 51 个通用 IO 口。在本课程中使用了以下部分来完成课程设计的要求: 1、应用 DS18B20 进行温度的检测。2、应用按键模块进行外部的上下限数值设定。3、应用 LED的闪烁进行报警。4、应用 LCD显示实时温度、上下限等信息。第二章 . 硬件设计精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 18 页 - - - - - - - - - - 嵌入式系统课程设计报告书2、2 DS18B20
8、设计精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 18 页 - - - - - - - - - - 嵌入式系统课程设计报告书2、3 按键模块ALIENTEK MiniSTM32 开发板总共有 3 个按键 , 其原理图如下 :精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 18 页 - - - - - - - - - - 嵌入式系统课程设计报告书2、4 LCD显示模块2、5 LED 模块精品资
9、料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 18 页 - - - - - - - - - - 嵌入式系统课程设计报告书其中 PWR 就是开发板电源指示灯, 为蓝色。 LED0 与 LED1 分别接在 PA8 与 PD2 上,PA8 还可以通过 TIM1 的通道 1 的 PWM 输出来控制 DS0 的亮度。为了方便大家判断, 我们选择了 DS0 为红色 ,DS1 为绿色的LED 灯。第三章 . 软件设计3、1 程序流程图温度显示及报警模块按键设定模块3、2 程序部分代码3、2、1 主函数、main
10、、c #include led、h #include delay、h #include sys、h #include usart、h #include lcd、h 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 18 页 - - - - - - - - - - 嵌入式系统课程设计报告书#include ds18b20、h #include key、h #include #include #include int temp_low = 22; int temp_high = 32; int za
11、nshi_low=0; int zanshi_hign=0; void TIM3_Int_Init(u16 arr,u16 psc) TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); / 时钟使能TIM_TimeBaseStructure 、TIM_Period = arr; /设置在下一个更新事件装入活动的自动重装载寄存器周期的值计数到 5000 为 500ms TIM_
12、TimeBaseStructure 、TIM_Prescaler =psc; /设置用来作为 TIMx 时钟频率除数的预分频值 10Khz 的计数频率TIM_TimeBaseStructure 、TIM_ClockDivision = 0; /设置时钟分割 :TDTS = Tck_tim TIM_TimeBaseStructure 、TIM_CounterMode = TIM_CounterMode_Up; /TIM向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); /根据 TIM_TimeBaseInitStruct中指定的参数初始化T
13、IMx 的时间基数单位TIM_ITConfig( /使能或者失能指定的TIM中断TIM3, /TIM2 TIM_IT_Update , ENABLE / 使能); NVIC_InitStructure、NVIC_IRQChannel = TIM3_IRQn; /TIM3中断NVIC_InitStructure、NVIC_IRQChannelPreemptionPriority = 0; /先占优先级 0 级NVIC_InitStructure、NVIC_IRQChannelSubPriority = 3; /从优先级 3 级NVIC_InitStructure、NVIC_IRQChannelC
14、md = ENABLE; /IRQ通道被使能NVIC_Init(&NVIC_InitStructure); /根据 NVIC_InitStruct中指定的参数初始化外设NVIC寄存器TIM_Cmd(TIM3, ENABLE); / 使能 TIMx外设 u8 flag=0; int main(void) u8 t = 0; u8 shuzu20; u8 keyvalue=0; u8 gaibianshui=0; short temperature; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共
15、 18 页 - - - - - - - - - - 嵌入式系统课程设计报告书 delay_init(); /延时函数初始化 uart_init(9600); /串口初始化为 9600 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);/ 设置中断优先级分组2 LED_Init(); /初始化与 LED连接的硬件接口TIM3_Int_Init(9999,7199);/10Khz的计数频率 , 计数到 5000为 500ms LCD_Init(); POINT_COLOR = RED; /设置字体为红色 LCD_ShowString(0, 50, 200
16、, 16, 16, STM32 test); LCD_ShowString(0, 70, 200, 16, 16, name: zhang qi qi ); /LCD_ShowString(0,90,200,16,16,Max 32 C Min 26 C); memset(shuzu, 0, 20); sprintf(shuzu, Max is %2d C,Min is %2d C, temp_high, temp_low); LCD_ShowString(0, 90, 200, 16, 16, shuzu); while (DS18B20_Init() /DS18B20初始化 LCD_Sho
17、wString(0, 130, 200, 16, 16, DS18B20 Error); delay_ms(200); LCD_Fill(0, 130, 239, 130 + 16, WHITE); delay_ms(200); POINT_COLOR = BLUE; /设置字体为蓝色 LCD_ShowString(0, 110, 260, 16, 16, The temperature is: 、 C now ); LCD_ShowChar(0+25*8,110,16,0); LCD_ShowChar(0+29*8,110,!,16,0); while (1) POINT_COLOR = B
18、LUE; / 设置字体为蓝色 if (t % 10 = 0) /每 100ms读取一次 t = 0; temperature = DS18B20_Get_Temp(); if (temperature 0) LCD_ShowChar(0 + 40, 150, -, 16, 0); /显示负号 temperature = -temperature; /转为正数 else LCD_ShowChar(0 + 40, 150, , 16, 0); /去掉负号memset(shuzu, 0, 20); sprintf(shuzu, The temperature is:%3d 、 %1dC, tempe
19、rature / 10, temperature % 10); LCD_ShowString(0, 110, 200, 16, 16, shuzu); delay_ms(10); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 10 页,共 18 页 - - - - - - - - - - 嵌入式系统课程设计报告书/ 判断温度zanshi_low=temp_low*10; zanshi_hign=temp_high*10; if(temperaturezanshi_hign) if(temperature
20、zanshi_hign) flag=2; printf(chaoshangxian); else flag=0; LED0=1; / 正常情况灯不亮 LED1=1; / 获取温度时间控制t t+; / 浏览开关KEY_Init(); delay_ms(10); keyvalue=KEY_Scan(0); if(keyvalue!=0) if(keyvalue=3) gaibianshui=(gaibianshui+1)%3; if(gaibianshui=1) /改变上限 if(keyvalue=2) /key1按下 temp_high+; memset(shuzu, 0, 20); spri
21、ntf(shuzu, Max is %2d C,Min is %2d C, temp_high, temp_low); LCD_ShowString(0, 90, 200, 16, 16, shuzu); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 11 页,共 18 页 - - - - - - - - - - 嵌入式系统课程设计报告书if(keyvalue=1) /key0按下 temp_high-; memset(shuzu, 0, 20); sprintf(shuzu, Max is %2d C
22、,Min is %2d C, temp_high, temp_low); LCD_ShowString(0, 90, 200, 16, 16, shuzu); if(gaibianshui=2) /改变上限 if(keyvalue=2) /key1按下 temp_low+; memset(shuzu, 0, 20); sprintf(shuzu, Max is %2d C,Min is %2d C, temp_high, temp_low); LCD_ShowString(0, 90, 200, 16, 16, shuzu); if(keyvalue=1) /key0按下 temp_low-;
23、 memset(shuzu, 0, 20); sprintf(shuzu, Max is %2d C,Min is %2d C, temp_high, temp_low); LCD_ShowString(0, 90, 200, 16, 16, shuzu); keyvalue=0; void TIM3_IRQHandler(void) /TIM3中断 if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) /检查指定的 TIM中断发生与否:TIM 中断源 TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); /清
24、除 TIMx的中断待处理位:TIM 中断源/ 温度不正常处理灯if(flag=1) LED0 = !LED0; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 12 页,共 18 页 - - - - - - - - - - 嵌入式系统课程设计报告书if(flag=2) LED1 = !LED1; 3、2、2 LED 函数 led 、c #include led、h void LED_Init(void) GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2Periph
25、ClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE); /使能 PA,PD端口时钟 GPIO_InitStructure、GPIO_Pin = GPIO_Pin_8; /LED0-PA 、8 端口配置 GPIO_InitStructure、GPIO_Mode = GPIO_Mode_Out_PP; / 推挽输出 GPIO_InitStructure、GPIO_Speed = GPIO_Speed_50MHz; /IO口速度为 50MHz GPIO_Init(GPIOA, &GPIO_InitStructure); / 根据设定参
26、数初始化GPIOA 、8 GPIO_SetBits(GPIOA,GPIO_Pin_8); /PA 、8 输出高 GPIO_InitStructure、GPIO_Pin = GPIO_Pin_2; /LED1-PD 、2 端口配置 , 推挽输出 GPIO_Init(GPIOD, &GPIO_InitStructure); / 推挽输出 ,IO 口速度为50MHz GPIO_SetBits(GPIOD,GPIO_Pin_2); /PD 、2 输出高 3 、2、3 温度代码 s18b20 、c #include ds18b20、h #include delay、h void DS18B20_Rst(
27、void) DS18B20_IO_OUT(); /SET PA0 OUTPUT DS18B20_DQ_OUT=0; /拉低 DQ delay_us(750); /拉低 750us DS18B20_DQ_OUT=1; /DQ=1 delay_us(15); /15US / 等待 DS18B20的回应/ 返回 1: 未检测到DS18B20的存在/ 返回 0: 存在u8 DS18B20_Check(void) u8 retry=0; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 13 页,共 18 页 - -
28、 - - - - - - - - 嵌入式系统课程设计报告书DS18B20_IO_IN();/SET PA0 INPUT while (DS18B20_DQ_IN&retry=200)return 1; else retry=0; while (!DS18B20_DQ_IN&retry=240)return 1; return 0; / 从 DS18B20读取一个位/ 返回值 :1/0 u8 DS18B20_Read_Bit(void) / read one bit u8 data; DS18B20_IO_OUT();/SET PA0 OUTPUT DS18B20_DQ_OUT=0; delay
29、_us(2); DS18B20_DQ_OUT=1; DS18B20_IO_IN();/SET PA0 INPUT delay_us(12); if(DS18B20_DQ_IN)data=1; else data=0; delay_us(50); return data; / 从 DS18B20读取一个字节/ 返回值 :读到的数据u8 DS18B20_Read_Byte(void) / read one byte u8 i,j,dat; dat=0; for (i=1;i=8;i+) j=DS18B20_Read_Bit(); dat=(j1); return dat; 精品资料 - - - 欢
30、迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 14 页,共 18 页 - - - - - - - - - - 嵌入式系统课程设计报告书 / 写一个字节到DS18B20 /dat:要写入的字节void DS18B20_Write_Byte(u8 dat) u8 j; u8 testb; DS18B20_IO_OUT();/SET PA0 OUTPUT; for (j=1;j1; if (testb) DS18B20_DQ_OUT=0;/ Write 1 delay_us(2); DS18B20_DQ_OUT=1; delay_u
31、s(60); else DS18B20_DQ_OUT=0;/ Write 0 delay_us(60); DS18B20_DQ_OUT=1; delay_us(2); / 开始温度转换void DS18B20_Start(void)/ ds1820 start convert DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0 xcc);/ skip rom DS18B20_Write_Byte(0 x44);/ convert / 初始化 DS18B20的 IO 口 DQ 同时检测DS的存在/ 返回 1: 不存在/ 返回 0: 存在u8
32、DS18B20_Init(void) GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /使能 PORTA 口时钟GPIO_InitStructure、GPIO_Pin = GPIO_Pin_2; /PORTA0 推挽输出精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 15 页,共 18 页 - - - - - - - - - - 嵌入式系统课程设计报告书GPIO_InitS
33、tructure、GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure、GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_2); /输出 1 DS18B20_Rst(); return DS18B20_Check(); / 从 ds18b20 得到温度值/ 精度 :0 、1C / 返回值 :温度值 (-5501250) short DS18B20_Get_Temp(void) u8 temp; u8 TL,
34、TH; short tem; DS18B20_Start (); / ds1820 start convert DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0 xcc);/ skip rom DS18B20_Write_Byte(0 xbe);/ convert TL=DS18B20_Read_Byte(); / LSB TH=DS18B20_Read_Byte(); / MSB if(TH7) TH=TH; TL=TL; temp=0;/温度为负 else temp=1;/温度为正 tem=TH; /获得高八位 temKEY1WK_U
35、P! u8 KEY_Scan(u8 mode) static u8 key_up=1;/按键按松开标志if(mode)key_up=1; /支持连按if(key_up&(KEY0=0|KEY1=0|WK_UP=1) delay_ms(10);/去抖动key_up=0; if(KEY0=0)return KEY0_PRES; else if(KEY1=0)return KEY1_PRES; else if(WK_UP=1)return WKUP_PRES; else if(KEY0=1&KEY1=1&WK_UP=0)key_up=1; return 0;/ 无按键按下 第四章 . 实物效果图第五
36、章课程总结嵌入式开发就是自动化专业的主要课程之一, 现实生活中 , 嵌入式在应用可以说得就是无处不在。因此在大学中掌握嵌入式的开发技术就是十分重要的, 也就是十分必要的。本次使用基于 Cortex-M3 内核的 32 位 ARM 处理器 stm32 作为主控制器 , 设计了一种温度测精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 17 页,共 18 页 - - - - - - - - - - 嵌入式系统课程设计报告书控系统。在本次设计中深深体会到了应用的重要性。在课程设计的过程中, 为了减小干扰的影响 ,
37、数据采集后 , 平均算法进行温度输出。 并利用串口设计了简单的交互系统, 虽然没有使用上位机 ,但也达到了比较好的效果。 通过本次课程设计 , 着实经历到了很多想象不到的困难, 自己的一些想法也不够成熟 , 最后还就是参考了别人的解决方案, 这让我深深认识到在嵌入式开发这条路上, 与别人交流学习就是提升自己的非常有效的方式。在设定时间以及温度上下限, 可就是经过自己的冥思苦想还就是想不出来, 怎么都实现不了。无奈之下 , 我只好去隔壁寝室的大神那里虚心求教, 在参考了她的程序之后我恍然大悟, 选择了在循环之外先按顺序读取字符串的方法, 顺利解决了我的问题 , 让我深深认识到了交流的重要性 ,
38、在自己的想法不够完善时 , 多多了解些别人的算法对提升自己就是有很大帮助的。由于之前没有完整开发一个有较多功能系统的经历, 在本次做课程设计的过程中, 走了不少的弯路 , 也学到很多课本上没有的知识。使用库开发Stm32时, 非常注重模块化的概念 , 不光就是很多片上资源使用库文件来进行封装, 自己在编写一些函数时也应该学会进行封装, 其中又涉及到 c 语言很多之前没太注意到的地方, 在开发过程中着实让我吃了不少苦头, 不过幸运的就是同学的指导下 , 我一点点解决了那些疑惑的地方, 更加深入了理解了一个工程的整体结构, 对模块化的思想印象深刻。这对我以后的开发将起到巨大的作用。总之, 本次的嵌入式课程设计让我收获了很多, 不仅仅学习到了很多课本与课堂上学不到的东西 , 更重要的就是学习到了库开发的思想, 以及体会到了交流的重要性, 同时也感谢老师这一学期来的认真授课 , 严谨的答疑解惑 , 让我认识到理论知识对开发潜移默化的作用。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 18 页,共 18 页 - - - - - - - - - -