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

下载本文档

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

文档简介

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

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

3、HNOLOGY,CHONGQINGUNIVERSITY岸片机原理及其应用课程设计成绩:重庆大学城市科技学院电气学院基于AT89C51单片机的数显温度传感器设计报告一、设计目的作用本设计是一款简单实用的小型数字温度计,所采用的主要元件有传感器DS18B2Q单片机AT89C52四位共阴极数码管一个,电容电阻若干。DS18B20支持“一线总线”接口,测量温度范围-55°C+125°C。在-10+850C范围内,精度为±0.5°C。18B20的精度较差,为土2°C。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场

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

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

6、T89C51单片机的数显温度传感器设计”,涉及到MCS-51系列的单片机,我们首先有设计一个能使单片机工作的最小系统,然后温度传感器将实时温度值送给单片机,通过对单片机进行软件编程实现数据处理,然后送给LED共阴数码管显示,在对单片机编程时要考虑到要使得能通过按键开关设置上限报警温度及下限报警温度,通过蜂鸣器报警,在报警的同时LED灯同步闪烁。设计任务书中已给出了元件清单,但是我们需要在软件中对自己设计的电路进行仿真我们还需要画出单片机的最小系统电路。总体电路结构框图所示:共阳数码管显示模块DS18BB2Q温度传感器模块<>按键控制模块2、系统设计(详细介绍各单元电路的选择、设计及

7、工作原理分析,并介绍有关参数的计算及元器件参数的选择等,要求有原理图。)(1)、硬件设计硬件电路设计通过单片机仿真软件Proteus8.0进行原理图的编辑,根据实验要求及所给出的元件设计出如下电路原理图,并进行了仿真时钟及复位模块实验所给的元件中直接已给出了AT89C51的最小系统板,但是我们在设计电路时还是你需要画出该部分电路,时钟复位为能使单片机工作的最简单的电路,又称最小系统。具体实验电路如下:时钟电路有12MHz勺晶振及两个2030PF的瓷片电容(无极性)连接在单片机的XTAL1及XTAL2连个端口;复位电路由10K的电阻,10UF电解电容(有极性)以及按键开关组成,接在单片机的RST

8、口。当系统出现故障错误,我想让系统恢复初始化状态可以通过对按动按键开关实现对电容的充放电从而实现系统的复位。蜂鸣器报警及LED显示模块蜂鸣器用于当温度传感器的输入的温度数值大于认为设定的上限温度或者小于下限温度时,系统会给出相应的信号使得蜂鸣器发出声音同时让LED灯闪烁蜂鸣器由一个PNP®的三极管驱动接在单片机的P1.0口,当P1.0口输出低电平是蜂鸣器发出声音;LED灯正极通过1K的电阻上拉接Vcc,负极接在单片机的P1.1口,当系统在P1.1口输出低电平时LED灯亮。共阳数码管显示显示模块实验给出的数码管为2位一体共阳的数码管,在实验显示中我们需要四个数码管去显示相应的温度,所以

9、采用两个2位一体共阳数码管并联当做一个4位一体的共阳数码管。电路原理图如下:SSGS2*F.BTIJ,prR吧明eiM盟院数码管的使用设计到了段选及位选,我们把段选接在单片机的P0口,位选接在数码管的P2.4P2.7口,需要注意的是此数码管为共阳的,所以P0口输出的低电平完全可以驱动数码管的段选显示,但是位选输出高电平不足以驱动数码管显示导致数码管的亮度不够,此时我们需要在数码管的位选段接上相应的1K的上拉电阻,这样数码管的亮度就可以明显的得到提升。DS18BB2耻度传感器模块DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比

10、,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。g八DS18E3O有三只子脚.VCC.DQ-和VDD电路图如下:接在单片机的P2.3口,DS18B20勺DQ®需要接一个4.7K左右的上拉电阻。按键控制模块按键是用来设置报警的上下限温。K1是用来进入上下限调节模式的,当按一下K1进入上限调节模式,再按一下进入下限调节模式。在正常模式下,按一下K2进入查看上限温度模式,显示1s左右自动退出;按一下K3进入查看下限温度模式,显示1s左右自动退出;按一下K4消除按键音,再按一下是实现减(2)、软件设计通过单片机编程软件Keil4进行编程,程序部分通过一个

11、主函数和自定义的三个#include"ds18b20.h"#include"keyscan.h"#include"display.h"头文件,分别完成温度的采集转化、通过键盘设定上下限报警温度以及模式的切换、通过定时器0延时使数码管动态显示温度系统的主流程图:3、系统实现(详细介绍实物连接图及运行程序时的每种结果,要求有图为证,并对每张图片进行简单的说明)根据系统的设计框图,查找相关资料,在Proteus8.0中画出原理图,在KEIL4软件中编写好程序,然后将这两个软件结合,将写好的程序在Proteus8.0中烧录进单片机,然后开启仿

12、真开关,即可显示设计效果,通过修改硬件电路的同时结合程序,实现实验要求。然后开始焊接硬件电路,在多孔板上焊出相应的电路,用杜邦线将各个模块与单片机最小系统板连接在一起得到最终电路,用烧录软件将程序烧录进单片机,最终以实际电路的形式展现出成果。系统的调试及性能分析:硬件调试,首先检查电感的焊接是否正确,然后可用万用表测试或通电检测。软件调试可以先编写显示程序并进行硬件的正确性检验,然后分别进行主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和现实数据刷新子程序等的编程及调试四、总结(对整个设计工作过程进行归纳和综合,对设计中所存在的问题和不足进行分析和总结,提出解决的方法、措施、建议和

13、对这次设计实践的认识、收获和提高。)通过本次课程设计使我收获很多,从一开始对单片机仿真软件的使用到后来渐渐的熟悉,深深感觉到了我们在设计电路的时候为了验证我们方案的可行性,我们必须借助一些仿真软件,来模拟我们设计的电路,这样既可以节省本也使得我们焊接实物时有了很好的依据,要学会以这种方法为基础再来焊接电路。通过系统仿真软件Proteu列编译软件Keil,使我们进一步了解了单片机的设计制作过程,其中最为困难的是软件部分,即编程部分,我们上网找了好多资料,虽然经过自己的修改,但还是有很多功能不能实现,如温度上下限设置。由于Proteus并不是很熟练,在使用的过程中有很多原件的名称不知道,从而花费了

14、大量的时间查阅资料。在应用仿真的过程中,还出现了仿真软件出现问题,不管怎样修改程序,结果在仿真软件上还是出现错误,后来发现是我们使用的软件是盗版的所以他可能在仿真过程中出现错误,最终决定先将硬件焊接出来将程序写进去看看结果,再对软件进行相应的调整,最后焊接出来将程序写进单片机经过简单的调整实现了实验要求。最后一步的焊接硬件也遇到了不少麻烦。综上所述我们得出这样的结论,应该借助软件仿真证明我们方案的可行性,设计时实际电路和我们理论上的数值是有所差别的,我们也要学会将理论知识与实际结合起来,这样我们才能在实际中提高自我能力,我们才能真正理解并在实际中运用我们的知识。五、附录附录一:元件清单元件名称

15、型号数量单片机最小开发板STC89C521温度传感器DS18B201三极管88501蜂鸣器1LED红1电阻10k、3k、2k、1k、510、330各5各2位一体数码管共阳2AC/DC(5V/1A)电源1单排插针402双排插针4029X15cm万用板(3连孔)1杜邦线15附录二:实物焊接图附录三:程序/*程序名;基于51单片机的温度计*功能:实时测量温度,超过上下限报警,报警温度可手动调整。K1是用来进入上下限调节*II式的,当按一下K1进入上限调节模式,再按一下进入下限调节模式。在正常模式下,按一下K2进入查看上限温度模式,显示1s左右自动退出;按一下K3进入查看下限温度模式,显示1s左右自动

16、退出;按一下K4消除按键音,再按一下启动按键音。在调节上下限温度模式下,K2是实现加1功能,K1是实现减1功能,K3是用来设定上下限温度正负的。*#include<reg52.h>将intrins.h头文件包含到主程序(调用其中的_nop_()#include<intrins.h>空操作函数延时)#defineuintunsignedint#defineucharunsignedcharucharmax=0x00,min=0x00;/max是上限报警温度,min是下限报警温度bits=0;/s是调整上下限温度时温度闪烁的标志位,s=0不显示200ms,s=1显示1s左右

17、bits1=0;/s1标志位用于上下限查看时的显示voiddisplay1(uintz);/声明display1()函数(display.h头文件中的函数,ds18b20.h要用应先声明)#include"ds18b20.h”#include"keyscan.h"#include"display.h"/*/*主函数voidmain()beer=1;led=1;timer1_init(0);get_temperature(1);/*/关闭蜂鸣器/关闭LED灯初始化定时器1(未启动定时器1)首次启动DS18B20获取温度(DS18B20上电后自动将

18、EEPROM中的上下限温度复制到TH和TL寄存器)while(1)keyscan();get_temperature(0);display(temp,temp_d*0.625);alarm();,*程序名;ds18b20keyscan函数*功能:通过键盘设定设定上下限报警温度*/#ifndef_keyscan_H_/定义头文件#define_keyscan_H_sbitkey1=P2A2;sbitkey2=P2A1;sbitkey3=P2A0;sbitkey4=P3A3;uchari=0;/定义全局变量i用于不同功能模式的选择,0'正常模式,1'上限调节模式,'2

19、9;下限调节模式uchara=0;定义全局变量a用于不同模式下数码管显示的选择bitk4=0;/K4按键双功能选择位,k4=0时K4按键选择消按键音的功能,k4=1时K4按键选择正负温度设定功能bitv=0;/K2、K3按键双功能选择位,v=0时选择上下限查看功能,v=1时选择上下限温度加减功能bitv1=0;/v1=1时定时1250ms时间到自动关闭报警上下限查看功能bitv2=0;消按键音功能调整位,为0'时开按键音,为'1'时关按键音/*/*/读键盘延时子函数/*/voidkeyscan_delay(uintz)(uinti,j;for(i=z;i>0;i-

20、)for(j=120;j>0;j-);)/施日11ms左右/*/*温度调节函数/*/inttemp_change(intcount,bitf)上下限温度调整(if(key2=0)(/判断K2是否按下if(v2=0)beer=0;keyscan_delay(10);if(key2=0)beer=1;if(f=0)count+;/v2=0开按键音,否则消按键音/施日110ms再次判断K2是否按下(实现按按键时消抖)/K2按下关按键音若温度为正每按一下K2温度上调1if(a=1)if(count>125)count=125;当温度值大于125时不上调if(a=2)if(count>

21、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;/K2松开按键时消抖while(key2=0);keyscan_delay(10);if(key3=0)if(v2=0)beer=0;keyscan_delay(10);if(key3=0)/K3按按键时消抖beer=1;count-;每按一下K3温度为正时下调1,为负时上调1if(a=1)if(count<0)count=0;当温度值达到0时不再

22、调if(a=2)if(count<0)count=0;while(key3=0);keyscan_delay(10);/K3松开按键时消抖returncount;/*/*读键盘函数,*voidkeyscan()(if(key1=0)(if(v2=0)beer=0;keyscan_delay(10);if(key1=0)/K1按按键时消抖(beer=1;TR1=1;开定时器1,通过s标志位的变化,实现在上下限温度调整时温度显示时闪烁的功能k4=1;在上下温度调节功能模式下选择K4的调整上下限温度正负的功能v=1;/在上下温度调节功能模式下选择K2、K3的温度加减功能i+;/K1按一下i加1

23、,i='0'进入正常模式,i='1'进入调上限模式,i='2'进入调下限模式if(i>2)/K1按下三次后退出调节模式(i=0;/进入正常模式TR1=0;关定时器1k4=0;在正常模式下选择K4的消按键音功能v=0;/在正常模式下选择K2、K3的查看上下限报警温度功能store_t();存储调整后的上下限报警温度switch(i)显示选择(case0:a=0;break;/a=0选择显示测得的温度case1:a=1;break;/a=1选择显示上限温度case2:a=2;break;/a=2选择显示下限温度default:break;whi

24、le(key1=0);/K1松按键时消抖keyscan_delay(10);if(a=1&&v=1)/a=1选择显示上限温度且v=1时选择上下限温度加功能led=0;max=temp_change(max,f_max);/显示上限温度elseif(a=2&&v=1)/a=2选择显示下限温度且v=1时选择上下限温度减功能led=1;min=temp_change(min,f_min);else;if(k4=1)/k4=1时K4按键选择正负温度设定功能if(key4=0)if(v2=0)beer=0;keyscan_delay(5);if(key4=0)beer=1

25、;if(a=1)if(max>55)f_max=0;elsef_max=f_max;/当温度大于55度时,只能设定为正温度if(a=2)if(min>55)f_max=0;elsef_min=f_min;/当温度大于55度时,只能设定为正温度while(key4=0);keyscan_delay(10);if(v=0)/v=0时选择上下限查看功能if(key2=0)if(v2=0)beer=0;keyscan_delay(10);if(key2=0)beer=1;a=1;/选择上限显示TR1=1;开定时器1开始定时一分钟左右s1=1;/上限显示不闪烁,显示一分钟左右自动退出whil

26、e(key2=0);keyscan_delay(10);if(key3=0)if(v2=0)beer=0;keyscan_delay(10);if(key3=0)beer=1;a=2;/选择下限显示TR1=1;开定时器1开始定时1ss1=1;/T限显示不闪烁,显示1s自动退出while(key3=0);if(v1=1)a=0;v1=0;TR1=0;if(k4=0)keyscan_delay(10);/v1=1时定时1s时间到自动关闭报警上下限查看功能/a=0显示实测温度,v1清零,关定时器1/k4=0时K4按键选择消按键音的功能if(key4=0)if(v2=0)beer=0;keyscan_

27、delay(10);if(key4=0)beer=1;v2=v2;为0'时开按键音,为1'时关按键音while(key4=0);keyscan_delay(10);#endif,*程序名;DS18B20头文件*说明:用到的全局变量是:无符号字符型变量temp(测得的温度整数部分),temp_d(测得的温度小数部分),标志位f(测量温度的标志位'0'表示“正温度”1'表示“负温度”),标志位f_max(上限温度的标志位'0'表示"正温度"、1'表示“负温度”),标志位f_min(下限温度的标志位0'表示“

28、正温度"、1'表示“负温度”),标志位w(报警标志位'1'启动报警0'关闭报警)。*/#ifndef_ds18b20_h_定义头文件#define_ds18b20_h_#defineuintunsignedint#defineucharunsignedcharsbitDQ=P2A3;sbitbeer=P1A0;sbitled=P1A1;uchartemp=0;uchartemp_d=0;bitf=0;“负温度”)bitf_max=0;“负温度”)bitf_min=0;“负温度”)bitw=0;/DS18B20接口用beer表示P1.0用led表示P1.

29、1测量温度的整数部分测量温度的小数部分测量温度的标志位'0'表示“正温度”1'表示上限温度的标志位'0'表示“正温度”1'表示下限温度的标志位'0'表示“正温度”1'表示报警标志位1'启动报警,0'关闭报警;/*/*/延时子函数/*/voidds18b20_delayus(uintt)(while(t-);)延时几svoidds18b20_delayms(uintt)延时1ms左右(uinti,j;for(i=t;i>0;i-)for(j=120;j>0;j-);)/*/*DS18B20初始化函

30、数/*/voidds18b20_init()(ucharc=0;控制器向DS18B20发低电平脉冲/施日15-80s控制器拉高总线,等待DS18B20拉低总线,在60-240科s之间/施时,等待上拉电阻拉高总线拉高数据线,准备数据传输;DQ=1;DQ=0;ds18b20_delayus(80);DQ=1;while(DQ);ds18b20_delayus(150);DQ=1;/*/*DS18B20字节读函数/*/uchards18b20_read()(uchari;uchard=0;DQ=1;准备读;for(i=8;i>0;i-)(d>>=1;/低位先发;DQ=0;_nop_

31、();_nop_();DQ=1;必须写1,否则读出来的将是不预期的数据;if(DQ)/在12us处读取数据;d|=0x80;ds18b20_delayus(10);returnd;返回读取的值/*/*DS18B20字节写函数/*/voidds18b20_write(uchard)(uchari;for(i=8;i>0;i-)(DQ=0;DQ=d&0x01;ds18b20_delayus(5);DQ=1;d>>=1;/*/*获取温度函数/*/voidget_temperature(bitflag)(uchara=0,b=0,c=0,d=0;uinti;ds18b20_i

32、nit();ds18b20_write(0xcc);ds18b20_write(0x44);部RAM向DS18B20发跳过读ROM命令/写启动DS18B20进行温度转换命令,转换结果存入内if(flag=1)首次启动DS18B20进行温度转换需要500ms,若转换时间不够就出错,读出的是85度的错误值。display1(1);elseds18b20_delayms(1);ds18b20_init();ds18b20_write(0xcc);ds18b20_write(0xbe);a=ds18b20_read();b=ds18b20_read();if(flag=1)用开机动画耗时/读内部RAM

33、(LSB)/读内部RAM(MSB)局部位变量f=1时读上下线报警温度max=ds18b20_read();min=ds18b20_read();读内部RAM(TH)读内部RAM(Tl)若读取的上限温度的最高位(符号位)为1'表明将上限温度符号标志位置1'表示负温度,将上若读取的下限温度的最高位(符号位)为1'表明将下限温度符号标志位置1'表示负温度,将下if(max&0x80)=0x80)是负温度f_max=1;max=(max-0x80);限温度装换成无符号数。if(min&0x80)=0x80)是负温度f_min=1;min=(min-0x8

34、0);限温度装换成无符号数。i=b;i>>=4;if(i=0)f=0;temp=(a>>4)|(b<<4);a=(a&0x0f);temp_d=a;elsef=1;a=a+1;b=b;temp=(a>>4)|(b<<4);a=(a&0x0f);temp_d=a;/i/i为0,正温度,设立正温度标记整数部分小数部分为1,负温度,设立负温度标记整数部分小数部分/*/*存储极限温度函数/*/voidstore_t()if(f_max=1)若上限温度为负,将上限温度转换成有符号数(最高位为1是负,为0是正)max=max+0x

35、80;if(f_min=1)若下限温度为负,将上限温度转换成有符号数min=min+0x80;ds18b20_init();ds18b20_write(0xcc);ds18b20_write(0x4e);命令ds18b20_write(max);ds18b20_write(min);ds18b20_write(0xff);ds18b20_init();ds18b20_write(0xcc);ds18b20_write(0x48);向DS18B20发写字节至暂存器2和3(TH和TL)向暂存器TH(上限温度暂存器)写温度向暂存器TL(下限温度暂存器)写温度向配置寄存器写命令,进行温度值分辨率设置向

36、DS18B20发将RAM中2、3字节的内容写入/DS18B20上电后会自动将EEPROM中的上下限温度拷贝到TH、TL暂存器EEPROM/*/温度超限报警函数/*/*/voidalarm()若上限值是正值if(f_max=0)if(f_min=0)若下限值是正值if(f=0)若测量值是正值if(temp<=min|temp>=max)w=1;TR1=1;当测量值小于最小值或大于最大值时报警if(temp<max)&&(temp>min)w=0;当测量值大于最小值且小于最大值时不报警if(f=1)w=1;TR1=1;若测量值是负值时报警if(f_min=1

37、)若下限值是负值if(f=0)若测量值是正值if(temp>=max)/当测量值大于最大值时报警w=1;TR1=1;if(temp<max)/当测量值小于最大值时不报警w=0;if(f=1)若测量值是负值(if(temp>=min)/当测量值大于最小值时报警w=1;TR1=1;if(temp<min)/当测量值小于最小值时不报警w=0;if(f_max=1)/若下限值是负值if(f_min=1)若下限值是负值if(f=1)若测量值是负值if(temp<=max)|(temp>=min)w=1;TR1=1;当测量值小于最大值或大于最小值时报警if(temp&l

38、t;min)&&(temp>max)w=0;当测量值小于最小值且大于最大值时不报警if(f=0)w=1;TR1=1;若测量值是正值时报警#endif,*程序名;ds18b20数码管动态显示头文件*功能:通过定时器0延时使数码管动态显示*/#ifndef_ds18b20_display_H_#define_ds18b20_display_H_#defineuintunsignedint#defineucharunsignedchar变量类型宏定义,用uint表示无符号整形(16位)变量类型宏定义,用uchar表示无符号字符型(8位)sbitwei1=P2A4;sbitwei

39、2=P2A5;sbitwei3=P2A6;sbitwei4=P2A7;/可位寻址变量定义,用wei1表示P2.4口用wei2表示P2.5口用wei3表示P2.6口用wei4表示P2.7口ucharnum=0;/定义num为全局无符号字符型变量,赋初值为0'ucharcodetemperature1=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;定义显示码表09ucharcodetemperature2=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10;带/、数点的09.ucharco

40、detemperature3=0xff,0x7f,0xbf,0x89,0xc7;/依次是不显示'.''-''H''L'/*/*延时子函数/*/voiddisplay_delay(uintt)uinti,j;for(i=t;i>0;i-)for(j=120;j>0;j-);/延时1ms左右/*/*定时器1初始化函数/*/voidtimer1_init(bitt)TMOD=0x10;TH0=0x3c;TL0=0xb0;EA=1;/局部变量t为1启动定时器1,为0关闭定时器ET1=1;TR1=t;1)/*/*定时器1中断函数

41、/*/voidtimer1()interrupt3(TH0=0x3c;重新赋初值,定时50msTL0=0xb0;num+;每进入一次定时器中断num力口1(每50ms加1一次)if(num<5)s=1;if(w=1)beer=1;led=1;elsebeer=1;led=1;else/进入4次中断,定时200ms时若报警标志位w为'1'则启动报警,不为1'不启动实现间歇性报警功能s=0;if(w=1)beer=0;led=0;elsebeer=1;led=1;if(num>20)/进入20次中断,定时1snum=0;/num归0,重新定开始定时1ss1=0;

42、/定时1s时间到时自动关闭报警上下限显示功能v1=1;/定时1s时间到时自动关闭报警上下限查看功能/*/*调整报警上下限选择函数/*/消除百位的0显示,及正负温度的显示选择若为正温度,百位为0则不显voidselsct_1(ucharf,uchark)if(f=0)示百位,不为0则显示if(k/100=0)P0=temperature30;elseP0=temperature1k/100;)if(f=1)若为负温度,若十位为0,百位不显示,否则百位显示-'(if(k%100/10=0)P0=temperature30;elseP0=temperature32;)voidselsct_2

43、(bitf,uchark)消除十位的0显示,及正负温度的显示选择(if(f=0)若为正温度,百位十位均为0则不显示十位,否则显示十位(if(k/100=0)&&(k%100/10=0)P0=temperature30;elseP0=temperature1k%100/10;)if(f=1)若为负温度,若十位为0,十位不显示,否则十位显示-'(if(k%100/10=0)P0=temperature32;elseP0=temperature1k%100/10;)/*/*主函数显示/*/voiddisplay(uchart,uchart_d)(uchari;for(i=0;

44、i<4;i+)(switch(i)(case0:用于实测温度、上限温度的显示依次从左至右选通数码管显示,实现动态显示wei2=0;/选通第一个数码管关第二个数码管wei3=0;关第三个数码管wei4=0;关第四个数码管wei1=1;开第一个数码管if(a=0)selsct_1(f,t);/若a=0则在第一个数码管上显示测量温度的百位或-'if(a=1)P0=temperature33;若a=1则在第一个数码管上显示H'if(a=2)P0=temperature34;若a=2则在第一个数码管上显示L'break;case1:/选通第二个数码管wei1=0;wei3=0;wei4=0;wei2=1;if(a=0)selsct_2(f,t);/若a=0则在第二个数码管上显示测量温度的十位或-'if(a=1)/若a=1则在第二个数码管上显示上限报警温度的百位或-'if(s=0)selsct_1(f_max,max);/若s=0则显

温馨提示

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

最新文档

评论

0/150

提交评论