1、河南理工大学单片机应用和仿真训练设计汇报基于单片机数字温度计设计姓 名: 学 号: 专业班级: 指导老师: 所在学院: 电气工程和自动化系 6月26日基于单片机数字温度计设计摘要伴随现代信息技术飞速发展和传统工业改造逐步实现能够独立工作温度检测和显示系统应用于很多领域。传统温度检测以热敏电阻为温度敏感元件。热敏电阻成本低,但需后续信号处理电路,而且可靠性相对较差,测温正确度低,检测系统也有一定误差。和传统温度计相比,这里设计数字温度计含有读数方便,测温范围广,测温正确,数字显示,适用范围宽等特点。选择AT89S52型单片机作为主控制器件,DSl8B20作为测温传感器经过4位共阳极LED数码管串
2、口传送数据,实现温度显示。经过DSl8B20直接读取被测温度值,进行数据转换,该器件物理化学性能稳定,线性度很好,在0100最大线性偏差小于0.1。该器件可直接向单片机传输数字信号,便于单片机处理及控制。另外,该温度计还能直接采取测温器件测量温度,从而简化数据传输和处理过程。目录1 概述 4 1.1课题名称 4 1.2课题要求4 1.3设计目标意义42 系统总体方案及硬件设计 5 2.1单片机选择5 2.2温度传感器介绍6 2.3温度传感器和单片机连接8 2.4复位信号及外部复位电路8 2.5单片机和报警电路92.6显示电路93 软件设计 104 Proteus软件仿真 12 4.1 仿真图
3、12 4.2仿真结果分析135 总结体会 14参考文件 15附录 1 程序源代码 15附录 2 系统原理图231概述1.1课题名称 基于单片机数字温度计设计1.2课题要求 1)基础范围-501102)精度误差小于0.53)LED数码直读显示4)能够设定温度上下限报警功效1.3设计目标和意义 温度数我们日常生产和生活中实时在接触到物理量,不过它是看不到,仅凭感觉只能感觉到大约温度值,传统指针式温度计即使能指示温度,不过精度低,使用不够方便,显示不够直观,数字温度计出现能够让大家直观了解自己想知道温度到底是多少度。数字温度计采取温度敏感元件也就是温度传感器(如铂电阻,热电偶,半导体,热敏电阻等),
4、将温度改变转换成电信号改变,如电压和电流改变,温度改变和电信号改变有一定关系,如线性关系,一定曲线关系等,这个电信号能够使用模数转换电路即AD转换电路将模拟信号转换为数字信号,数字信号再送给处理单元,如单片机或PC机等,处理单元经过内部软件计算将这个数字信号和温度联络起来,成为能够显示出来温度数值,如25.0摄氏度,然后经过显示单元,如LED,LCD或电脑屏幕等显示出来给人观察。这么就完成了数字温度计基础测温功效。数字温度计依据使用传感器不一样,AD转换电路,及处理单元不一样,它精度,稳定性,测温范围等全部有区分,这就要依据实际情况选择符合规格数字温度计。数字温度计有手持式,盘装式,及医用小体
5、积等等。另外作为电气工程及其自动化学生,经过基于单片机数字温度计设计能够提升自己理论联络实际能力,能够愈加好掌握所学专业理论只是,也培养了自己动手能力,同时,也培养了信息搜集能力和分析问题处理问题能力 2系统总体设计方案及硬件设计作为对专业理论知识学习后实践步骤,我选择了自行设计基于AT89S52单片机数字温度计。设计原理框图如,图 1。图 1 数字温度计原理框图2.1 单片机选择AT89S52是一个低功耗、高性能CMOS 8位微控制器,含有8K 在系统可编程Flash 存放器。使用Atmel 企业高密度非易失性存放器技术制造,和工业80C51 产品指令和引脚完全兼容。片上Flash许可程序存
6、放器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧8 位CPU 和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。Protues仿真软件中用AT89C51替换AT89S52,单片机小系统电路图图2所表示。图2 单片机小系统电路 AT89S52关键性能1、和MCS-51单片机产品兼容;2、8K字节在系统可编程Flash存放器;3、1000次擦写周期; 4、全静态操作:0Hz-33MHz; 5、三级加密程序存放器;6、32个可编程I/O口线;7、三个16位定时器/计数器;8、六个中止源;9、全双工UART串行通道; 10、低功耗空闲和掉电模式;11、掉电后中
7、止可唤醒;12、看门狗定时器;13、双数据指针;14、掉电标识符 。2.2 温度传感器介绍DS18B20能够程序设定912位分辨率,精度为0.5C。可选更小封装方法,更宽电压适用范围。分辨率设定,及用户设定报警温度存放在EPROM中,掉电后仍然保留。图3 温度传感器引脚功效说明: NC :空引脚,悬空不使用; VDD :可选电源脚,电源电压范围35.5V。当工作于寄生电源时,此引脚必需接地。 DQ :数据输入/输出脚。漏极开路,常态下高电平。 GND :为电源地DS18B20内部结构关键由四部分组成:64位光刻ROM、温度传感器、非挥发温度报警触发器TH和TL、配置寄存器。光刻ROM中64位序
8、列号是出厂前被光刻好,它能够看作是该DS18B20地址序列码。64位光刻ROM排列是:开始8位(28H)是产品类型标号,接着48位是该DS18B20本身序列号,最终8位是前面56位循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM作用是使每一个DS18B20全部各不相同,这么就能够实现一根总线上挂接多个DS18B20目标。 DS18B20中温度传感器可完成对温度测量,以12位转化为例:用16位符号扩展二进制补码读数形式提供,以0.0625/LSB形式表示,其中S为符号位。 这是12位转化后得到12位数据,存放在18B20两个8比特RAM中,二进制中前面5位是符号位,假如测得温度大于0,
9、这5位为0,只要将测到数值乘于0.0625即可得到实际温度;假如温度小于0,这5位为1,测到数值需要取反加1再乘于0.0625即可得到实际温度。 比如+125数字输出为07D0H,+25.0625数字输出为0191H,-25.0625数字输出为FF6FH,-55数字输出为FC90H。 DS18B20温度传感器内部存放器包含一个高速暂存RAM和一个非易失性可电擦除E2RAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。 暂存存放器包含了8个连续字节,前两个字节是测得温度信息,第一个字节内容是温度低八位,第二个字节是温度高八位。第三个和第四个字节是TH、TL易失性拷贝,第五个字节是结构寄存
10、器易失性拷贝,这三个字节内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节。 该字节各位意义以下:TM R1 R0 1 1 1 1 1低五位一直全部是1 ,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率,如表1所表示:(DS18B20出厂时被设置为12位) 表1 DS18B20温度转换时间表R1R0分辨率/位温度最大转向时间00993.750110187.510113751112750依据DS18B20通讯协议,主机控制DS18B20完成温度转换必需经过三个步骤
11、:每一次读写之前全部要对DS18B20进行复位,复位成功后发送一条ROM指令,最终发送RAM指令,这么才能对DS18B20进行预定操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等候1660微秒左右,后发出60240微秒存在低脉冲,主CPU收到此信号表示复位成功。2.3 温度传感器和单片机连接DS18B20采取外部电源供电方法,在外部电源供电方法下,DS18B20工作电源由VCC引脚接入,此时I/O线不需要强上拉,不存在电源电流不足问题,能够确保转换精度,同时在总线上理论能够挂接任意多个DS18B20传感器,组成多点测温系统。注意:在外部供电方法下,DS18B2
12、0GND引脚不能悬空 ,不然不能转换温度,读取温度总是85。图4 DS18B20接线2.4 复位信号及外部复位电路该复位信号高电平有效,其有效时间应连续24个振荡脉冲周期即两个机器周期以上。若使用频率为12 MHz晶体振荡器,则复位信号连续时间应超出2s才完成复位操作。 图 5 复位电路2.5 单片机和报警电路报警电路分为两部分,一部分是蜂鸣器声音报警,另一部分是发光二极管放光报警。具体情况以下:接通电源,两个(红色,黄色)发光二极管全部不亮,当温度超出上线设定值(如38摄氏度)时,红色二极管亮,同时蜂鸣器也报警;当温度低于下限设定值时(如5摄氏度)时,黄色二极管亮,同时蜂鸣器也开始报警。 图
13、6 蜂鸣器报警 图7 发光二极管报警 2.6 显示电路采取技术成熟5461AS共阴4位数码管 0.56英寸红色。LED显示分为静态显示和动态显示。这里采取静态显示,系统经过单片机串行口来实现静态显示。串行口为方法零状态,即工作在移位寄存器方法,波特率为振荡频率1/12。当器件实施任何一条将SBUF作为目标寄存器命令时,数据便开始从RXD端发送。在写信号有效时,相隔一个机器周期后发送控制端SEND有效,即许可RXD发送数据,同时许可从TXD端输出移位脉冲。图8为显示电路连接图。 图 8 数码显示连接图3 软件设计DSl8820关键数据元件有:64位激光Lasered ROM,温度灵敏元件和非易失
14、性温度告警触发器TH和TL。DSBl820能够从单总线获取电源,当信号线为高电平时,将能量贮存在内部电容器中;当单信号线为低电平时,将该电源断开,直到信号线变为高电平重新接上寄生(电容)电源为止。另外,还可外接5 V电源,给DSl8820供电。DSl8820供电方法灵活,利用外接电源还可增加系统稳定性和可靠性。图9为读取数据步骤图。开始DS18B20初始化开启温度转换读取温度寄存器跳过读序列号操作跳过读序列号操作DS18B20初始化RETLOW-低八位 HIGH-高八位图9 读取数据步骤图读出温度数据后,LOW低四位为温度小数部分,能够正确到0.0625,LOW高四位和HIGH低四位为温度整数
15、部分,HIGH高四位全部为1表示负数,全为0表示正数。所以先将数据提取出来,分为三个部分:小数部分、整数部分和符号部分。小数部分进行四舍五入处理:大于0.5话,向个位进1;小于0.5时候,舍去不要。当数据是个负数时候,显示之前要进行数据转换,将其整数部分取反加一。还因为DS18B20最低温度只能为-55,所以能够将整数部分最高位换成一个“-”,表示为负数。图10为温度数据处理程序步骤图。开始提取整数部分存入HT提取小数部分存入LTLT右移三位,将精度降低到0.5摄氏度HT+将小数部分整数化提取符号部分存入signLT是否大于5Sign=?0XF0RET负数表示flag=1 HT=HT+1YNN
16、Y图10 温度数据处理步骤图4 Proteus软件仿真 仿真过程相当顺利,需要注意原件选择,尤其是数码管显示块共阴、共阳,还有就是电阻选择,太大太小全部会影响试验效果。在仿真中不存在焊接问题,所以接线只要引脚接口正确就是没问题。另外就是程序调试,相当关键。4.1 仿真图 图 11 当温度为上下限之间时仿真情况图 12 温度在温度下限设定值以下仿真图 图 13 温度在温度上限设定值以上仿真图4.2仿真结果分析温度在上下限设定值范围内是,放光二极管全部是不亮,当实际温度值,低于设定下限时,黄色放光二极管亮;当实际温度高于上限设定值时,红色发光二极管亮。 原因,经过程序控制P1.0(红色放光二极管)
17、 P1.1(黄色发光二极管),度在上下限设定值范围内是,P1.0,P1.1全部是低电平,故发光二极管不会亮,当实际温度值,低于设定下限时,P1.0 为低电平P1.1为高电平,故黄色放光二极管亮;当实际温度高于上限设定值时,P1.0为高电平P1.1为低电平,故红色发光二极管亮。5 总结和体会作为一名电气工程及其自动化大三学生,我认为做单片机课程设计是很有意义,而且也是必需。在做这次课程设计过程中,我感慨最深当属查阅大量设计资料了。为了让自己设计愈加完善,查阅这方面实际资料是十分必需,也是必不可少。其次,在这次课程设计中,我们利用了以前学过专业课知识,如:proteus仿真、C语言、模拟和数字电路
18、知识等。即使过去我从未独立应用过她们,但在学习过程中带着问题去学我发觉效率很高,这是我做这次课程设计又一收获。最终,要做好一个课程设计,就必需做到:在设计程序之前,对所用单片机内部结构有一个系统了解,知道该单片机有哪些资源;要有一个清楚思绪和一个完整软件步骤图;在设计程序时,不能妄想一次将整个程序设计好,反复修改、不停改善是程序设计必经之路;要养成注释程序好习惯,这么为资料保留和交流提供了方便;在设计中碰到问题要统计,以免下次碰到一样问题。在这次课程设计中,我真正意识到,在以后学习中,要理论联络实际,把我们所学理论知识用到实际当中,学习单片机更是如此,程序只有在常常写和读过程中才能提升,这就是
19、这次课程设计最大收获。参考文件1单片机原理及应用技术. 余发山,王福忠 徐州 中国矿业大学出版社.2 微型计算机控制技术 王新 中国电力出版社3 模拟电子技术 艾永乐 中国电力出版社附录 1 程序源代码/*程序名称:DS18B20温度测量、报警系统简明说明:DS18B20温度计,温度测量范围099.9摄氏度 可设置上限报警温度、下限报警温度 即高于上限值或低于下限值时蜂鸣器报警 默认上限报警温度为38、默认下限报警温度为5 报警值可设置范围:最低上限报警值等于目前下限报警值 最高下限报警值等于目前上限报警值 将下限报警值调为0时为关闭下限报警功效 */#include #include DS1
20、8B20.h #define uint unsigned int#define uchar unsigned char /宏定义#define SET P3_1 /定义调整键#define DEC P3_2 /定义降低键#define ADD P3_3 /定义增加键#define BEEP P3_7 /定义蜂鸣器bit shanshuo_st; /闪烁间隔标志bit beep_st; /蜂鸣器间隔标志sbit DIAN = P07; /小数点uchar x=0; /计数器signed char m; /温度值全局变量uchar n; /温度值全局变量uchar set_st=0; /状态标志s
21、igned char shangxian=38; /上限报警温度,默认值为38signed char xiaxian=5; /下限报警温度,默认值为5uchar code LEDData=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00;unsigned int ReadTemperature(void);/*延时子程序*/void Delay(uint num) while( -num );/*初始化定时器0*/void InitTimer(void) TMOD=0x1; TH0=0x3c; TL0=0xb0; /50ms(晶振12
22、M)/*定时器0中止服务程序*/void timer0(void) interrupt 1 using 0 TH0=0x3c; TL0=0xb0; x+;/*外部中止0服务程序*/void int0(void) interrupt 0using 1 EX0=0; /关外部中止0 if(DEC=0&set_st=1) shangxian-; if(shangxianxiaxian)shangxian=xiaxian; else if(DEC=0&set_st=2) xiaxian-; if(xiaxian99)shangxian=99; else if(ADD=0&set_st=2) xiaxi
23、an+; if(xiaxianshangxian)xiaxian=shangxian; /*读取温度*/void check_wendu(void) uint a,b,c; c=ReadTemperature()-5; /获取温度值并减去DS18B20温漂误差 a=c/100; /计算得到十位数字 b=c/10-a*10; /计算得到个位数字 m=c/10; /计算得到整数位 n=c-a*100-b*10; /计算得到小数位 if(m99)m=99;n=9; /设置温度显示上限 /*显示开机初始化等候画面*/Disp_init() P0 = 0x40; /显示- P2 = 0xf7; Dela
24、y(200); P2 = 0xfb; Delay(200); P2 = 0xfd; Delay(200); P2 = 0xfe; Delay(200); P2 = 0xff; /关闭显示/*显示温度子程序*/Disp_Temperature() /显示温度 P2 = 0xf7; P0 =0x39; /显示C Delay(300); P2 = 0xfb; P0 =LEDDatan; /显示个位 Delay(300); P2 = 0xfd; P0 =LEDDatam%10; /显示十位 DIAN = 1; /显示小数点 Delay(300); P2 = 0xfe; P0 =LEDDatam/10;
25、 /显示百位 Delay(300); P2 = 0xff; /关闭显示/*显示报警温度子程序*/Disp_alarm(uchar baojing)P2 = 0xf7; P0 =0x39; /显示C Delay(200); P2 = 0xfb; P0 =LEDDatabaojing%10; /显示十位 Delay(200); P2 = 0xfd; P0 =LEDDatabaojing/10; /显示百位 Delay(200); P2 = 0xfe; if(set_st=1)P0 =0x76; else if(set_st=2)P0 =0x38; /上限H、下限L标示 Delay(200); P2
26、 = 0xff; /关闭显示/*报警子程序*/void Alarm() unsigned int i; for(i=0;i200;i+)/喇叭发声时间循环,改变大小能够改变发声时间长短 Delay(80);/参数决定发声频率,估算值 BEEP=!BEEP; BEEP=1; /喇叭停止工作,间歇时间,可更改 Delay(0); /*主函数*/void main(void) uint z; InitTimer(); /初始化定时器 EA=1; /全局中止开关 TR0=1; ET0=1; /开启定时器0 IT0=1; IT1=1; check_wendu(); check_wendu(); for(
27、z=0;z2)set_st=0; if(set_st=0) EX0=0; /关闭外部中止0 EX1=0; /关闭外部中止1 check_wendu(); Disp_Temperature(); if(m=shangxian) P1_0=0; else P1_0=1; if(m=shangxian)|(m=10)shanshuo_st=shanshuo_st;x=0; if(shanshuo_st) Disp_alarm(shangxian); else if(set_st=2) BEEP=1; /关闭蜂鸣器 EX0=1; /开启外部中止0 EX1=1; /开启外部中止1 if(x=10)shanshuo_st=shanshuo_st;x=0; if(shanshuo_st) Disp_alarm(xiaxian); /*END*附录 2 系统原理图
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100