单片机原理及应用课程设计温度报警系统

上传人:无*** 文档编号:78547790 上传时间:2022-04-22 格式:DOC 页数:21 大小:3.86MB
收藏 版权申诉 举报 下载
单片机原理及应用课程设计温度报警系统_第1页
第1页 / 共21页
单片机原理及应用课程设计温度报警系统_第2页
第2页 / 共21页
单片机原理及应用课程设计温度报警系统_第3页
第3页 / 共21页
资源描述:

《单片机原理及应用课程设计温度报警系统》由会员分享,可在线阅读,更多相关《单片机原理及应用课程设计温度报警系统(21页珍藏版)》请在装配图网上搜索。

1、福州大学至诚学院单片机原理及应用课程设计题 目: 基于DS18B20、1602LCD对温度进行显示, 通过按键对温度进行上限值设定,越限蜂鸣器报警 姓 名: 学 号: 系 别: 电气工程系 专 业: 电气工程及其自动化 年 级: 2010级 起讫日期: 2012.12.312013.1.13 指导教师: 目 录1、课程设计目的22、课程设计题目和实现目标23、设计方案24、Proteus仿真原理图45、程序流程图46、程序代码57、调试总结58、设计心得体会69、参考文献61、课程设计目的单片机原理及应用课程设计是与单片机原理及应用课程相配套的实践教学环节。单片机原理及应用是一门实践性很强的专

2、业基础课,通过课程设计,达到进一步理解单片机的硬件、软件和综合应用方面的知识,培养实践能力和综合应用能力,开拓学习积极性、主动性,学会灵活运用已经学过的知识,并能不断接受新的知识。培养大胆发明创造的设计理念,为今后就业打下良好的基础。通过课程设计,掌握以下知识和技能:1 单片机应用系统的总体方案的设计;2 单片机应用系统的硬件设计;3 单片机应用系统的软件程序设计;4 单片机开发系统的应用和调试能力2、课程设计题目和实现目标 使用DS18B20测温用1602LCD对温度进行显示,并能通过按键对温度进行上限值设定,要求越限蜂鸣器报警。3、设计方案3.1芯片资料3.1.1 Lcd1602液晶显示信

3、号真值表 3.1.2温度传感器DS18B20介绍DS18B20是美国DSLLAS半导体公司推出的第一篇支持“一线总线”接口的温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化成串型数字信号供处理器处理。主机控制DS18B20完成温度转换必须经过三个步骤:初始化、ROM操作指令、存储器操作指令。必须先启动DS18B20开始转换,再读出温度转换值。本程序仅挂接一个芯片,使用默认的12位转换精度,外接供电电源,读取的温度值高位字节送WDMSB单元,低位字节送WDLSB单元,再按照温度值字节的表示格式及其符号位,经过简单的变换即可得到实际温度值.单片机用串行方

4、式采集DS18B20的温度数据,执行相应的指令后,将温度信息用并行方式发送到1602LCD显示。适应电压范围宽,电压范围在3.05.5V,在寄生电源方式下可有数据线供电。独特的单线接口方式,它与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通信。支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。在使用中不需要任何外围元件,全部传感器元件及转换电路集成在形如一只三极管的集成电路内。测温范围-55+128,在-10+85时精度为0.5。可编程分辨率为912位,对应的可分辨率温度分别为0.5,0.25,0.125和0.0625,可实现高精度测温。在9位

5、分辨率时,最多在93.78ms内把温度转换为数字;12位分辨率时,最多在750ms内把温度转换为数字,显示速度快。测量结果直接输出数字温度信号,以“一线总线”串行送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。负压特性。电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。 引脚排列与说明:表1 高速暂存器RAM寄存器内容字节地址温度值低位(LSB)0温度值高位(MSB)1高温限值(TH)2低温限值(LT)3配置寄存器4保留5保留6保留7CRC校验值8 高速暂存器RAM由9个字节的存储器组成。第01字节是温度的显示位;第2和第3个字节是复制的TH和TL,同时第2和第3个字节的数字

6、可以更新;第4个字节是配置寄存器,同时第4个字节的数字可以更新;第5,6,7三个字节的保留的。可电擦出E2ROM又包括温度触发器TH和TL,以及一个配置寄存器。表3.2.4列出了温度数据在高速暂存器RAM的第0和第1个字节中的存储格式。表2 温度数据存储格式DS18B20在出厂时默认配置为12位,其中最高位为符号位,即温度值共11位,单片机在读取数据时,一次会读2字节共16位,读完后将低11位的二进制数转化为十进制数后再乘以0.0625便为所测的实际温度值。另外,还需要判断温度的正负。前5个数字为符号位,这5位同时变化,我们只需要判断11位就可以了。前5位为1时,读取的温度为负值,且测到的数值

7、需要取反加1再乘以0.0625才可得到实际温度值。前5位为0时,读取的温度为正值,且温度为正值时,只要将测得的数值乘以0.0625即可得到实际温度值。工作时序图 初始化时序如图3 图3 初始化时序1) 先将数据线置高电平1。2) 延时(该时间要求不是很严格,但是要尽可能短一点)。3) 数据线拉到低电平0。4) 延时750us(该时间范围可以在480us960us)。5) 数据线拉到高电平1。6) 延时等待。如果初始化成功则在1560us内产生一个有DS18B20返回的低电平0,据该状态可以确定它的存在。但是应注意,不能无限地等待,不然会使程序进入死循环,所以要进行超时判断。7) 若CPU读到数

8、据线上的低电平0后,还要进行延时,其延时的时间从发出高电平算起(第5)步的时间算起)最少要480us。8) 将数据线再次拉到高电平1后结束。 DS18B20写数据时序图如图4图4 写数据时序图1) 数据线先置低电平0。2) 延时确定的时间为15us。3) 按从低位到高位的顺序发送数据(一次只发送一位)。4) 延时时间为45us。5) 将数据线拉高到高电平1。6) 重复1)5)步骤,直到发送完整个字节。7) 最后将数据线拉高到1。 DS18B20读数据时序图如图5图5 读数据时序图1) 将数据线拉高到1。2) 延时2us。3) 将数据线拉低到0。4) 延时6us。5) 将数据线拉高到1。6) 延

9、时4us。7) 读数据线的状态位,并进行数据处理。8) 延时30us。9) 重复1)7)步骤,直到读取完一个字节。3.2方案设计 方案一DS18B20一对一连接方案,就是一个I/O口连接一个DS18B20,这种方案虽然占用单片机的三个I/O口,但采用这种方案大大的简化了编程难度,缩短了设计周期,同时也能保证系统的稳定,方案一的框图如图2.1所示。STC89C52单片机DS18B20 DS18B20键盘选择DS18B20LCD1602图 1 DS18B20多I/O口连接方案方案二 DS18B20单线连接方案,就是三个DS18B20连接到单片机的一个I/0口上,这种方案只用到单片机的一个I/O口,

10、大大的节约了单片机I/O口资源。缺点是在时序上比较复杂,DS18B20的编程增加了读ROM程序,搜索ROM和匹配ROM程序。方案二的框图如图2.2所示。STC89C52单片机DS18B20DS18B20LCD1602液晶显示键盘选择DS18B20 图 2 DS18B20单线连接方案方案的比较与选择方案一是把DS18B20的三个DQ端分别接到单片机的三个不同的I/O口,这种接法虽然占用的I/O口比较多,但是它的时序比较简单,不需要读取ROM序列号程序,搜索ROM序列号程序,匹配ROM序列号程序,软件上简化了很多。方案二是四DS18B20D的四个DQ端接到单片机的一个I/O口。这种接法在硬件上节省

11、了三个I/O口,在硬件上简化了不少。但是在软件上时序就增加了难度,需要添加读ROM序列号程序,搜索ROM序列号程序,匹配ROM序列号程序。 本设计由于功能比较简单I/O口资源丰富,同时时间比较紧张,所以通过两个方案的比较,决定选用方案一。4、Proteus仿真原理图 实物图: 5、程序流程主程序的流程图如下所示LCD初始化开始写入报警温度值上限转换、显示读取温度数据显示温度未超上限?报警结束复位1602Lcd初始化按键扫描6、程序代码见附录。7、调试总结在读懂DS18B20芯片手册和1602LCD芯片手册的前提下,将程序的总体框架用keil c编写出来后,修改到语法完全正确,编译生成hex文件

12、。将生成的hex文件导入proteus仿真画好的电路图,发现1602LCD什么都不显示。于是我把1602LCD的光标开起来,发现可以看到光标在闪烁。于是我试着写了一段简短的程序,仅89C52与1602LCD的送显示,让他显示“0123456789”。结果还是没显示出来,最后才想到要送到LCD显示的必须是字符,于是我定义了一个uchar code table=0123456789;字符表,再次尝试,发现成功显示,同时也表明了1602LCD的那段程序没有问题。当温度超过上限值时,蜂鸣器不能报警,按检测报警另设的按钮也不能报警。查看电路图,原来是程序设计的报警端口和硬件的没有匹配。8、设计心得体会通

13、过这次课设,对单片机的使用和编程有了更加熟悉。同时也收集了一些常见的错误,避免下次编程时再犯。9、参考文献1单片机原理、接口及应用嵌入式系统技术基础(第二版)-清华大学出版社附录 程序#include #include #define uchar unsigned char #define uint unsigned int uchar code table=wendu:;uchar code table1=High wendu:;uchar code table2=warning;uchar code table3= ;uchar currentt=0;uchar temp=0x00,0x0

14、0;/读取的温度值uchar alarm_temp2=25,12;/TH TL 初始值uchar alarm_temp12=00,00;/TH TL uchar sw,gw,temp1=15;sbit sound=P15;/蜂鸣器/*= =键位设定= =*/sbit s1=P11;sbit s2=P12;/*= =定义1602液晶屏数据= =*/sbit rs = P26; /模式位,为0输入指令,为1输入数据 sbit rw = P25; /读写位,为0读,为1写 sbit en = P27; /使能位,高脉冲 /*=ds18b20时钟信号线=*/sbit qd= P37; /信号线/*=延

15、时=*/void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-); void delay2(uint x)while(-x);/-写指令-/void write_com(uchar com)rs=0;rw=0;en=0;P0=com;delay(5);en=1;delay(5);en=0;/-写数据-/void write_date(uchar date) rs=1;rw=0;en=0;P0=date;delay(5);en=1;delay(5);en=0;/-初始化1602-/void init1602() en=0;write_co

16、m(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80); /-ds18b20-/-初始化ds18b20-/uchar init_ds18b20()uchar status;qd=1;delay2(8);qd=0;delay2(90);qd=1;delay2(8);status=qd;delay2(100);qd=1;return status;/-向18b20读一个字节-/uchar read_ds18b20()uchar i,dat=0;qd=1;_nop_();for(i=0;i=1;qd=1;_nop

17、_();_nop_();if(qd) dat|=0x80;delay2(30);qd=1;return dat;/-向18b20写一个字节-/void write_ds18b20(uchar dat)uchar i;for(i=0;i=1;/-读取温度值-/void read_wendu()init_ds18b20();write_ds18b20(0xcc); / 跳过序列号write_ds18b20(0x44); / 启动温度转换init_ds18b20();write_ds18b20(0xcc); / 跳过序列号write_ds18b20(0xbe); / 读取温度寄存器temp0=rea

18、d_ds18b20(); / 温度第八位temp1=read_ds18b20();/ 温度高八位alarm_temp10=read_ds18b20();/报警温度THalarm_temp11=read_ds18b20();/报警温度TL/-设定报警值-/void set_alarm()init_ds18b20();write_ds18b20(0xcc); write_ds18b20(0x4e); write_ds18b20(alarm_temp0); write_ds18b20(alarm_temp1); write_ds18b20(0x7f); init_ds18b20();write_ds

19、18b20(0xcc); write_ds18b20(0x48); /-显示温度-/void display_temp()currentt=(temp0 & 0xf0)4) |(temp1 & 0x07)4);sw=currentt%100/10;gw=currentt%10;write_com(0x80+0x05);write_date(0x30+sw);write_date(0x30+gw); if(currentt=alarm_temp0-2)sound=1;write_com(0x80+0x09);for(i=0;i7;i+)write_date(table3i);/*键盘设置报警温度

20、*/void key_scan() uchar gewei,shiwei; if(s1=0) delay(10);if(s1=0)while(!s1);temp1+;gewei=temp1%10;shiwei=temp1/10;write_com(0x80+0x4a);write_date(0x30+shiwei);/ write_date(0x30+gewei);alarm_temp0=temp1;if(s2=0) delay(10);if(s2=0)while(!s2);temp1-;gewei=temp1%10;shiwei=temp1/10;write_com(0x80+0x4a);w

21、rite_date(0x30+shiwei);/ write_date(0x30+gewei);alarm_temp0=temp1;/*显示设定界面*/void display() uchar i;write_com(0x80);for(i=0;i5;i+)write_date(tablei); write_com(0xC0); for(i=0;i10;i+)write_date(table1i);void InitTimer1(void) TMOD |= 0x10; TH1 = 0x0D8; TL1 = 0x0F0; EA = 1; ET1 = 1; TR1 = 0;void Timer1Interrupt(void) interrupt 3 TH1 = 0x0D8; TL1 = 0x0F0; sound=sound;void main()init1602(); InitTimer1(); init_ds18b20();display();set_alarm();while(1) set_alarm();key_scan();read_wendu(); display_temp();delay(80);alarm();20

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!