单片机温度检测记录系统_第1页
单片机温度检测记录系统_第2页
单片机温度检测记录系统_第3页
单片机温度检测记录系统_第4页
单片机温度检测记录系统_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、物理与电子信息学院题目:单片机温度检测记录系统行政班级:成员分组名单学号:姓名:选课班级:任课教师:成绩:目录1设计任务与要求21.1 设计任务21.2 技术指标21.3 题目评析22方案比较与论证32.1 各种方案比较与选择33系统硬件设计43.1 系统的总体设计4图3-2总体原理图错误!未定义书签。3.2 功能模块设计及工作原理的分析43.2.1 时钟显示模块43.2.2 温度传感器模块错误!未定义书签。3.2.3 LCD显示数据模块53.2.4 串口数据传输显示模块63.3 发挥部分的设计与实现83.3.1 年月日时分秒,温度报警上限设置功能83.3.1.1 硬件按钮部分83.3.1.2

2、 红外遥控设置模块83.3.2 按键传输串口数据94系统软件设计105 测试结果136 系统电路存在的不足和改进的方向147参考文献错误!未定义书签。8附录:错误!未定义书签。1设计任务与要求1.1 设计任务设计制作一台可检测和记录温度的系统。1.2 技术指标(1) LCD显示实时时钟:年、月、日、时、分、秒;(2)每30秒采样温度,LCD更新显示温度值;(3)按键触发存储当前温度和时钟信息(年、月、日、时、分);(4)按键触发串口传输存储的温度和时钟信息;(5)温度测量精度:土1度。1.3题目评析本设计题我们小组摒弃了常规做法,加入了两项独特的创新实现方法:(1)对于数据传送储存显示方面我们

3、不使用24C02存储器,I2C存储器等储存器件,而是直接通过串口将数据传输的电脑中通过VB界面显示数据并将数据记录在电脑硬盘中。(2)在设置时间日期,上限温度上,我们不仅仅采用了硬件按钮控制而且还加入了红外遥控控制。与此同时,我们的温度测量精度在理论上能达到0.0625实际运行时也能达到0.1度,而实验所要求的仅为1摄氏度。另外,在DS1302芯片上加入了一个备用电源,使得主电源掉电时,时钟芯片仍然在随着时间的移动而实时更新。因此主电源再次上电时,时钟依然是准确的,而不必重新调过。2方案比较与论证2.1 各种方案比较与选择2.1.1 温度传感器目前使用接触式比较多,主要有热电式传感器,把温度变

4、化转换为电阻变化的叫热电阻传感器,把温度变化转换为热电势变换的叫热电偶传感器。方案1:热电阻传感器具有高温系数,高电阻率,物理特性稳定,良好的线性输出等优点,常用的有pt100等。方案2:热电偶传感器具有结构简单,测量范围广,热惯性小,准确度高,输出信号远的优点,但价格较高。方案3:新型可编程温度传感器DS18B20,精度高,成本低,易于采集信号。利用热电偶或热敏电阻作为温度传感器,这类传感器至仪表之间通常都要用专用的温度补偿导线,而温度补偿导线的价格很高,并且线路太长,会影响测量精度,这是直接以模拟量形式进行采集的不可避免的问题。采用新型可编程温度传感器DS18B20进行温度检测可以避免热电

5、偶或热敏电阻作为温度传感器所造成的测量精度误差过大等问题,同时DS18B20只需要一个I/O口便可以进行通信,它可以以更低的成本和更高的精确度实现温度检测。所以选择方案3。2.1.2 时钟显示方案1:采用内部时钟计时。方案2:采用外部时钟芯片DS1302。采用内部时钟计时,可以节省IO弓I脚,降低成本,但是内部振荡器使用阻容震荡,其精度不高,如果使用了串口、或者PWM等对时钟比较敏感的功能,会对时钟造成混乱。采用外部时钟芯片DS1302,不仅仅能对时间进行计时还可以对年、月、日、周进行计时,具有闰年补偿功能而且对于使用串口、或者PWM等对时钟比较敏感的功能,不会产生影响。如果接入外置电子电池的

6、话在系统掉电的情况下还可以继续计时。所以选择方案2。2.1.3 时间温度数据显示方案1:采用数码管显示。方案2:米用LCD显木器显布。采用数码管显示时间温度数据操作方便,但需要用到的数码管数量甚多,占用I/O口较多,浪费I/O口的利用率,且只能显示数字。而使用LCD显示虽然在编程上有一定程度比数码管显示的复杂性高,但其占用的I/O资源较少,且能显示的内容比数码管丰富的多,不仅能显示数值还能显示英文。所以使用方案2.2.1.4 数据的串口传送与储存显示方案1:通过串口将数据传送到另一个单片机系统上显示,采用24C02存储器对数据进行储存。方案2:通过串口将数据传送到PC机上并用VB程序编写的界面

7、显示,采用PC机上的“D盘”对数据进行储存。通过串口将数据从一个单片机传送到另一个单片机上设置较为简单,将数据存储到24C02存储器上,不易于对任意时间温度数据进行提取,而将数据传送到PC机上并用VB界面显示出来不仅美观而且信息量丰富,将数据储存在“D:温度.TXT”目录下不仅存储量大,而且便于直观查看。所以使用方案2。3系统硬件设计3.1 系统的总体设计本系统以STM32F103ZET6单片机为核心,采用温度传感器DS18B20进行温度检测,将数字温度信息传输到单片机中,在时钟方面采用外部时钟芯片DS1302,DS1302是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、

8、时、分、秒进行计时。单片机通过采集温度时间信息后将温度时间数据传送到LCD上显示出来,并将数据通过串口通信通过MAX232传送到电脑中,硬件总体框图如下:图3-1硬件总体框图3.2 功能模块设计及工作原理的分析3.2.1 时钟显示模块时钟模块采用外部时钟DS1302进行计时,DS1302是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31X8的用于临时性存放数据的RAM寄存器。DS1302是DS1

9、202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。其管脚图以及此模块仿真图如图3-3(a)及3-3(b)所示。(a)(b)图3-3DS1302管脚图与时钟模块仿真图各引脚的功能为:Vcc1:备用电源;Vcc2:主电源。当Vcc2Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2,电!,P,!3:!,!*!I范昆|方方1关丽口Iri*KliMtal中.送阻ri,m中si吟石设置整定拉窗附口比总.;:J22+1Wtrion00电周二|.后插倬电I也出1I幽皿00电近二J国i*由m*fiaH8m电am1时同闭总L叼”三;

10、::I2s工JEmn电St百1foo:Daoo六J星度;曲|JizoKlj:二二!工胸8厘电后七I幅一I(00:00OOJjgd1n1ian0恭迎使用单片机逞度像,运录系境图3-12单片机温度检测记录系统(vb)如图3-11(a)与3-11(b)所示,其各引脚功能介绍如下:第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8

11、脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。第三部分是供电。15脚GND、16脚VCC(+5v)。3.3 发挥部分的设计与实现发挥部分包含两个部分。首先是年月日时分秒及其温度报警上限功能设置,另外还有串口数据传输部分的实现。3.3.1 年月日时分秒,温度报警上限设置功能年月日时分秒及其温度报警上限功能设置有两种方法,包括硬件按键设置

12、以及红外遥控设置。3.3.1.1 硬件按钮部分硬件按钮部分设置如图3-13所示,keyl:为功能设置进入按钮,key2:为功能切换按钮如图3-14,3-15,3-16,3-17,3-18,3-19,3-20,所示。key3:为加一功能按键。key4:为减一功能按键。在这一部分中,4个按键按下key1即可进入年设置模式,通过key3与key4键进行加一减一操作。设置完年份之后,再按下key2即可进入月份设置操作,继续按下则能相继出现日,时,分,秒及温度上限的设置操作,同理,key3与key4对数值设置进行加减。图3-14设置年份图3-15设置月份图3-13硬件按钮设置图3-16设置日期图3-17

13、设置小时图3-18设置分钟图3-19设置秒图3-20设置温度3.3.1.2 红外遥控设置模块人的眼睛能看到的是可见光,若按波长排列,依次(从长到短)为红、橙、黄、绿、青、蓝、紫,红光的波长范围为0.62科m0.7科m,比红光波长还长的光叫红外线。红外线遥控器就是利用波长0.76科m1.5科m之间的近红外线来传送控制信号的。红外线的特点是不干扰其他电器设备工作,也不会影响周边环境。调试简单,若对发射信号进行编码,可实现多路红外遥控功能。红外线发射和接收:红外遥控发射器由键盘矩阵、遥控专用集成电路、激励器和红外发光二极管组成。遥控专用集成电路(采用AT89S52单片机)是发射系统的核心部分,其内部

14、由振荡电路、定时电路、扫描信号发生器、键输入编码器、指令译码器、用户码转换器、数码调制电路及缓冲放大器等组成。它能产生键位扫描脉冲信号,并能译出按键的键码,再经遥控指令编码器得到某键位的遥控指令(遥控编码脉冲),由38KHZ的载波进行脉冲幅度调制,载有遥控指令的调制信号激励红外二极管发出红外遥控信号。在红外接收器中,采用光电转换器(光电二极管),将接收到的红外光指令信号转换成相应的电信号。由于技术原因与制作成本,红外遥控发射器是利用现成的电视遥控器。接收器将接收到的红外频率数据传输到单片机中,进行处理识别红外控制的按键,从而进行时间温度的设置。3.3.2 按键传输串口数据如下图3-21为串口传

15、输的按键。四个按键分别对应的功能如下:Key3:单次按键传输串口数据,即每触发一次传输一次即时的时间温度数据。Key4:触发一次连续传输即时的串口数据。Key2:停止串口数据传输按钮。图3-21按键传输串口数据功能键4系统软件设计主函数开始先进行LCD初始化,时钟芯片初始化,串口初始化,之后通过时间,温度处理函数读取时间,温度的数值,判断是否有按键被按下,如果没有运行时间显示函数,温度显示函数,温度报警函数;如果按键被按下,则进入功能设置函数调节时间和温度上限。总体程序流程图如图4-1所示。图4-1总体程序流程图主程序可见附录程序1。4.1 温度传感器流程图将dhtll首先要将温度传感器内存初

16、始化,逐字读取传感器RAM中的的温度数据,并将数据转化为十进制的浮点型数据,返回温度值。其流程图如下:图4-2温度传感器流程图温度传感器程序见附录程序2。4.2 时钟芯片流程图判断时间显示是否正确如果不正确外部电路可从新设置时钟之后进入流程(1),如果时间显示正确,(1)读取芯片内部RAM中的提取年、月、日、时、分、秒数据,并将年、月、日、时、分、秒值返回。图4-3时钟芯片流程图时钟芯片程序见附录程序3。4.3 红外控制程序流程图初始化红外接收管,判断是否接收到红外信号,无则结束,有则判断红外信号是否为有用信号,如有有用信号则返回相应的值。图4-4红外控制程序流程图红外控制程序见附录程序4。4

17、测试结果LCD显示时间温度正如上图为我们所搭的实物图,接通电源后,各个模块均正常工作,常。6系统电路存在的不足和改进的方向电路存在不足之处在于时间温度的串口传输是通过有线进行的,灵活性与局限性较大,如果主系统与从系统距离较大,便使用起来更不方便,改进之处在于,不使用有线传输数据,而是使用无线传输数据,使用功率较大的无线接受发器还可以传送百米甚至几百米以上的距离,在软件方面对无线设置协议便可解决因距离过大而产生的数据出错。另外,可以考虑同时实现本地存储与异地存储的结合使用。困为如果要存储在电脑上,虽然美观而且使用方便,但是其功耗及延时将会比存储在本地上要多得多。所以,这也将是一个改进的方向。7技

18、能训练四感想经过这次的测试技术实验,我们小组得到了不少的收获,一方面加深了我对课本理论的认识,另一方面也提高了实验操作能力。在实验的过程中我们要培养自己的独立分析问题,和解决问题的能力。在这学期的实验中,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,我们通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。还有团结协作的精神,而这是日后最实用的,真的是受益匪浅。8附录1)文件主函数intmain(void)(u8t=0;u8temperature;u8humidity;Stm32

19、_Clock_Init(9);TIMER_Init();uart_init(72,9600);delay_init(72);LED_Init();LCD_Init();usmart_dev.init(72);KEY_Init();POINT_COLOR=RED;/while(DHT11_Init()系统时钟设置串口初始化为9600延时初始化初始化与LED连接的硬件接口初始化LCD初始化USMART按键初始化设置字体为红色/DHT11初始化(LCD_ShowString(60,130,200,16,16,DHT11Error);Delay_ms(200);LCD_Fill(60,130,239,

20、130+16,WHITE);Delay_ms(200);LCD_ShowString(60,130,200,16,16,DHT11OK);POINT_COLOR=BLUE;/设置字体为蓝色LCD_ShowString(60,150,200,16,16,Temp:C);LCD_ShowString(121,150,200,16,16,.);LCD_ShowString(60,170,200,16,16,Humi:%);LCD_ShowString(121,170,200,16,16,.);while(1)(if(t%10=0)/每100ms读取一次(DHT11_Read_Data(&temper

21、ature,&humidity);读取温湿度值LCD_ShowNum(60+45,150,temperature,2,16);显示温度LCD_ShowNum(60+45,170,humidity,2,16);显示湿度Delay_ms(10);t+;if(t=20)(/t=0;LED0=!LED0;)if(t=100)(t=calendar.sec;calendar.hour=13;/calendar.min=40;if(calendar.sec%60=0)(calendar.sec=0;calendar.min+;)if(calendar.min%60=0)(calendar.min=0;ca

22、lendar.hour+;)LCD_ShowNum(60,10,calendar.w_year,4,16);LCD_ShowNum(100,10,calendar.w_month,2,16);LCD_ShowNum(124,10,calendar.w_date,2,16);LCD_ShowNum(60,42,calendar.hour,2,16);LCD_ShowNum(84,42,calendar.min,2,16);LCD_ShowNum(108,42,calendar.sec+,2,16);)Delay_ms(10);)2)dht11温湿感应器函数程序/复位DHT11voidDHT11_

23、Rst(void)(DHT11_IO_OUT();/SETOUTPUTDHT11_DQ_OUT=0;拉低DQDelay_ms(20);拉低至少18msDHT11_DQ_OUT=1;/DQ=1Delay_us(30);主机拉高2040us)/等待/返回/返回DHT11的回应1:未检测到DHT11的存在0:存在u8DHT11_Check(void)(u8retry=0;DHT11_IO_IN();/SETINPUTwhile(DHT11_DQ_IN&retry=100&retry210)return1;elseretry=0;while(!DHT11_DQ_IN&retry=100)return1

24、;return0;会拉低4080us拉低后会再次拉高40-80us)/从DHT11读取一个位/返回彳1:1/0u8DHT11_Read_Bit(void)(u8retry=0;等待变为低电平等待变高电平while(DHT11_DQ_IN&retry100)(retry+;Delay_us(1);)retry=0;while(!DHT11_DQ_IN&retry100)/(retry+;delay_us(1);)Delay_us(40);/等待40usif(DHT11_DQ_IN)return1;elsereturn0;)/从DHT11读取一个字节/返回值:读到的数据u8DHT11_Read_B

25、yte(void)(u8i,dat;dat=0;for(i=0;i8;i+)(dat=1;dat|=DHT11_Read_Bit();returndat;/从DHT11读取一次数据/temp:温度值(范围:050)/humi:湿度值(范围:20%90%)/返回彳1:0,正常;1,读取失败u8DHT11_Read_Data(u8*temp,u8*humi)(u8buf5;u8i;DHT11_Rst();if(DHT11_Check()=0)(for(i=0;iAPB2ENR|=1CRH&=0XFFFF0FFF;PORTG.11推挽输出GPIOG-CRH|=0X00003000;GPIOG-ODR

26、|=1CTRL&=(1CTRL|=1LOAD=reload;每1/OS_TICKS_PER_SEC秒中断一次SysTick-CTRL|=1LOAD;/LOAD的值ticks=nus*fac_us;需要的节拍数tcnt=0;OSSchedLock();阻止ucos调度,防止打断us延时told=SysTick-VAL;/刚进入时的计数器值while(1)(tnow=SysTick-VAL;if(tnow!=told)(if(tnow=ticks)break;/时间超过/等于要延迟的时间,则退出.);OSSchedUnlock();/开启ucos调度)/延时nms/nms:要延日的ms数voidd

27、elay_ms(u16nms)(if(OSRunning=OS_TRUE)/如果os已经在跑了(if(nms=fac_ms)/延时的时间大于ucos的最少时间周期(OSTimeDly(nms/fac_ms);/ucos延时)nms%=fac_ms;/ucos已经无法提供这么小的延时了,采用普通方式延时delay_us(u32)(nms*1000);普通方式延时)#else/不用ucos时/延时nus/nus为要延时的us数.voiddelay_us(u32nus)u32temp;SysTick-LOAD=nus*fac_us;/时间加载SysTick-VAL=0x00;/清空计数器SysTic

28、k-CTRL=0x01;开始倒数dotemp=SysTick-CTRL;)while(temp&0x01)&!(temp&(1CTRL=0x00;关闭计数器SysTick-VAL=0X00;清空计数器)/延时nms/注意nms的范围/SysTick-LOAD为24位寄存器,所以,最大延时为:/nms=0xffffff*8*1000/SYSCLK/SYSCLK单位为Hz,nms单位为ms对72M条件下,nmsLOAD=(u32)nms*fac_ms;/时间加载(SysTick-LOAD为24bit)SysTick-VAL=0x00;清空计数器SysTick-CTRL=0x01;开始倒数dotem

29、p=SysTick-CTRL;)while(temp&0x01)&!(temp&(1CTRL=0x00;关闭计数器SysTick-VAL=0X00;清空计数器)#endifu8cnt1=0,cnt2=0;voidTIMER_Init(void)(RCC-APB1ENR|=RCC_APB1ENR_TIM6EN|RCC_APB1ENR_TIM7EN;)voidDelay_us(u32uns)(cnt1=0;TIM6-ARR=uns;TIM6-PSC=71;/1MHz=1us;TIM6-CR1|=TIM_CR1_OPM;TIM6-DIER|=TIM_DIER_UIE;TIM6-CR1|=TIM_CR1_CEN;MY_NVIC_Init(0,1,TIM6_IRQn,0);while(!cnt1);cnt1=0;)voidDelay_ms(u16ums)(TIM7-ARR=ums*10;TIM7-PSC=7199;/10KHz=0.1ms;TIM7-CR1|=TIM_CR1_OPM;TIM7-DIER|=TIM_DIER_UIE;TIM7-CR1|=TIM_CR1_CEN;MY_NVIC_Init(0,2,TIM7_IRQn,0);while(!cnt2);cnt2=0;)voidTIM6_IRQHandler(void)(TIM6-SR&=TIM_SR_UIF;cnt1=1;)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论