




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、成绩学 生 课 程 实 践 能 力 考 查题目:温度按键设定、显示、报警系统设计课程名称:嵌入式系统开发 专业班级:学生学号: 学生姓名:考查地点: 考查时长: 4小时 所属院部: 指导教师:2017 2018学年 第 2 学期 金陵科技学院教务2017-2018学年第2学期嵌入式系统开发实践能力考核班级姓名学号课程名称嵌入式系统开发课程编号0806504151授课时间2018年2月26日- 2018年5月4日周学时4学分2简要评语(从完成情况、是否具备独立开发能力、是否独立完成、编程熟练程度等角度评价。)任课教师签名:日期:温度按键设定、显示、报警系统设计要求:1、读取DS18B20温度,在
2、液晶上实时显示,并显示上、下限,初始值上限32,下限26。2、通过按键可以设置环境温度的上限和下限,WK_UP键按下调节上限,再按下调节下限,再按下调节上限KEY1按下加1;KEY0按下减1,根据上限和下限判断当前温度有没有超出范围。3、当温度超过上限,LED1隔1秒亮一次。超过下限,LED2隔1秒亮一次。(也可自定义报警方式)4、串口波特率一律用9600bps。液晶显示的信息:STM32 testname: xxxxxxxxxMaximum is 32C,Minimum is 26 CThe temperature is 29 C,now!(xxxxx是自己的名字拼音)目录:第1章. 系统要
3、求第2章. 硬件设计2.2 DS18B20模块2.4 LCD显示模块2.5 LED 模块第3章. 软件设计第五章.课程总结第1章. 设计要求及方案1、读取DS18B20温度,在液晶上实时显示,并显示上、下限,初始值上限32,下限26。2、通过按键可以设置环境温度的上限和下限,WK_UP键按下调节上限,再按下调节下限,再按下调节上限KEY1按下加1;KEY0按下减1,根据上限和下限判断当前温度有没有超出范围。3、当温度超过上限,LED1隔1秒亮一次。超过下限,LED2隔1秒亮一次。(也可自定义报警方式)4、串口波特率一律用9600bps。液晶显示的信息:STM32 testname: xxxxx
4、xxxxMaximum is 32C,Minimum is 26 CThe temperature is 29 C,now!(xxxxx是自己的名字拼音)本次课程设计的要求是使用STM32F103设计一个温度测控系统,ALIENTEK MiniSTM32 V3 版开发板选择的是 STM32F103RCT6 作为 MCU,它拥有的资源 包括:48KB SRAM、256KB FLASH、2 个基本定时器、4 个通用定时器、2 个高级定时器、2 个 DMA 控制器(共 12 个通道)、3 个 SPI、2 个 IIC、5 个串口、1 个 USB、1 个 CAN、3 个 12 位 ADC、1 个 12
5、位 DAC、1 个 SDIO 接口及 51 个通用 IO 口。在本课程中使用了以下部分来完成课程设计的要求:1.应用DS18B20进行温度的检测。2.应用按键模块进行外部的上下限数值设定。3.应用LED的闪烁进行报警。4.应用LCD显示实时温度、上下限等信息。第2章. 硬件设计2.2 DS18B20设计ALIENTEK MiniSTM32 开发板总共有 3 个按键,其原理图如下:2.4 LCD显示模块2.5 LED 模块其中 PWR 是开发板电源指示灯,为蓝色。LED0 和 LED1 分别接在 PA8 和 PD2 上,PA8还可以通过 TIM1 的通道 1 的 PWM 输出来控制 DS0 的亮
6、度。为了方便大家判断,我们选择了 DS0 为红色,DS1 为绿色的 LED 灯。 第3章. 软件设计温度显示及报警模块 按键设定模块#include "led.h"#include "delay.h"#include "sys.h"#include "usart.h"#include "lcd.h"#include "ds18b20.h"#include "key.h"#include <string.h>#include <stdio.
7、h>#include <stdlib.h>int temp_low = 22;int temp_high = 32;int zanshi_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.
8、TIM_Period = arr; /设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500msTIM_TimeBaseStructure.TIM_Prescaler =psc; /设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率 TIM_TimeBaseStructure.TIM_ClockDivision = 0; /设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /TIM向上计数模式TIM_TimeBaseInit(TIM3, &
9、;TIM_TimeBaseStructure); /根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位TIM_ITConfig( /使能或者失能指定的TIM中断TIM3, /TIM2TIM_IT_Update ,ENABLE /使能);NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; /TIM3中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; /先占优先级0级NVIC_InitStructure.NVIC_IRQChannelSubPrior
10、ity = 3; /从优先级3级NVIC_InitStructure.NVIC_IRQChannelCmd = 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; delay_init(); /延时函数初始化 ua
11、rt_init(9600); /串口初始化为9600NVIC_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, "STM32 test");LCD_ShowString(0, 70, 200, 16, 16, &q
12、uot;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_ShowString(0, 130, 200, 16,
13、 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
14、 (1) POINT_COLOR = BLUE; /设置字体为蓝色 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(
15、shuzu, "The temperature is:%3d.%1dC", temperature / 10, temperature % 10);LCD_ShowString(0, 110, 200, 16, 16, shuzu); delay_ms(10);/判断温度zanshi_low=temp_low*10;zanshi_hign=temp_high*10;if(temperature<zanshi_low)|(temperature>zanshi_hign)if(temperature<zanshi_low)flag=1;printf("
16、;chaoxiaxian");if(temperature>zanshi_hign)flag=2;printf("chaoshangxian"); elseflag=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_
17、high+;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_high-;memset(shuzu, 0, 20);sprintf(shuzu, "Max is %2d C,Min is %2d C", temp_high, temp_low);LCD_ShowString(0, 90, 200,
18、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-;memset(shuzu, 0, 20);sprintf(shuzu, "Max is %2d C,Min i
19、s %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 ); /清除TIMx的中断待处理位:TIM 中断源 /温度不正常处理灯if(flag=1)LED0 = !LED0;i
20、f(flag=2)LED1 = !LED1;#include "led.h"void LED_Init(void) GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(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_
21、PP; /推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /IO口速度为50MHz 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 输出高 #include &quo
22、t;ds18b20.h"#include "delay.h"void DS18B20_Rst(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;DS18B20_IO_IN();/SET PA0 INPUT whi
23、le (DS18B20_DQ_IN&&retry<200)retry+;delay_us(1); if(retry>=200)return 1;else retry=0; while (!DS18B20_DQ_IN&&retry<240)retry+;delay_us(1);if(retry>=240)return 1; return 0;/从DS18B20读取一个位/返回值:1/0u8 DS18B20_Read_Bit(void) / read one bit u8 data;DS18B20_IO_OUT();/SET PA0 OUTP
24、UT DS18B20_DQ_OUT=0; delay_us(2); DS18B20_DQ_OUT=1; DS18B20_IO_IN();/SET PA0 INPUTdelay_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=(j<&l
25、t;7)|(dat>>1); return dat;/写一个字节到DS18B20/dat:要写入的字节void DS18B20_Write_Byte(u8 dat) u8 j; u8 testb;DS18B20_IO_OUT();/SET PA0 OUTPUT; for (j=1;j<=8;j+) testb=dat&0x01; dat=dat>>1; if (testb) DS18B20_DQ_OUT=0;/ Write 1 delay_us(2); DS18B20_DQ_OUT=1; delay_us(60); else DS18B20_DQ_OUT=
26、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(0xcc);/ skip rom DS18B20_Write_Byte(0x44);/ convert /初始化DS18B20的IO口 DQ 同时检测DS的存在/返回1:不存在/返回0:存在 u8 DS18B20_Init(void) GPIO_InitTypeDef GPI
27、O_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /使能PORTA口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;/PORTA0 推挽输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA,GP
28、IO_Pin_2); /输出1DS18B20_Rst();return DS18B20_Check(); /从ds18b20得到温度值/返回值:温度值 (-5501250) short DS18B20_Get_Temp(void) u8 temp; u8 TL,TH; short tem; DS18B20_Start (); / ds1820 start convert DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0xcc);/ skip rom DS18B20_Write_Byte(0xbe);/ convert TL=DS18B20
29、_Read_Byte(); / LSB TH=DS18B20_Read_Byte(); / MSB if(TH>7) TH=TH; TL=TL; temp=0;/温度为负 else temp=1;/温度为正 tem=TH; /获得高八位 tem<<=8; tem+=TL;/获得底八位 tem=(float)tem*0.625;/转换 if(temp)return tem; /返回温度值else return -tem; #include "key.h"#include "delay.h" /按键初始化函数 /PA15和PC5 设置成输入
30、void KEY_Init(void)GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);/使能PORTA,PORTC时钟GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);/关闭jtag,使能SWD,可以用SWD模式调试GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;/PA15GPIO_InitStructure.GPIO_Mode
31、= GPIO_Mode_IPU; /设置成上拉输入 GPIO_Init(GPIOA, &GPIO_InitStructure);/初始化GPIOA15GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;/PC5GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; /设置成上拉输入 GPIO_Init(GPIOC, &GPIO_InitStructure);/初始化GPIOC5GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;/PA0GPIO_InitStructure.GPIO_
32、Mode = GPIO_Mode_IPD; /PA0设置成输入,默认下拉 GPIO_Init(GPIOA, &GPIO_InitStructure);/初始化GPIOA.0 /按键处理函数/返回按键值/mode:0,不支持连续按;1,支持连续按;/返回值:/0,没有任何按键按下/KEY0_PRES,KEY0按下/KEY1_PRES,KEY1按下/WKUP_PRES,WK_UP按下 /注意此函数有响应优先级,KEY0>KEY1>WK_UP!u8 KEY_Scan(u8 mode) static u8 key_up=1;/按键按松开标志if(mode)key_up=1; /支持连按 if(key_up
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职业病认定与续签劳动合同关系
- 图像处理单元考核试卷
- 玉石的开采历史与地理分布考核试卷
- 放射性金属矿的燃料棒制造与寿命管理考核试卷
- 硅冶炼厂的安全应急预案考核试卷
- 智能消费设备的安全性考量考核试卷
- 网络安全防护在电信行业的运营风险考核试卷
- 棉花加工设备全生命周期成本分析考核试卷
- 竹木资源循环利用与环保技术考核试卷
- 磷肥生产过程中的环保技术发展与应用趋势考核试卷
- 2024年内蒙古师范大学招聘事业编制人员考试真题
- (二模)2025年河南省五市高三第二次联考历史试卷(含答案)
- 飞行员劳动合同模板及条款
- 《劳动项目五:煮鸡蛋》(教案)-2024-2025学年人教版劳动三年级上册
- 第中西艺术时空对话 课件 2024-2025学年岭南美版(2024) 初中美术七年级下册
- 2025-2030检测设备行业行业风险投资发展分析及投资融资策略研究报告
- (三模)广西2025届高中毕业班4月份适应性测试 英语试卷(含答案解析)
- (四调)武汉市2025届高中毕业生四月调研考试 物理试卷(含答案)
- 中级财务会计课件第四章 金融资产学习资料
- 2025年济南市中区九年级中考数学一模考试试题(含答案)
- 中国印楝素市场调查报告
评论
0/150
提交评论