基于STC89C52、DS18B20的电子温度计电子设...
- 格式:doc
- 大小:2.67 MB
- 文档页数:19
正文1.设计内容和要求。
随着社会的进步和工业技术的发展,人们越来越重视温度因素,许多产品对温度范围要求严格,而目前市场上普遍存在的温度检测仪器大都是单点测量,同时有温度信息传递不及时、精度不够的缺点,不利于工业控制者根据温度变化及时做出决定。
在这样的形式下,开发一种能够同时测量多点,并且实时性高、精度高,能够综合处理多点温度信息的测量系统就很有必要。
本课题以STC89C52单片机系统为核心,能对多点的温度进行实时巡检。
DS18B20是一种可组网的高精度数字式温度传感器,由于其具有单总线的独特优点,可以使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠。
本文结合实际使用经验,介绍了DS18B20数字温度传感器在单片机下的硬件连接及软件编程,并通过LCD1602显示当前温度,实现实时温度测量。
2、系统总体结构系统的系统设计方框图如图1-1所示,它主要由三部分组成:①控制部分主芯片采用单片机STC89C52;②显示部分采用LCD1602以动态扫描方式实现温度显示;③温度采集部分的温度传感器采用DS18B20智能温度温度传感器。
DS18B20进行温度采集和转换输出数字型的温度值,然后通过数据引脚传到单片机的P3.7口,单片机通过P2口将数据扫描到LCD1602显示屏上。
图2-13、硬件设计3.1 控制模块本设计采用单片机基于数字温度传感器DS18B20的系统。
单片机STC89C52具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用。
温度传感器DS18B20利用单总线的特点可以方便的实现多点温度的测量,组建传感器网络,且系统的抗干扰性好、设计灵活、方便,而且能在恶劣的环境下进行现场温度检测。
3.2温度采集模块这一部分主要完成对温度信号的采集和转换工作,由DS18B20数字温度传感器及其与单片机的接口部分组成。
DS18B20智能温度温度传感器进行温度采集和转换输出数字型的温度值,然后通过数据引脚传到单片机的P3.7口,单片机接受温度并存储。
自动化专业电子课程设计报告题目: LED温度计设计(序号31 )姓名学号指导教师:评阅成绩等次:电气信息工程系2010-2011 第二学期目录1.、设计的任务与要求 (2)1.1系统设计的背景 (2)1.2理论基础 (2)2、总体设计和系统框图 (2)2.1温度采集模块 (3)2.2温度显示模块 (3)3、设计方案 (3)3.1硬件系统设计 (3)3.1.1供电电路设计 (3)3.1.2复位电路 (4)3.1.3晶振电路 (5)3.1.4温度采集模块设计 (5)3.1.5显示电路 (5)3.2软件系统设计 (6)3.2.1 DS18B20的读写时序 (6)3.2.2程序流程图 (7)4、系统仿真和调试 (9)5、设计结果分析 (9)6、设计总结和体会 (10)7、参考文献 (10)附录一:硬件原理图 (11)附录二:proteus仿真图 (12)附录三:程序清单 (12)摘要:本文介绍了采用51系列单片机和DS18B20温度传感器,实现数字温度测量,用数码管把温度实时显示出来,温度以一位符号位两位整数位和一位小数位的形式显示。
本系统主要包括供电模块、单片机最小系统模块、DS18B20温度采集模块和LED数码管显示模块。
关键词:51 DS18B20 LED1.、设计的任务与要求1.1系统设计的背景温度的测量广泛的应用在工农业生产和社会生活中,由于工农业的发展要求温度的测量的精度和实时性提出了更高的要求,传统的水银温度计和热电偶等,存在测量不方便、精度低、采集和传输较复杂等缺点。
本设计采用美国Dallas公司的DS18B20和stc89c52单片机构成温度测量系统,用LED数码管实时显示温度,具有更高的智能性和直观性。
1.2理论基础要较好的设计出温度计,需要我们深入的了解DS18B20温度传感器的构造、接线、信息沟通,要较好的掌握51系列单片机的使用以及硬件搭建,LED数码管的显示原理以及与单片机的连接。
基于DS18B20 89C52单片机的数字温度计设计)。
基于SCMIn日常生活和工业生产过程的数字温度计的设计,常用于温度的检测和控制,温度是生产过程和科学实验中的一般和重要的物理参数之一。
传统的热电偶和温度元件是第二个电阻。
热电偶和热电阻一般都是测量电压,然后用相应的温度来代替,这些方法比较复杂,需要相对大量的外部硬件支持。
我们用一种相对简单的方法来测量。
我们采用美国达拉斯半导体公司继DS1820改进后推出的智能温度传感器DS18B20作为检测元件,温度范围为-55℃至125℃,最高分辨率为0.0625摄氏度.DS18B 20可以直接读出北侧的温度,并与三线制单片机相连,减少了外部硬件电路,具有低成本和易用性。
摘要以下内容:介绍了一种基于AT89C52单片机的一种温度测量电路,该电路采用DS18B20高精度温度传感器,测量范围0℃至100℃,可设置报警限值,使用七段发光二极管即能显示当前温度。
本文重点提供了软硬件系统组成电路,介绍了DS18B20的原理、AT89C-的功能和应用省略部分-=0;对于(I=8;i0;DQ=0;//给脉冲信号dat=1;DQ=1;//给脉冲信号if(DQ)dat |=0x 80;tmpDelay(4);消息范文\\ f 6527 . }返回(dat);}void WriteOneChar(无符号字符dat)//写一个字节{无符号字符I=0;对于(I=8;i0;DQ=0;DQ=dat0x 01;tmpDelay(5);DQ=1;dat=1;}}无符号int Readttemp()//读取温度{无符号字符a=0。
无符号字符b=0;无符号int t=0;浮点TT=0;init _ DS18B 20();消息范文写OneChar(0xCC)。
//跳过读序号列号的操作写OneChar(0x 44);//启动温度转换init _ DS18B 20();写OneChar(0xCC);//跳过读序号列号的操作写OneChar(0xBe);//读取温度寄存器a=ReadNecHar();//连续读两个字节数据//读低8位b=ReadNecHar();//读高8位t=b .t37)字范文{ D1=0;D2=1;延迟(500);}如果(num 110){ D1=1;D2=0;延迟(500);}否则{ D1=1;D2=1;}史=num/100;ge=num/10;萧墅=numwrite _ com(0x 800x 40 5);write_date(杜文[施);write _ com(0x 800x 40 6);write_date(杜文[格);write _ com(0x 800x 40 7);write _ date(0x2e);write _ com(0x 800x 40 8);write_date(杜文[萧墅);}void main(){word 范文初始化_液晶();而(1){显示();延迟(10);} }单词范文。
基于STC89C52和DS18B20的温度显示报警系统【摘要】:随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的数字温度计,本温度计属于多功能温度计,可以设置上下报警温度,当温度低于或高于设置温度范围内时,可以报警。
本系统采用STC89C52单片机作为控制主芯片,DS18B20数字温度传感器作为温度采集器件,运用蜂鸣器作为报警器,LED灯作为闪烁指示灯,三位共阴数码数作为LED显示器件。
关键词:单片机STC89C52 温度传感器DS18B20 蜂鸣器显示器一、设计目的1、学习基本理论在实践综合运用的经验,掌握工程系统设计的基本方法、设计步骤,培养综合设计与调试能力。
2、学会以STC89C52为核心芯片的温度报警器的设计方法和性能指标测试方法。
3、培养实践技能,提高分析和解决实际问题的能力。
二、设计任务及要求1、设计并制作一个可用显示模块显示实时温度、报警温度,当环境温度超过或低于某个值时,实施报警。
主要技术指标要求:设计温度分辨率为0.1摄氏度2、设计电路结构,画出编程流程框图,选择电路元件,计算确定元件参数,画出实用原理电路图。
二. MCS-51单片机单片机SCM(Single Chip Microcomputer),即Microcontroller,是把微型计算机主要部分都集成在一个芯片上的单芯片微型计算机。
主要包括了微处理器(CPU)、存储器(ROM, RAM)、输入/输出口(I/O口)和定时器/计数器、中断系统等功能部件。
单片机自70年代出现以来,已经有了很大的发展,被广泛应用于机械、测量控制、工业自动化、智能接口和智能仪表等许多领域。
1.MCS-51单片机的引脚图:2. MCS-51单片机的内部结构图:(1)电源引脚Vcc和Vss:Vcc(40脚):电源端,+5伏Vss(20脚):接地端(2)时钟电路引脚XTAL1和XTAL2XTAL1(18脚)和XTAL2(19脚):接外部晶体和微调晶体。
正文1.设计内容和要求。
随着社会的进步和工业技术的发展,人们越来越重视温度因素,许多产品对温度范围要求严格,而目前市场上普遍存在的温度检测仪器大都是单点测量,同时有温度信息传递不及时、精度不够的缺点,不利于工业控制者根据温度变化及时做出决定。
在这样的形式下,开发一种能够同时测量多点,并且实时性高、精度高,能够综合处理多点温度信息的测量系统就很有必要。
本课题以STC89C52单片机系统为核心,能对多点的温度进行实时巡检。
DS18B20是一种可组网的高精度数字式温度传感器,由于其具有单总线的独特优点,可以使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠。
本文结合实际使用经验,介绍了DS18B20数字温度传感器在单片机下的硬件连接及软件编程,并通过LCD1602显示当前温度,实现实时温度测量。
2、系统总体结构系统的系统设计方框图如图1-1所示,它主要由三部分组成:①控制部分主芯片采用单片机STC89C52;②显示部分采用LCD1602以动态扫描方式实现温度显示;③温度采集部分的温度传感器采用DS18B20智能温度温度传感器。
DS18B20进行温度采集和转换输出数字型的温度值,然后通过数据引脚传到单片机的P3.7口,单片机通过P2口将数据扫描到LCD1602显示屏上。
图2-13、硬件设计3.1 控制模块本设计采用单片机基于数字温度传感器DS18B20的系统。
单片机STC89C52具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用。
温度传感器DS18B20利用单总线的特点可以方便的实现多点温度的测量,组建传感器网络,且系统的抗干扰性好、设计灵活、方便,而且能在恶劣的环境下进行现场温度检测。
3.2温度采集模块这一部分主要完成对温度信号的采集和转换工作,由DS18B20数字温度传感器及其与单片机的接口部分组成。
DS18B20智能温度温度传感器进行温度采集和转换输出数字型的温度值,然后通过数据引脚传到单片机的P3.7口,单片机接受温度并存储。
基于DS18B20+89C52单片机的数字温度计设计简介数字温度计是现代生活中常见的电子设备之一,其广泛应用于医疗、环境监测、生产制造等领域。
本文介绍基于DS18B20+89C52单片机的数字温度计设计。
DS18B20是一款高精度数字温度传感器,能够实现0.5℃的温度测量精度,同时具备防水、防腐等特性。
89C52是一款高性能单片机,具备高速计算、高稳定性等特点。
本文将分析DS18B20的原理及使用方法,并结合89C52单片机设计出一款数字温度计。
DS18B20工作原理DS18B20是一种数字温度传感器,内置了AD转换器、数字信号处理器等。
其工作原理为利用其内部的温度传感器测量物体的温度,将温度转换为增量数字量输出,输出端为单总线,同时具备多级地址识别能力,因此可进行多个传感器测温。
DS18B20使用方法1.按照DS18B20的引脚标识将其连接至单总线上;2.DS18B20提供了ROM查询指令,用于查询DS18B20的唯一地址;3.测温需要通过读取DS18B20的EEPROM寄存器得到,读取指令由主控制器发出,DS18B20在收到读取指令后进行温度转换,然后将转换后的温度值存储至EEPROM中;4.读取温度值需要使用读温度命令,该命令由主控制器发出,DS18B20回送温度值。
89C52单片机使用方法89C52是一款AT89C系列单片机,具备丰富的I/O端口、高速时钟、EEPROM等特点。
在使用89C52进行数字温度计设计时,需要进行以下操作: 1.通过端口设定进行DS18B20的唤醒和读温度操作; 2. 通过定时器进行延时操作,调整温度传感器的读取时间; 3. 将温度值加以整型处理并显示。
数字温度计设计数字温度计的设计需要综合考虑到DS18B20的特性以及89C52单片机的能力和特点。
下面是数字温度计的设计实现过程: 1. 连接DS18B20至89C52单片机的I/O口; 2. 设计读取DS18B20的温度值程序; 3. 设计处理温度值的程序,并将其显示至数码管上; 4. 加入延时程序,以保障温度读取的准确性和稳定性。
目录1.、设计的任务与要求 (2)1.1系统设计背景 (2)1.2理论基础 (2)2、总体设计和系统框图 (2)2.1温度采集模块 (3)2.2温度显示模块 (3)3、设计方案 (3)3.1硬件设计 (3)3.1.1供电电路设计 (4)3.1.4温度采集模块设计 (4)3.1.5显示电路 (5)3.2软件设计 (5)3.2.1 DS18B20的读写时序 (5)3.2.2程序流程图 (7)4、硬件原理图 (8)5、系统仿真和调试 (8)6、结果分析 (14)7、设计总结和体会 (14)8、参考文献 (15)摘要设计中采用51系列单片机和DS18B20温度传感器,实现数字温度测量,用数码管把温度实时显示出来,温度以两位整数位和一位小数位的形式显示。
本系统主要包括供电模块、单片机最小系统模块、DS18B20温度采集模块和LED数码管显示模块。
关键词:51单片机 DS18B20 LED1.、设计的任务与要求1.1系统设计背景温度测量是从金属(物质)的热胀冷缩开始,常用的检测方法有电阻式、热电偶式、PN结型、辐射型、光纤式及石英谐振型等。
这些检测方法都是基于温度变化引起其物理参数(如电阻值,热电势等)变化的原理。
随着大规模集成电路工艺的提高,出现了多种集成的数字化温度传感器。
传统的水银温度计和热电偶等,存在测量不方便、精度低、采集和传输较复杂等缺点,用LED数码管实时显示温度,具有更高的智能性和直观性。
1.2理论基础设计出符合要求的温度计,首先需要了解DS18B20温度传感器的构造、接线、信息沟通,要较好的掌握51系列单片机的使用以及硬件搭建,LED数码管的显示原理以及与单片机的连接。
2、总体设计和系统框图包括方案比较、方案论证、方案选择(以方框图的形式给出各方案,并简要说明)为了以数字的形式来显示采集的温度我们需要以一个单片机来处理数据,由于对单片机的性能要求不是很高,我们采用51系列单片机来处理数据,系统总体方框图如图1。
一、课题介绍本设计是一款简单实用的小型数字温度计,所采用的主要元件有传感器DS18B20,单片机STC89C52,,四位共阴极数码管一个,电容电阻若干。
传感器采用美国DALLAS半导体公司生产的智能温度传感器DS18B20,支持“一线总线”接口,测量温度范围-55°C~+125°C。
在-10~+85°C范围内,精度为±0.5°C。
最高分辩率可达0.0625。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。
根据设计要求,本次数字温度计的设计共分为五部分,主控制器,电源,LED 显示部分,传感器部分,复位部分,时钟电路。
主控制器即单片机部分,用于存储程序和控制电路;LED显示部分是指四位共阴极数码管,用来显示温度;传感器部分,即温度传感器,用来采集温度,进行温度转换;复位部分,即复位电路。
测量的总过程是,传感器采集到外部环境的温度,并进行转换后传到单片机,经过单片机处理判断后将温度传递到数码管显示。
本设计能完成的温度测量范围是-55°C~+128°C,精度为0.1°C,支持温度正负提示,软件预设上限温度50°C,下限温度0°C,并支持硬件手动配置温度上下限,超过此上下限即实现报警功能。
二、方案论证方案一:由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,温度感应电路比较麻烦。
方案设计框图如下:方案二:使用温度传感器,可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。
从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。
三、系统软硬件设计 1、硬件设计按照系统设计功能的要求,确定系统由3个模块组成:主控制器、测温电路和显示电路。
数字温度计总体电路结构框图所示:单片机的选择单片机STC89C52具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。
复位电路设计单片机系统的复位电路在这里采用的是上电+按钮复位电路形式,其中电阻R 采用1K Ω的电阻,电容采用电容值为10μ的电解电容。
电路原理图如下:温度上下限电路设计温度过限报警电路设计温度传感器DS18B20温度传感器是美国DALLAS半导体公司推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
电路图如下:温度显示电路四位共阴极数码管,能够显示小数和负温度。
负温时,第一个数码管显示负号,绿灯亮,其余数码管显示温度数值:正温时,红灯亮,数码管显示相应的温度值:当温度超过99.9°C时,四个数码管全部亮。
列扫描用P2.0~P2.3口来实现。
电路图如下:系统总电路图如下:2、软件设计主要包括主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和现实数据刷新子程序等。
主程序主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值。
温度测量每1S进行一次。
主流程图如下:读出温度子程序读出温度子程序的主要功能是读出RAM中的9字节。
在读出时须进行CRC校验,校验有错时不进行温度数据的改写。
流程图如下:温度转换命令子程序温度转换命令子程序主要是发温度转换开始命令。
当采用12位分辨率时,转换时间约为750ms。
在本程序设计中,采用1s显示程序延时法等待转换的完成。
流程图如下:计算温度子程序计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定。
显示数据刷新子程序显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高数据显示位为0时,将符号显示位移入下一位。
系统所运用的功能介绍:DS18B20与单片机之间采用串行通信的方式进行数据读写系统的调试及性能分析:硬件调试比较简单,首先采用PROTEUS软件绘制原理图,并进行了仿真,其次检查电路的焊接是否正确,然后可用万用表测试和通电检测。
软件调试可以先编写显示程序并进行硬件的正确性检验,然后分别进行主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和现实数据刷新子程序等的编程及调试由于DS18B20与单片机采用串行数据传送,因此,对DS18B20进行读/写编程时必须严格地保证读/写时序;否则将无法读取测量结果。
本程序采用单片机C51语言编写用Keil C51编译器编程调试。
软件调试到能显示温度值,并且在有温度变化时显示温度能改变,就基本完成。
性能测试可用制作的温度机和已有的成品温度计同时进行测量比较。
由于DS18B20的精度很高,所以误差指标可以限制在0.5℃以内。
另外,-55~+125℃的测温范围使得该温度计完全适合一般的应用场合,其低电压供电特性可做成用电池供电的手持温度计。
四、设计体会本次的设计使我们进一步巩固了书本上的知识,做到了学以致用。
这是我们第二次自己动手设计的电路,通过系统仿真软件protues和编译软件keil,使我们进一步了解了单片机的设计制作过程,其中最为困难的是软件部分,即编程部分,我们上网找了好多资料,虽然经过自己的修改,但还是有很多功能不能实现,如自动报出读数。
由于protues并不是很熟练,在使用的过程中有很多原件的名称不知道,从而花费了大量的时间在网上查找,今后应该在这方面多多努力。
最后一步的焊接硬件也遇到了不少麻烦,如数码管引脚的对应焊接。
总结经验的时候我们得出这样的结论,学习应该学以致用,有目的的去学习,如果学了不用等于没学。
其次,要学以致用,理论联系实际,这样才会取得事半功倍的效果。
附件一:程序#include<reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit DATA = P1^1; //DS18B20接入口uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极字型码int temp; //温度值int ss; //中间的一个变量int dd;int j;uchar data b;//定时器中断次数uchar data buf[4];//字型显示中间变量int alarmH=500; //默认报警值int alarmL=-10;//定义开关的接入口sbit k1=P2^5;//+sbit k2=P2^6;//-sbit k3=P2^7;//确认sbit k4=P2^4;sbit bell=P1^0;sbit HLight=P1^2;sbit LLight=P1^3;sbit warn=P1^4;sbit Red=P1^6;sbit Green=P1^7;bit set=0;bit Flag=0;int n;//函数的声明区void key_to1();void key_to2();void delay(uint);void key();void Show();//函数的定义区/*延时子函数*/void delay(uint num){while(num--) ;}//DS18b20温度传感器所需函数,分为初始化,读写字节,读取温度4个函数Init_DS18B20(void) //传感器初始化{uchar x=0;DATA = 1; //DQ复位delay(10); //稍做延时DATA = 0; //单片机将DQ拉低delay(80); //精确延时大于 480us //450DATA = 1; //拉高总线delay(20);x=DATA; //稍做延时后如果x=0则初始化成功 x=1则初始化失败delay(30);}ReadOneChar(void) //读一个字节{uchar i=0;uchar dat = 0;for (i=8;i>0;i--){DATA = 0; // 给脉冲信号dat>>=1;DATA = 1; // 给脉冲信号if(DATA)dat|=0x80;delay(8);}return(dat);}WriteOneChar(unsigned char dat) //写一个字节{uchar i=0;for (i=8; i>0; i--){DATA = 0;DATA = dat&0x01;delay(10);DATA = 1;dat>>=1;}delay(8);}int ReadTemperature(void) //读取温度{uchar a=0;uchar b=0;int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度a=ReadOneChar();//低位b=ReadOneChar();//高位t=b;t<<=8;t=t|a;tt=t*0.0625;t= tt*10+0.5;return(t);}void display00() //*********显示负值子函数{dd=-(temp-1);buf[1]=dd/100;buf[2]=dd/100;buf[3]=dd%100/10;buf[0]=dd%10;//动态显示for(j=0;j<5;j++){P2=0xff; // 初始灯为灭的P0=0x00;P2=0xfd; //显示小数点P0=0x80; //显示小数点delay(100);P2=0xff; // 初始灯为灭的P0=0x00;P2=0xf7; //片选LCD1P0=0x40;delay(100);P2=0xff;P0=0x00;P2=0xfb; //片选LCD2P0=table[buf[2]];delay(100);P2=0xff;P0=0x00;P2=0Xfd; //片选LCD3P0=table[buf[3]];delay(100);P2=0xff;P0=0x00;P2=0Xfe;P0=table[buf[0]]; //片选LCD4delay(100);P2=0xff;}}//显示正值子函数void display(){buf[1]=temp/1000;//显示百位buf[2]=temp/100%10;//显示十位buf[3]=temp%100/10;//显示个位buf[0]=temp%10; //第4位南北秒个位for(j=0;j<3;j++){P2=0xff; // 初始灯为灭的P0=0x00;P2=0xfd; //显示小数点P0=0x80; //显示小数点delay(300);P2=0xff; // 初始灯为灭的P0=0x00;P2=0xf7; //片选LCD1P0=table[buf[1]];delay(300);P2=0xff;P0=0x00;P2=0xfb; //片选LCD2P0=table[buf[2]];delay(300);P2=0xff;P0=0x00;P2=0Xfd; //片选LCD3P0=table[buf[3]];delay(300);P2=0xff;P0=0x00;P2=0Xfe;P0=table[buf[0]]; //片选LCD4delay(300);P2=0xff;}}void key() //按键扫描子程序{ if(k1!=1){delay(20);if(k1!=1){while(k1!=1){ key_to1();for(n=0;n<8;n++)Show();}}}if(k2!=1){delay(20);if(k2!=1){while(k2!=1){ key_to2();for(n=0;n<8;n++)Show();}}}if(k3!=1){ TR0=1; //复位,开定时 temp=ReadTemperature();}if(k4!=1){ delay(20);if(k4!=1){ while(k4!=1);set=!set;if(set==0){ Red=0;Green=1;}else { Green=0;Red=1;}}}}void key_to1(){TR0=0; //关定时器 temp+=10;if(temp>=1100){temp=-550;}if(set==0){alarmH=temp;}else {alarmL=temp;}}void key_to2(){TR0=0;//关定时器temp-=10;if(temp<=-550){temp=1100;}if(set==0){ alarmH=temp;}else { alarmL=temp;}}void alarm(void){if(temp>alarmH||temp<alarmL){ //bell=1;//delay(50);//bell=0;Flag=1;}else {Flag=0;}}logo()//开机的Logo{ P0=0x40;P2=0xf7;delay(50);P2=0xfb;delay(50);P2=0Xfd;delay(50);P2=0Xfe;delay(50);P1 = 0xff; //关闭显示}void Show(){ if(temp>=0){HLight=1;LLight=0;display();}//显示函数if(temp<0){HLight=0;LLight=1;display00();}}void main(){TCON=0x01;TMOD=0X01;TH0=0XD8;TL0=0XF0;EA=1;ET0=1;TR0=1;EX0=1;for(n=0;n<500;n++)//显示启动LOGo"- - - -"{bell=1;warn=1;logo();}Red=0;while(1){key();ss=ReadTemperature();Show();alarm();if(Flag==1){bell=!bell;warn=!warn;} //蜂鸣器滴滴响else {bell=1;warn=1;}}}void time0(void) interrupt 1 using 1 //每隔10ms执行一次此子程序 { TH0=0X56;TL0=0XDC;temp=ss;}附件二实物图。