单片机课程设计报告-基于AT89C51单片机的数显温度传感器设计_第1页
单片机课程设计报告-基于AT89C51单片机的数显温度传感器设计_第2页
单片机课程设计报告-基于AT89C51单片机的数显温度传感器设计_第3页
单片机课程设计报告-基于AT89C51单片机的数显温度传感器设计_第4页
单片机课程设计报告-基于AT89C51单片机的数显温度传感器设计_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1、课题二:基于AT89c51单片机的数显温度传感器设计一、设计目的1、掌握51单片机最小系统的设计;2、掌握温度传感器DS18B20的使用;3、掌握C51的编程方式。二、设计任务与要求基于AT89C51单片机的数显温度传感器设计主要具有如下功能,具体 要求如下:1 .温度传感器DS18B20检测环境温度。2 .用4位数码管显示温度;3 .设定一个温度,当检测的温度到达这个设定值时,用蜂鸣器 实现报警。三、设计步骤 根据课题,查阅相关资料。 画出系统原理框图,确定根本电路。(电路图不能在Protuse里画,在A4纸上或者用DXP画电路图) 在Protuse里进行仿真。(仿真结果出来后,才发放元件)

2、 按电路原理图在板子上焊接电路。 调试硬件。 撰写电子综合设计报告:字数约2000-3000字(不包括程序清单),格式见附件2)。 最后一个下午,制作PPT进行辩论。题目二:基于AT89c51单片机的数显温度传感器设计元件名称型号数量单片机最小开发板STC89C521温度传感器DS18B201三极管88501蜂鸣器1LED红1电阻10k、 3k、 2k、 Ik、510、 330各5各2位一体数码管共阳2AC/DC (5V/1A)电源1单排插针402双排插针4029X15cm万用板(3连 孔)1杜邦线15附件2:单片机原理及其应用课程设计设计报告格式44岩松市竹故当晚CITY COLLEGE O

3、F SCIENCE AND TECHNOLOGY.CHONGQING UNIVERSITY单片机原理及其应用课程设计成绩:重庆大学城市科技学院电气学院基于AT89c51单片机的数显温度传感器设计报告一、设计目的作用本设计是一款简单实用的小型数字温度计,所采用的主要元件有传感器 DS18B20,单片机AT89c52,四位共阴极数码管一个,电容电阻假设干。DS18B20 支持“一线总线接口,测量温度范围-55。 +125。在-10C +85° C范围内,精度为±0.5° °C。18B20的精度较差,为土 20 。现场温度 直接以“一线总线的数字方式传输,大大

4、提高了系统的抗干扰性。适合于恶劣 环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。 本次数字温度计的设计共分为五局部,主控制器,LED显示局部,传感器局部, 复位局部,按键设置局部,时钟电路。主控制器即单片机局部,用于存储程序和 控制电路:LED显示局部是指四位共阴极数码管,用来显示温度;传感器局部, 即温度传感器,用来采集温度,进行温度转换;复位局部,即复位电路,按键局 部用来设置上下限报警温度。测量的总过程是,传感器采集到外部环境的温度, 并进行转换后传到单片机,经过单片机处理判断后将温度传递到数码管显示。 二、设计要求基于AT89C51单片机的数显温度传感器设计主

5、要具有如下功能,具体要求如 下:(1) .温度传感器DS18B20检测环境温度。(2) .用两个2位一体共阳数码管显示温度;(3) .通过按键开关设定一个上限温度和一个下限温度,当检测的温度到达这个 设定值时,用蜂鸣器实现报警,同时LED灯闪烁。三、设计的具体实现1、设计原理用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常 容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直 接读取被测温度值,进行转换,就可以满足设计要求。(DS18B20数字温度传感 器具有单总线的独特优点,可以使用户轻松地组建起传感器网络,并可使多点温 度测量电路变得简单、可靠,所

6、以在该设计中采用DS18B20数字温度传感器测 量温度。)实验名称是“基于AT89C51单片机的数显温度传感器设计,涉及到 MCS-51系列的单片机,我们首先有设计一个能使单片机工作的最小系统,然后 温度传感器将实时温度值送给单片机,通过对单片机进行软件编程实现数据处理, 然后送给LED共阴数码管显示,在对单片机编程时要考虑到要使得能通过按键 开关设置上限报警温度及下限报警温度,通过蜂鸣器报警,在报警的同时LED 灯同步闪烁。设计任务书中已给出了元件清单,但是我们需要在软件中对自己设 计的电路进行仿真我们还需要画出单片机的最小系统电路。总体电路结构框图所 示:共用数码管显 示模块DS18BB2

7、0 温 度传感器模块<=>蜂鸣器报警及LED显示模块按犍控制模块电源2、系统设计(详细介绍各单元电路的选择、设计及工作原理分析,并介绍有关参数的计算 及元器件参数的选择等,要求有原理图。)、硬件设计硬件电路设计通过单片机仿真软件Proteus 8. 0进行原理图的编辑,根据实 验要求及所给出的元件设计出如下电路原理图,并进行了仿真时钟及复位模块实验所给的元件中直接已给出了 AT89C51的最小系统板,但是我们在设计电 路时还是你需要画出该局部电路,时钟复位为能使单片机工作的最简单的电路, 又称最小系统。具体实验电路如下:时钟电路有12MHz的晶振及两个2030PF的瓷片电容(无极性

8、)连接在单片 机的XTAL1及XTAL2连个端口;复位电路由10K的电阻,10UF电解电容(有极 性)以及按键开关组成,接在单片机的RST 口。当系统出现故障错误,我想让系 统恢复初始化状态可以通过对按动按键开关实现对电容的充放电从而实现系统 的复位。蜂鸣器报警及LED显示模块蜂鸣器用于当温度传感器的输入的温度数值大于认为设定的上限温度或者 小于下限温度时,系统会给出相应的信号使得蜂鸣器发出声音同时让LED灯闪烁蜂鸣器由一个PNP型的三极管驱动接在单片机的P1. 0 口,当P1. 0 口输出低 电平是蜂鸣器发出声音;LED灯正极通过1K的电阻上拉接Vcc,负极接在单片机 的PL 1 口,当系统

9、在Pl. 1 口输出低电平时LED灯光。共阳数码管显示显示模块实验给出的数码管为2位一体共阳的数码管,在实验显示中我们需要四个数 码管去显示相应的温度,所以采用两个2位一体共阳数码管并联当做一个4位一 体的共阳数码管。电路原理图如下:数码管的使用设计到了段选及位选,我们把段选接在单片机的P0 口,位选 接在数码管的P2.4P2.7 口,需要注意的是此数码管为共阳的,所以P0 口输出 的低电平完全可以驱动数码管的段选显示,但是位选输出高电平缺乏以驱动数码 管显示导致数码管的凫度不够,此时我们需要在数码管的位选段接上相应的1K 的上拉电阻,这样数码管的挖度就可以明显的得到提升。DS18BB20温度

10、传感器模块DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改良 型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测 温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。ibOOQNE)DS18B20有三只引脚,VCC, DQ,和工©.电路图如下:接在单片机的P2.3 口,DS18B20的DQ端需要接一个4. 7K左右的上拉电阻。按键控制模块按键是用来设置报警的上下限温。K1是用来进入上下限调节模式的,当 按一下K1进入上限调节模式,再按一下进入下限调节模式。在正常模式下, 按一下K2进入查看上限温度模式,显示1s左右自动退出;按一下K

11、3进入查 看下限温度模式,显示1s左右自动退出;按一下K4消除按键音,再按一下 启动按键音。在调节上下限温度模式下,K2是实现加1功能,K1是实现减 1功能,K3是用来设定上下限温度正负的。、软件设计通过单片机编程软件Keil 4进行编程,程序局部通过一个主函数和自定义 的三 #include/zdsl8b20. h #includez/keyscan. httincludedisplay. h头文件,分别完成温度的采集转化、通过键盘设定上下限报警温度以及模式的切 换、通过定时器0延时使数码管动态显示温度 系统的主流程图:初始化3、系统实现(详细介绍实物连接图及运行程序时的每种结果,要求有图为

12、证,并对每张图片 进行简单的说明)根据系统的设计框图,查找相关资料,在Proteus 8.0中画出原理图,在 KEIL 4软件中编写好程序,然后将这两个软件结合,将写好的程序在Proteus 8. 0 中烧录进单片机,然后开启仿真开关,即可显示设计效果,通过修改硬件电路的 同时结合程序,实现实验要求。然后开始焊接硬件电路,在多孔板上焊出相应的 电路,用杜邦线将各个模块与单片机最小系统板连接在一起得到最终电路,用烧 录软件将程序烧录进单片机,最终以实际电路的形式展现出成果。系统的调试及性能分析:硬件调试,首先检查电感的焊接是否正确,然后可用万用表测试或通电检测。软件调试可以先编写显示程序并进行硬

13、件的正确性检验,然后分别进行主程 序、读出温度子程序、温度转换命令子程序、计算温度子程序和现实数据刷新子程序等的编程及调试四、总结(对整个设计工作过程进行归纳和综合,对设计中所存在的问题和缺乏进行分析 和总结,提出解决的方法、措施、建议和对这次设计实践的认识、收获和提高。 )通过本次课程设计使我收获很多,从一开始对单片机仿真软件的使用到后来渐渐 的熟悉,深深感觉到了我们在设计电路的时候为了验证我们方案的可行性,我们 必须借助一些仿真软件,来模拟我们设计的电路,这样既可以节省本也使得我们 焊接实物时有了很好的依据,要学会以这种方法为根底再来焊接电路。通过系统 仿真软件Proteus和编译软件Ke

14、il,使我们进一步了解了单片机的设计制作过程, 其中最为困难的是软件局部,即编程局部,我们上网找了好多资料,虽然经过自 己的修改,但还是有很多功能不能实现,如温度上下限设置。由于Proteus并不 是很熟练,在使用的过程中有很多原件的名称不知道,从而花费了大量的时间查 阅资料。在应用仿真的过程中,还出现了仿真软件出现问题,不管怎样修改程序, 结果在仿真软件上还是出现错误,后来发现是我们使用的软件是盗版的所以他可 能在仿真过程中出现错误,最终决定先将硬件焊接出来将程序写进去看看结果, 再对软件进行相应的调整,最后焊接出来将程序写进单片机经过简单的调整实现 了实验要求。最后一步的焊接硬件也遇到了不

15、少麻烦。综上所述我们得出这样的 结论,应该借助软件仿真证明我们方案的可行性,设计时实际电路和我们理论上 的数值是有所差异的,我们也要学会将理论知识与实际结合起来,这样我们才能 在实际中提高自我能力,我们才能真正理解并在实际中运用我们的知识。五、附录附录一:元件清单元件名称型号数量单片机最小开发板STC89C521温度传感器DS18B201三极管88501蜂鸣器1LED红1电阻10k、 3k、 2k、 Ik、510、 330各5各2位一体数码管共阳2AC/DC (5V/1A)电源1单排插针402双排插针4029X15cm万用板(3连 孔)1杜邦线15附录二:实物焊接图附录三:程序/*程序名;基于

16、51单片机的温度计功能:实时测量温度,超过上下限报警,报警温度可手动调整。K1是用来进入上下限调节模式的,当按一下K1进入上限 调节模式,再按一下进入下限调节模式。在正常模式下, 按一下K2进入查看上限温度模式,显示1s左右自动退出: 按一下K3进入查看下限温度模式,显示1s左右自动退出: 按一下K4消除按键音,再按一下启动按键音。在调节上 下限温度模式下,K2是实现加1功能,K1是实现减1功能,K3是用来设定上下限温度正负的。#include<reg52.h>将intrins.h头文件包含到主程序(调用其中的。p_()#include<intrins.li>空操作函数

17、延时)#dcfine uint unsigned int#define uchar unsigned charuchar max=OxOO.min=OxOO;max是上限报警温度,min是下限报警温度bits=0;/s是调整上下限温度时温度闪烁的标志位,s=0不显示200ms, s=l显示Is左右bitsl=0;/si标志位用于上下限查看时的显示void display 1 (uint z);声明 display 1 ()函数(display.h 头文件中的函数,dsl8b20.h要用应先声明)#includeMdsl8b20.hH#includcnkeyscan.hM#includcndis

18、play.hH /*/主函数/*/ void inain()beer=l;led=l;timer l_init(O);get_teniperature( 1);关闭蜂鸣器关闭LED灯初始化定时器1 (未启动定时器1)首次启动DS18B20获取温度(DS18B20上电后自动将EEPROM中的上下限温度复制到TH和TL存放器)while(l)(keyscan();getjemperature(O);display(teinp,temp_d *0.625); alarm();/*程序名;dsl8b20keyscan函数功能:通过键盘设定设定上下限报警温度*/#ifndef _keyscan_H定义头

19、文件#define _keyscan_H sbit keyl=P2A2;sbit key2=P2Al;sbit key3=P2AO;sbit key4=P3A3;uchari=O;定义全局变量i用于不同功能模式的选择,'O'正常模式,1'上限调节模式,'2'下限调节模式uchar a=O;定义全局变量a用于不同模式下数码管显示的选择bit k4=0;/K4按键双功能选择位,k4=0时K4按键选择消按键音的功能,k4=l时K4按键选择正负温度设定功能bit v=O;K2、K3按键双功能选择位,v=O时选择上下限查看功能,v=l时选择上下限温度加减功能bit

20、 vl=O;/vl = l时定时1250nls时间到自动关闭报警上下限查看功能bit v2=0;消按键音功能调整位,为'0'时开按键音,为时关按键音/*/读键盘延时子函数延时1ms左右/*/ void keyscan_delay(uint z) (uintij;for(i=z;i>0;i-)for(j=120:j>0;j-);) /*/温度调门函数/*/intteinp_change(intcount.bit f)上下限温度调整if(key2=0)判断K2是否按下if(v2=0)beer=0;keyscan_delay(10); if(key2=0) (beer=l

21、;if(f=O)(count+;v2=0开按键音,否那么消按键音延时10ms再次判断K2是否按下(实现按按犍时消抖)K2按下关按键音假设温度为正每按一下K2温度上调1if(a=l)if(count>125)count=125;)当温度值大于 125 时不上调if(a=2)if(count> 125) count=125;)if(f!=0)假设温度为负count+;每按一下K2温度下调1if(a= 1)if(count>55) count=55;当温度值小于-55 时不再下调 if(a=2) if(count>55) count=55;)while(key2=0);K2松

22、开按键时消抖keyscan_delay(10);) if(key3=0) ( if(v2=0)beer=0: keyscan_delay(10); if(key3=0)/K3按按键时消抖( becr=l; count-;每按一下K3温度为正时下调1,为负时上调1if(a=l)if(count<0) coimt=0;当温度值到达 0 时不再调 if(a=2)if(count<0) count=0; ) while(key3=0); keyscan_delay(10);/K3 松开按键时消抖)return count:) /*/读键盘函数/*/voidkcyscan()if(keyl=

23、O) if(v2=O)becr=O: keyscan_delay(10); if(keyl=O)/KI按按键时消抖( becr=l:TR1=1;开定时器L通过s标志位的变化,实现在上下限温度调整时温度显示时闪烁的功能 k4=l;在上下温度调节功能模式下选择K4的调整上下限温度正负的功能 v=l;在上下温度调节功能模式下选择K2、K3的温度加减功能 i+;/K1按一下i加1, i= 'O'进入正常模式,i= '1'进入调上限模式,i= '2'进入调下限模式 if(i>2)/K1按下三次后退出调节模式( i=0;进入正常模式TR1=O:关定时器

24、1k4=0;在正常模式下选择K4的消按键音功能v=0;在正常模式下选择K2、K3的查看上下限报警温度功能 store_t();存储调整后的上下限报警温度) switch(i)显示选择( case O:a=O;break:/a=0选择显示测得的温度case l:a=l;break:/a=l选择显示上限温度case 2:a=2;break:/a=2选择显示下限温度default:break;) while(keyl=O);/K1 松按键时消抖keyscan_delay(10);)if(a=l&&v=l)/a=l选择显示上限温度且v=l时选择上下限温度加功能led=O:max=ten

25、ip_change(maxJ_max): 显示上限温度else if(a=2&&v=l)/a=2选择显示下限温度且v=l时选择上下限温度减功能led= 1 ;min=temp_change(niiiLLmin);else;if(k4=l)/k4=l时K4按键选择正负温度设定功能(if(key4=0)(if(v2=0)beer=0;keyscan_dclay(5);if(key4=0) ( beer=l; if(a=l)if(max>55) f_max=O;else f_n】ax=f_max;)当温度大于 55 度时,只能设定 为正温度if(a=2)(if(min>5

26、5) f_max=O;else f_min=f_min;当温度大于 55 度时,只能设定为 正温度)while(key4=0);keyscan_dclay(10);)if(v=O)/v=0时选择上下限查看功能(if(key2=0)(if(v2=0)beer=0;keyscan_dclay(10);if(key2=0) ( beer=l;a=l;选择上限显示TR1=1:开定时器1开始定时一分钟左右sl=l;上限显示不闪烁,显示一分钟左右自动退出) while(key2=0);keyscan_delay(10);)if(v2=0)beer=0;keyscan_dclay(10);if(key3=0

27、)#endifbeer=l;a=2;TR1=1;sl=l;)while(key3=0);keyscan_dclay(10);)if(vl=l)a=O;vl=O;TRl=O;if(k4=0)选择下限显示开定时器1开始定时1S下限显示不闪烁,显示1S自动退出/vl = l时定时Is时间到自动关闭报警上下限查看功能a=0显示实测温度,vl清零,关定时器1/k4=0时K4按键选择消按键音的功能if(key4=0)(if(v2=0)beer=0;keyscan_delay(10); if(key4=0) (bcer=l;v2=v2;)whiIe(key4=0);keyscan_delay(10);为&#

28、39;O'时开按键音,为'1'时关按键音/*程序名;DS18B20头文件*说明:用到的全局变量是:无符号字符型变量temp(测得的温度整数局部),temp_d(测得的温度小数局部),标志位f (测量温度的标志位'0'表示“正温度"1表示“负温度”),标志位f_max (上限温度的标志位'0'表示"正温度"、'1'表示"负温度”),标志位f_min (下限温度的 标志位'0'表示"正温度"、'1'表示"负温度”),标志位w(

29、报警标志位 启动报警0'关闭报警)。*#*/#ifndef _dsl8b20_h_定义头文件并define _ds 18b20_h #dcfine uint unsigned intsbitDQ= P2 八 3;sbitbeer=PlA0;sbitled=PlAl;uchar temp=O;uchartemp_d=0;bitf=0;“负温度”) bitf_max=0;“负温度”)bitf_min=0;“负温度”) bitw=0;#dcfine uchar unsigned char/DS18B20 接口用beer表示P1.0用led表示Pl.l测量温度的整数局部测量温度的小数局部测量温

30、度的标志位'0'表示"正温度"'1'表示上限温度的标志位'0'表示"正温度"'1'表示下限温度的标志位'0'表示"正温度"'1'表示报警标志位 T启动报警,0'关闭报警;/*/延时子函数延时几us/*/ void ds 18b20_delayus(uint t) (while(t-);) void ds 18b20_delayms(uint t) 延时 1ms 左右uintij;for(i=t;i>0;i-) for(j=12

31、0;j>0;j-);/*/DS18B20初始化函数void dsl8b20Jnit()(uchar c=0;DQ=1;DQ=O;ds 18b20_delayus(80);DQ=1;while(DQ);ds 18b20_delayus( 150);DQ=1;/*/控制器向DS18B20发低电平脉冲延时 15-80 us控制器拉高总线,等待DS18B20拉低总线,在60-2404之间延时,等待上拉电阻拉高总线拉高数据线,准备数据传输;/*/DS18B20字行读函数/*/ uchar ds 18b20_read()(uchari;uchar d=0;DQ=1;准备读:for(i=8;i>

32、0;i-)d»=l;低位先发:DQ = 0;_nopj);_nopj);DQ=1;必须写1,否那么读出来的将是不预期的数据:if(DQ)在12us处读取数据:d 1= 0x80; ds 18b20_delayus(10); ) return d;返回读取的值/*/DS18B20字节写函数/*/ void ds 18b20_write(uchar d)(uchari;for(i=8;i>0;i-)(DQ=0;DQ=d&0x01:ds!8b20_delayus(5);DQ=1;d »= 1;)/*/获取温度函数/*/ voidget_temperaturc(bit

33、 flag) (uchar a=O.b=O,c=O.d=O:uinti;dsl8b2OJnitO;向DS18B20发跳过读ROM命令写启动DS18B20进行温度转换命令,转换结果存入内ds 18b20_write(0xcc);ds 18b20_write(0x44);部RAMif(flag=l)(首次启动DS18B2O进行温度转换需要500ms,假设转换时间不够就出错,读出的是85度的错误值。display 1(1);用开机动画耗时)elsedsl8b20_delayms(l);dsl8b20Jnit();ds 18b20_write(0xcc);ds 18b20_write(0xbe);读内

34、部RAM (LSB)读内部RAM (MSB)局部位变量f=l时读上下线报警温度a=dsl8b20_read();b=dsl8b20_read();if(flag=l)max=ds 18b20_read();min=ds 18b20_read();读内部RAM (TH)读内部RAM (Tl)if(max&0x80)=0x80) 明是负温度f_niax=l :max=(max-0x80);) 限温度装换成无符号数。if(min&0x80)=0x80)明是负温度f_min= 1 ;min=(min-0x80); 限温度装换成无符号数。假设读取的上限温度的最高位(符号位)为'1

35、'说将上限温度符号标志位置'1'表示负温度,将上假设读取的下限温度的最高位(符号位)为'1'说将下限温度符号标志位置'1'表示负温度,将下i=b;i»=4;if (i=0)f=0;temp=(a»4)l(b«4);a=(a&OxOf);temp_d=a;)else/八为0,正温度,设立正温度标记整数局部小数局部f=l; a=-a+l;b=b;temp=(a»4)l(b«4);a=(a&OxOf);temp_d=a;)/八为1,负温度,设立负温度标记整数局部小数局部/*/存储

36、极限温度函数/*/voidstoreJO(if(f_max=l)高位为1是负,为0是正)max=max+0x80;if(Lmin=l) min=min+0x80;假设上限温度为负,将上限温度转换成有符号数(最假设下限温度为负,将上限温度转换成有符号数dsl8b20Jnit();ds 18b20_write(0xcc);ds 18b20_write(0x4e); 命令ds 18b20_write(max);dsl8b20_write(min);ds 18b20_write(0xff);dsl8b2OJnitO;ds 18b20_write(0xcc);ds 18b20_write(0x48);E

37、EPROM向DS18B20发写字节至暂存器2和3 (TH和TL)向暂存器TH (上限温度暂存器)写温度向暂存器TL (下限温度暂存器)写温度向配置存放器写命令,进行温度值分辨率设置向DS18B20发将RAM中2、3字节的内容写入/DS18B20上电后会自动将EEPROM中的上下限温度拷贝到TH、TL暂存器/*/温度超限报警函数/*/ void alarmO假设上限值是正值if(f_max=0)(if(f_min=0)假设下限值是正值( if(f=O)假设测量值是正值( if(temp<=minlltemp>=max) w=l;TRl = l;)当测量值小于最小值或大于最大值时报警i

38、f(temp<niax)&&(ten】p>min)w=0;当测量值大于最小值且小于最大值时不报警) if(f=l)(w=l;TRl=l; 假设测量值是负值时报警 ) if(f_min=l)假设下限值是负值( if(f=O)假设测量值是正值( if(temp>=max)当测量值大于最大值时报警 w=l;TRl=l; if(temp<inax )当测量值小于最大值时不报警 w=0;假设测量值是负值if(temp>=min)当测量值大于最小值时报警w=l;TRl=l;if(temp<inin)/当测量值小于最小值时不报警 w=0;if(f_max=

39、l)(if(f_inin=l)(if(f=l)假设下限值是负值假设下限值是负值假设测量值是负值if(temp<=max)ll(temp>=min)w=l;TRl = l;)当测量值小于最大值或大于最小值时报警if(temp<min)&&(temp>max)w=0;当测量值小于最小值且大于最大值时不报警) if(f=O)(w=l:TRl = l; 假设测量值是正值时报警#cndif/*程序名;dsl8b20数码管动态显示头文件 功能:通过定时器0延时使数码管动态显示*/#ifndef _dsl8b20_display_H#define _ds18b20_d

40、isplay_H_#dcfine uint unsigned int#dcfine uchar unsigned char变量类型宏定义,用uint表示无符号整形(16位)变量类型宏定义,用uchar表示无符号字符型(8位)sbit weil=P2A4;sbit wei2=P2A5;sbit wei3=P2A6;sbit wei4=P2A7;可位寻址变量定义,用weil表示P2.4 口用 wei2 表示 P2.5 口用 wei3 表示 P2.6 口用 wei4 表示 P2.7 口ucharnum=0;定义num为全局无符号字符型变量,赋初值为0'uchar code temperatu

41、re 1= 0xc0.0xf9,0xa4,0xb0,0x99. 0x92,0x82,0xf8,0x80,0x90; 定义显示码表 0-9 uchar code temperature2J= 0x40,0x79,0x24,0x30,Ox 19,0x12,0x02,0x78.0x00.0x10); 带小数点的 0-9.uchar code temperatures= 0xff.0x7f,0xbf,0x89r0xc7); 依次是'不显示'H' 'L'/*/延时子函数/*/void display_delay(uint t) (uintij;for(i=t;i&

42、gt;0;i-)for(j=120;j>0;j-);延时1ms左右/*/定时器1初始化函数/*/void timerl Jnit(bit t)TMOD=0xl0;TH0=0x3c; TLO=OxbO: EA=1;ET1 = 1;TRl=t;局部变量t为1启动定时器1,为。关闭定时器/*/定时器1中断函数/*/void timer 1() interrupt 3 (TH0=0x3c:重新赋初值,定时50msTL0=0xb0: num+; 一次)每进入一次定时器中断num加1 (每50ms加1if(num<5)s= 1 ;if(w= 1) bcer= 1 ;led= 1; else b

43、cer= 1 ;led= 1;else进入4次中断,定时200ms时假设报警标志位w为1'那么启动报警,不为1'不启动实现间歇性报警功能s=0;if(w= 1) beer=0:led=0; else beer= 1 ;led= 1;if(num>20)进入20次中断,定时Isnum=0;sl=0;vl=l;)/num归0,重新定开始定时Is定时Is时间到时自动关闭报警上下限显示功能定时1S时间到时自动关闭报警上下限查看功能/*/调整报警上下限选择函数/*/void selscLl (ucharf,uchar k) (if(f=O)不显示百位,不为0那么显示消除百位的0显示

44、,及正负温度的显示选择假设为正温度,百位为0那么if(k/IOO=O) P0=temperature3 0;elsePO=temperature lk/100:)if(f=l)假设为负温度,假设十位为0,百位不显示,否那么百位显示(if(k% 100/10=0)P0=temperature30;elsePO=temperature32;)void selscL2(bit fuchar k)消除十位的0显示,及正负温度的显示选择(if(f=O)假设为正温度,百位十位均为0那么不显示十位,否那么显示十位(if(k/l 00=0)&&(k% 100/10=0)PO=te mpe ra

45、ture 3 0 ;elsePO=temperature lk%100/10;)if(f=l)假设为负温度,假设十位为0,十位不显示,否那么十位显示(if(k% 100/10=0)P0=temperature3 2;elsePO=temperature lk%100/10;)/*/主函数显示/*/void display(uchart jichart_d) (uchari;for(i=0;i<4;i+)(switch(i)(case 0:wei2=0;用于实测温度、上限温度的显示依次从左至右选通数码管显示,实现动态显示选通第一个数码管关第二个数码管wei3=0;关第三个数码管wei4=0

46、;关第四个数码管weil=l;开第一个数码管if(a=O)(selsct(f,t);) 假设a=0那么在第一个数码管上显示测量温度的百位或 ,if(a=l) (PO=tempcrature33; 假设a=l那么在第一个数码管上显示H') if(a=2) (P0=teniperature34; 假设a=2那么在第一个数码管上显示'L' ) break: case 1:选通第二个数码管weil=O; wei3=0; wei4=0; wei2=l;if(a=0)selsct_2(f.t);) 假设a=0那么在第二个数码管上显示测量温度的十位或if(a=l)假设a=l那么在第二个数码管上显示上限报警温度的百位或 (if(s=O) selsct(f_max.max);假设s=0

温馨提示

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

评论

0/150

提交评论