资源描述
河南理工大学单片机课程设计
55
2020年4月19日
文档仅供参考,不当之处,请联系改正。
河南理工大学
《单片机应用与仿真训练》设计报告
多机温度检测系统设计
姓 名:
学 号:
专业班级: 电气09-6班
指导老师: 王莉
所在学院:电气工程与自动化学院
5月 20 日
目录
目录 I
摘要 II
1 概述 1
1.1 下位机温度采集发送系统 1
1.2上位机显示及报警系统 1
2 系统总体方案及硬件设计 3
2.1主要硬件简介 3
2.2各部分电路设计 5
3软件设计 9
3.1 功能需求分析 9
4实验仿真 11
5课程设计体会 12
参考文献 13
附录一 源程序 14
附录二 系统原理图 31
32
附录三 实物图片 32
摘要
本设计是采用AT89S52 8位单片机作为控制核心设计了温度测量系统,该系统由温度检测模块、微控制器模块、串口通信模块、数码管显示和报警模块等四部分组成,能对0℃~99℃范围的温度进行测量,同时利用4位八段数码管能够实时显示环境温度。该系统结构简单,成本低,具有较好的应用价值。
本系统首先由下位AT89S52单片机经过p2.3口不断循环采集数字化温度传感器DS18B20的温度数据,然后转换成十进制温度值,经过串行口发送至上位AT89S52单片机,由上位机经过串行口接收数据,再与报警温度进行比较,判断是否进行报警,上位机同时驱动四位八段数码管将温度显示出来。
实现本系统的主要难点在于温度的采集和传送。
DS18B20只需要接到单片机的一个I/O口上,由于单总线为开漏因此需要外接一个4.7K的上拉电阻。其功能强大,但需要不断地发送采集命令以及循环读取它传出的数值,然后进行换算成十进制温度。
单片机串口通信是单片机一个非常有用的功能,能够构建多机系统来实现更为强大的功能,而且经过MAX232能够进行远距离的通信,实现远程控制,可是对于单片机初学者来说不太容易掌握其发送接收的时序和数据格式,因此我们采用了简单的直接通信而未进行数据发送前的请求应答和数据发送完得数据检查校错。
当然,由于我们是首次设计这样完整的应用系统,可能实现的功能不太完善。
关键词:单片机;温度检测;串口通信
第一章 概述
1.1 下位机温度采集发送系统
下位机温度采集发送系统是本系统的主要核心之一,它的主要功能是采集DS18B20的温度数据,进行转换,并经过串口发送出去。该温度测量系统采用8051内核Atmel公司的AT89S52八位单片机。
温度采集发送系统由温度检测模块、下位控制器模块、发送放大模块三部分组成,如图1-1 温度测量系统的系统框图:
温度
采集
下位机控制模块
发送放大模块
图1-1 温度测量系统的系统框图
温度检测模块中温度传感器DS18B20采集温度数据,经过P2.3口传给下位单片机,微控制模块进行数据转换,得出十进制温度值,然后经过串行口经MAX232将数据发送出去。
1.2上位机显示及报警系统
上位机系统的主要功能是接收下位机发送过来的温度数据,与报警温度进行比较,判断是否发送报警信号,并同时直接驱动四位八段数码管进行显示。
上位机系统由串口接收模块、处理控制模块、数码管显示模块和报警模块四部分组成,如图1-2上位机系统框图:
数码管显示
串口接收
处理控制
报警控制模块
图1-2上位机系统框图
串行口接收数据后进行判断是否报警,并由P0口和P2.0~P2.3直接驱动数码管显示温度数据。报警控制模块经过按钮电路能够改变报警温度的上下限实现系统的灵活功能。
第二章 系统总体方案及硬件设计
2.1主要硬件简介
⑴单片机简介
所谓单片机,全称是单片微型计算机,又控制器。它是在一块半导体芯片上,集成了CPU,ROM,RAM,I/O口、定时器/计数器、中断系统、AD模数转换器等功能部件,构成了一台完整的数字电子机。当前单片机己成功地运用在智能仪表、机电设备、过程控制、数据处自动检测和家用电器等各个方面。单片机在控制领域中,有如下几个特点:
1)小巧灵活、成本低、易于产品化,能方便地组装成各种智能式控备及各种智能仪器仪表。
2)面向控制,能针对性地解决从简单到复杂的各类控制任务,因而得最佳的性能价格比。
3)抗干扰能力强,适应温度范围宽,在各种恶劣的环境下都能可靠作,这是其它机种无法比拟的。
4)能够很方便地实现多机和分布式控制,使整个控制系统的效率和性大为提高
AT89S52单片机是Atmel 公司推出的和工业80C51产品为完全兼容的8位机,其特有的布尔处理机,在逻辑处理与控制方面具有突出优点。特点如下:
* 与MCS-51单片机产品兼容
* 8K字节在系统可编程Flash存储器
* 1000次擦写周期
* 全静态操作:0Hz~33Hz
* 三级加密程序存储器 R
* 32个可编程I/O口线
* 三个16位定时器/计数器
* 八个中断源
* 全双工UART串行通道
* 8位微控制器
* 低功耗空闲和掉电模式
* 掉电后中断可唤醒
*8K 字节在系统可编程
* 看门狗定时器
* 双数据指针
* 掉电标识符图
2-1为AT89S52的引脚图:
图2-1 AT89S52引脚图
⑵DS18B20简介
数字化温度传感器是DALLAS最新单线数字温度传感器,支持“一线总线”接口,测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。DS1822的精度较差为± 2°C 。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。其适合于现场温度测量,能够程序设定9~12位的分辨率,精度为±0.5°C。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如下
图2-2DS18B20管脚图
DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。
暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节。
根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
DS18B20产品的特点
(1)只要求一个端口即可实现通信。
(2)在DS18B20中的每个器件上都有独一无二的序列号。
(3)实际应用中不需要外部任何元器件即可实现测温。
(4)测量温度范围在-55°C- +125°C之间。
(5)数字温度计的分辨率用户能够从9位到12位选择。
(6)内部有温度报警上、下限设置。
2.2各部分电路设计
⑴、单片机最小系统设计
最小应用系统设计是单片机应用系统的设计基础。它包括单片机的选择、时钟系统设计、复位电路设计、简单的I/O口扩展、掉电保护等。
本次设计采用的是AT89C52,其特点是8字节FLASH闪速存储器,256字节,32个I/O口线,3个16位定时/计数器,掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位.主演的是它与C51系列产品指令和引脚完全兼容.
最小系统的时钟电路采用12MHZ晶振,机器周期为1us,连接两个30pF的电容,连接到AT89S52的XATL1,XATL2上面,如3.2图所示。
复位电路采用的是上电+按钮电平复位,是利用电容充电来实现上电复位。当按钮按下后,电源施加在单片机复位端RST上, 实现单片机复位功能.。
最小系统设计如图2-3所示
图2-3 单片机最小系统设计图
⑵ DS18B20与AT89S52单片机接口电路的设计
DSl8B20数字温度计提供9位(二进制)温度读数,指示器件的温度信息经过单线接口送入DSl8B20或从DSl8B20送出,因此从主机CPU到DSl8B20仅需一条线,DS18B20与AT89C52单片机的接口电路如图2-4所示,其中DS18B20与单片机的接口为P2.3。
图2-4 DS18B20模块设计
⑶下位机与上位机串行通信电路设计
本系统采用的是下位机采集温度信息并换算,经过串行口发送至上位机,因此需用到单片机的串行口。单片机的串行口是一个可编程的全双工串行通信接口。它可用作异步通信方式,与串行传送信息的外部设备相连接,或用于经过标准异步通信协议进行全双工的AT89S52多机系统也能经过同步方式,使用TTL或CMOS移位寄存器来扩充I/O口。
AT89S52单片机经过管脚RXD(P3.0,串行数据接收端)和管脚TXD(P3.1,串行数据发送端)与外界通信。SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器。它们有相同名字和地址空间,但不会出现冲突,因为它们两个一个只能被CPU读出数据,一个只能被CPU写入数据。
本系统串行通信具体设计如图2-5, 图中标号I RXD 和I TXD分别代表下位机得RXD口和TXD口。
图2-5串行通信设计
串行口的控制与状态寄存器简介
① 串行口控制寄存器SCON
它用于定义串行口的工作方式及实施接收和发送控制。字节地址为98H,其各位定义如下表:
D7
D6
D5
D4
D3
D2
D1
D0
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
SM0、SM1:串行口工作方式选择位,其定义如下:
SM0、SM1
工作方式
功能描述
波特率
0 0
方式0
8位移位寄存器
Fosc/12
0 1
方式1
10位UART
可变
1 0
方式2
11位UART
Fosc/64或fosc/32
1 1
方式3
11位UART
可变
其中fosc为晶体震荡器频率SM2:多机通信控制位。在方式0时,SM2一定要等于0。在方式1中,当(SM2)=1则只有接收到有效停止位时,RI才置1。在方式2或方式3当(SM2)=1且接收到的第九位数据RB8=0时,RI才置1。
REN:接收允许控制位。由软件置位以允许接收,又由软件清0来禁止接收。
TB8: 是要发送数据的第9位。在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。例如,可约定作为奇偶校验位,或在多机通信中作为区别地址帧或数据帧的标志位。
RB8:接收到的数据的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8为接收到的停止位。在方式2或方式3中,RB8为接收到的第9位数据。
TI:发送中断标志。在方式0中,第8位发送结束时,由硬件置位。在其它方式的发送停止位前,由硬件置位。TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的办法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。TI必须用软件清0。
RI:接收中断标志位。在方式0,当接收完第8位数据后,由硬件置位。在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于SM2的说明)。RI置位表示一帧数据接收完毕,可用查询的办法获知或者用中断的办法获知。RI也必须用软件清0。
②特殊功能寄存器PCON
PCON是为了在CHMOS的AT89S52单片机上实现电源控制而附加的。其中最高位是SMOD。它是一个特殊功能寄存器,没有位寻址功能,字节地址为87H。
PCON电源管理寄存器结构
D7
D6
D5
D4
D3
D2
D1
D0
SMOD
-
-
-
GF1
GF0
PD
IDL
其中D7位(SMOD)为波特率选择位。
⑷ LED显示电路设计
上位机接收到温度数据后需要直接驱动四位八段数码管将温度值显示出来,本系统采用的是共阴四位八段数码管,其具体设计如图2-6。
图 2-6 数码管显示电路设计
⑸ 键盘电路设计
本系统只需用键盘实现简单的改变报警上下限,因此只需要简单的四个按钮即可,键盘电路具体设计如图2-7。
图2-7键盘电路设计
第三章 软件设计
3.1 功能需求分析
本系统需要具体实现的功能可划分为以下几个部分:
温度数据采集
温度数据换算
温度数据传送与接收
温度显示
报警上下限调整
温度数据与报警上下限比较及报警
系统又分为上位机和下位机两部分,易知前三个要求属于下位机的功能范畴,要求三至要求六属于上位机的功能范畴。
根据下位机的功能范畴,可设计出其工作流程图如下:
开始
串口初始化并发送温度
DS18B20初始化
系统初始化
采集DS18B20温度并换算
图3-1下位机工作流程图
由流程图可知,可将下位机的程序划分为若干个实现单一功能的子程序,如DS18B20初始化程序、温度采集程序、温度换算程序、串口初始化程序和串口发送程序等。
根据上位机的功能范畴,可将上位机得工作流程设计如下:
开始
系统初始化
串口初始化
串口中断
开中断
显示温度值
关中断
接收数据
扫描键盘
改变报警上下限
图3-2 上位机工作流程图
第四章 仿真实验
第五章 总结体会
经过这次单片机课程设计,我们不但加深了对单片机理论的理解,将很多课本理论很好地应用到实际当中,而且我们还学会了如何去培养我们的学习精神和团队协作能力,从而不断地战胜自己,超越自己。经过这次完成这次的设计,我们发现了我们在课堂上学习的知识是十分宝贵且有用的,也发现了我们在课堂学习过程中的不足和大意,有很多东西都在课堂上被我们忽略来了,为了完成本次的设计,我们不断地翻阅书籍、请教同学,重新学习了课堂上的知识,虽然还没能做到融会贯通、厚积薄发,但毕竟窥一管而知全豹,走进了单片机应用的辽阔世界,了解到了单片机系统的强大功能,开阔了视野,提高了设计能力,使更多的知识成为了自己的东西,相信这些在我们今后的学习和工作生涯中将会是一笔宝贵的财富。
在这次设计中,串口通信是我们的一大难点,不断的仿真和不断的错误和失败告诉我们基础知识的不踏实,正如老师所言“基础不牢,地动山摇”,于是我们重新认真的看课本重新的学习,终于实现了串口发送和接受功能。
本次设计我们使用的是C51语言,虽然c语言结构明确,可读性强,但由于单片机的硬件资源有限,在数据定义和特殊寄存器的选用及修改上比较固定,对于新手来说有些理解和实现,因此C语言编程时很多地方程序结构固定,而我们又没有系统深入的学习过C51语言,因此在这次设计中我们部分的借鉴了别人的程序,虽然这一部分不是我们写的,可是我们认真读懂了它而且学到了很多东西,包括编程思想和设计技巧,这些都提高了我们的学习能力和模仿能力。
总之,经过这次的课程设计,使我们认识到了不足,看清了学习的方向,找到了学习的动力,提高了动手能力和学习能力,收获很大。
参考文献
[1]贾振国. DS1820 及高精度温度测量的实现[J].电子技术应用, (1):58 - 59.
[2]郭爱芳主编.传感器原理及应用.西安电子科技大学出版社. .5
[3]姜志海,赵艳雷,单片机的C语言程序设计与应用 北京;电子工业出版社
[4]张齐 朱西宁,单片机应用系统设计技术 北京 电子工业出版社
[5]余发山 王福忠,单片机原理及应用技术 徐州 中国矿业大学出版社
附录一 源程序
//上位机程序
/*-----------------------------------------------
名称:DS18b20多级测温上位机程序
内容:接收下位机温度数据 数码管显示
能够显示负温度 超过设定温度报警
------------------------------------------------*/
#include <reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include "delay.h"
#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
/*-----------------------------------------
按键位定义
-----------------------------------------*/
sbit KEY_ADD=P1^3; //定义按键输入端口
sbit KEY_DEC=P1^2;
sbit KEY_MAX=P1^1;
sbit KEY_MIN=P1^0;
unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
unsigned char code WeiMa[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//分别对应相应的数码管点亮,即位码
unsigned char NegTemp; //负温度标志
unsigned char Tempflag; //温度显示标志
unsigned int TempH,TempL; //温度数据
unsigned int TempMax=60,TempMin=10; //温度上下限
unsigned char TempData[4]; //存储显示值的全局变量
unsigned char RecieveData[3]; //存储串口数据的全局变量
static unsigned int p;//下位机数据的位变量
void csh(void);//串口初始化程序
void Init_Timer0(void);//定时器初始化程序
unsigned int Limit_Adjust(unsigned int Temp); //键盘温度上下限调整程序
void Display(unsigned char NegTemp,unsigned int TempH,TempL); //数码管显示程序
/*------------------------------------------------
串口通讯初始化
------------------------------------------------*/
void csh()
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
PCON=0;
TH1=0xF3;
TL1=0XF3;
TMOD=0X20; // TMOD: timer 1, mode 2, 8-bit 重装
EA=1;
ET1=0;
ES=1;
TR1=1;
}
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
Init_Timer0();//定时器初始化
csh(); // 串口通讯初始化
while(1) //主循环
{
/*------------------------------------------------
串口接收数据
------------------------------------------------*/
ES=0;
TI=0;
SBUF=p;
while(!TI);
TI=0;
ES=1;
DelayUs2x(100);
p++;
if(p>3)
p=0;
NegTemp=RecieveData[0];
TempH=RecieveData[1];
TempL=RecieveData[2];
/*----------------------------------------------
扫描键盘,调整温度上下限
长按按KEY_ADD键或KEY_DEC键可连续调整
------------------------------------------------*/
while(!KEY_MAX) //检测到最大值调整键按下
{
Display(0,TempMax,0);//显示温度上限
TempMax=Limit_Adjust(TempMax); //调整温度上限
}
while(!KEY_MIN) //检测到最小值调整键按下
{
Display(0,TempMin,0); //显示温度下限
TempMin=Limit_Adjust(TempMin); //调整温度下限
}
Display(NegTemp,TempH,TempL); //调用数码管显示
} //主循环结束
}
/*-----------------------------------------------------
串口中断
-------------------------------------------------------*/
void intrr() interrupt 4
{
RecieveData[p]=SBUF;
RI=0;
}
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号能够在使用多个定时器时不受影响
//TH0=0x00; //给定初值
//TL0=0x00;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1
{
TH0=(65536- )/256; //重新赋值 2ms
TL0=(65536- )%256;
}
/*-------------------------------------------------
数码管显示程序
---------------------------------------------------*/
void Display(unsigned char NegTemp,unsigned int TempH,TempL)
{
unsigned int i,j;
/*------------------------------------------------
温度显示标志处理,超温报警
------------------------------------------------*/
if(TempH>TempMax)
Tempflag=0x76; //显示"H"
else if(TempH<TempMin)
Tempflag=0x38; //显示"L"
else
Tempflag=0x39; //显示C符号
/*------------------------------------------------
温度数据处理
------------------------------------------------*/
NegTemp=0;//本实例对负温度暂不作处理,如果进行测温范围扩展至负温度,应屏蔽本句
if(!NegTemp==0) //负温度(18B20所测负温度整数位只有两位)
{
TempData[0]=NegTemp;
if((TempH%100)/10==0)//消隐
TempData[1]=0;
else
TempData[1]=DuanMa[(TempH%100)/10]; //十位温度
TempData[2]=DuanMa[(TempH%100)%10]|0x80; //个位温度,带小数点
TempData[3]=DuanMa[TempL];
}
else if(TempH/100==0) //正温度整数位只有两位(
{
TempData[0]=DuanMa[(TempH%100)/10]; //十位温度
TempData[1]=DuanMa[(TempH%100)%10]|0x80; //个位温度,带小数点
TempData[2]=DuanMa[TempL];
TempData[3]=Tempflag;
}
else //温度整数位为三位
{
TempData[0]=DuanMa[TempH/100]; //百位温度
TempData[1]=DuanMa[(TempH%100)/10]; //十位温度
TempData[2]=DuanMa[(TempH%100)%10]|0x80; //个位温度,带小数点
TempData[3]=DuanMa[TempL];
}
/*------------------------------------------------
温度数据显示
------------------------------------------------*/
for(j=0;j<100;j++)
{
for(i=0;i<4;i++)
{
//DataPort=0; //清空数据,防止有交替重影
P2=WeiMa[i]; //取位码
DataPort=TempData[i]; //取显示数据,段码
DelayUs2x(200); //扫描间隙延时,时间太长会闪烁,太短会造成重影
}
}
}
/*-------------------------------------------
键盘温度上下限调整程序,含参数unsigned int Temp,
返回值为本参数调整后的值
长按按KEY_ADD键或KEY_DEC键可连续调整Temp数值
---------------------------------------------*/
unsigned int Limit_Adjust(unsigned int Temp) //键盘温度上下限调整程序
{
unsigned char key_press_num=0;
if(!KEY_ADD) //如果检测到低电平,说明按键按下
{
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY_ADD) //再次确认按键是否按下,没有按下则退出
{
while(!KEY_ADD)
{
key_press_num++;
DelayMs(10); //10x200= ms=2s
if(key_press_num==200) //大约2s
{
key_press_num=0; //如果达到长按键标准
//则进入长按键动作
while(!KEY_ADD) //这里用于识别是否按键还在按下
//如果按下执行相关动作,否则退出
{
if((Temp<99)&&(TempMin<TempMax)) //加操作
Temp++;
Display(0,Temp,0);
DelayMs(50);//用于调节长按循环操作的速度,能够自行调整此值以便达到最佳效果
}
}
}
key_press_num=0;//防止累加造成错误识别
if((Temp<99)&&(TempMin<TempMax)) //加操作
Temp++;
Display(0,Temp,0);
}
}
if(!KEY_DEC) //如果检测到低电平,说明按键按下
{
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY_DEC) //再次确认按键是否按下,没有
//按下则退出
{
while(!KEY_DEC)
{
key_press_num++;
DelayMs(10);
if(key_press_num==200) //大约2s
{
key_press_num=0;
while(!KEY_DEC)
{
if((Temp>0)&&(TempMax>TempMin)) //减操作
Temp--;
Display(0,Temp,0);
DelayMs(50); //用于调节长按循环操作的速度
}
}
}
key_press_num=0;//防止累加造成错误识别
if((Temp>0)&&(TempMax>TempMin)) //减操作
Temp--;
Display(0,Temp,0);
}
}
return Temp;
}
//延时
#include "delay.h"
/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
//显示
#include "display.h"
/*----------------------------------------------
数码管显示函数,含有输入参数unsigned char NegTemp,unsigned int TempH,TempL
无符号字符变量NegTemp为负温度标志,无符号整型变量TempH、TempL分别为温度数据整数位和小数位
用于完成温度显示标志处理,温度数据处理和温度数据显示
----------------------------------------------*/
void Display(unsigned char NegTemp,unsigned int TempH,TempL) //数码管显示程序
{
unsigned int i,j;
/*------------------------------------------------
温度显示标志处理
------------------------------------------------*/
if(TempH>TEMPMAX)//如果超温则提示
Tempflag=0x76; //显示"H"
else if(TemL<TEMPMIN)
Tempflag=0x38; //显示"L"
else
展开阅读全文