基于单片机数字温度计设计毕业设计(论文).doc
本科生毕业设计(论文)题 目: 基于单片机的数字温度计的设计 学生姓名: 系 别: 机械与电气工程系 专业年级: 指导教师: 2013年 6 月 20 日摘要本文主要介绍了一个基于AT89C51单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路进行了介绍,该系统可以方便的实现温度采集和显示,并可以根据需要,任意设定上下限报警温度,它适合我们日常生活和工农业生产中的温度测量,也可以当做温度处理模块嵌入其他系统中,作为其他主系统的辅助扩展。DS18B20和AT89C51结合实现最简温度检测系统。本温度计属于多功能温度计,可以设置上下限报警温度,当温度不在设置范围内时,可以报警。关键词:单片机;数字控制;温度计; DS18B20;AT89C51ABSTRACTThis paper introduces a temperature measurement system based on AT89C51 microcontroller, a detailed description of the process of using digital temperature sensor DS18B20 temperature measurement system development, focusing on the sensor under the SCM hardware connection, software programming and system flow of each module were analyzed in detail on the part of the circuit, the system can realize temperature acquisition convenient and display, and can according to need, set the alarm temperature, it is suitable for our daily life and industrial and agricultural production in the temperature measurement, it can also be used as a temperature processing module embedded in other systems, as other auxiliary system. DS18B20 and AT89C51 combine to achieve the most simple temperature detection system. The multi-purpose thermometer, you can set the alarm temperature, when the temperature is not in the set range,it can alarm.Keywords: single chip microcomputer; digital control; thermometer; DS18B20; AT89C51目录前 言6第一章 硬件设计71.1 AT89C51芯片功能简介71.1.1 AT89C51芯片简介71.1.2 引脚功能71.2 数字温度传感器模块81.2.1 DS18B20性能81.2.2 DS18B20引脚说明91.2.3 DS18B20测温原理91.2.4 DS18B20的工作时序101.3测温电路设计111.4 按键模块设计121.5 报警电路设计121.6 显示电路设计131.7 串口电路设计13第二章 系统软件设计142.1 各模块的程序设计142.1.1主程序流程图142.1.2 读出温度子程序142.1.3 温度转换命令子程序152.1.4 计算温度子程序162.1.5 显示数据刷新子程序172.1.6 报警子程序172.1.7 按键扫描处理子程序182.2 Keil C51编程软件182.2.1 Keil C51简介182.2.2 Keil C51软件应用18第三章 系统的仿真与总结203.1 Protues仿真203.1.1 Protues简介203.1.2 proteus 的工作过程203.1.3 Protues测温仿真213.1.4 性能分析233.2 总结233.2.1硬件方面233.2.2软件方面23致谢26附录27附录A 程序清单27附录B 系统总设计图37前 言随着新技术的不断开发与应用,近年来单片机发展十分迅速,一个以微机应用为主的新技术革命浪潮正在蓬勃兴起,单片机的应用已经渗透到电力、冶金、化工、建材、机械、食品、石油等各个行业。传统的温度采集方法不仅费时费力,而且精度差,单片机的出现使得温度的采集和数据处理问题能够得到很好的解决。温度是工业对象中的一个重要的被控参数。然而所采用的测温元件和测量方法也不相同;产品的工艺不同,控制温度的精度也不相同。因此对数据采集的精度和采用的控制方法也不相同。传统的控制方式以不能满足高精度,高速度的控制要求,如温度控制表温度接触器,其主要缺点是温度波动范围大。由于他主要通过控制接触器的通断时间比例来达到改变加热功率的目的,受仪表本身误差和交流接触器的寿命限制,通断频率很低。近几年来快速发展了多种先进的温度控制方式,如:PID控制,模糊控制,神经网络及遗传算法控制等。这些控制技术大大的提高了控制精度,不但使控制变得简便,而且使产品的质量更好,降低了产品的成本,提高了生产效率。本设计使用单片机作为核心进行控制。单片机具有集成度高,通用性好,功能强,特别是体积小,重量轻,耗能低,可靠性高,抗干扰能力强和使用方便等独特优点,在数字、智能化方面有广泛的用途。本课题的研究方法是利用单片机和数字温度传感器DS18B20设计一台数字温度计。单片机作为主控制器,数字温度传感器DS18B20作为测温元件,传感器DS18B20可以读取被测量温度值,进行转换,从而用4位共阴极LED数码管来显示转换后的温度值。本课题的主要研究内容如下:1. 温度测试基本范围0100。2. 精度为0.5。3. LED数码管显示。4. 可以设定温度的上下限报警功能。5. 实现报警提示。第一章 硬件设计1.1 AT89C51芯片功能简介1.1.1 AT89C51芯片简介AT89C51是一种带4K字节闪烁可编程可檫除只读存储器(FPEROM-Flash Programable and Erasable Read Only Memory )的低电、高性能CMOS 8位微处理器。1.1.2 引脚功能AT89C51芯片的引脚图如图1-1所示:图1-1 AT89C51引脚图AT89C51的引脚功能如下:1、主电源引脚(2根)VCC:电源输入,接5V电源GND:接地线2、外接晶振引脚(2根)XTAL1:片内振荡电路的输入端XTAL2:片内振荡电路的输出端3、控制引脚(4根)RST/VPP:复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。ALE/PROG:地址锁存允许信号PSEN:外部存储器读选通信号EA/VPP:程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。4、可编程输入/输出引脚(32根)AT89C51单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。PO口:8位双向I/O口线,名称为P0.0P0.7P1口:8位准双向I/O口线,名称为P1.0P1.7 P2口:8位准双向I/O口线,名称为P2.0P2.7 P3口:8位准双向I/O口线,名称为P3.0P3.71.2 数字温度传感器模块1.2.1 DS18B20性能1、独特的单线接口仅需一个端口引脚进行通信2、简单的多点分布应用3、无需外部器件4、可通过数据线供电5、零待机功耗6、测温范围-55+125,以0.5递增7、可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.06258、温度数字量转换时间200ms,12位分辨率时最多在750ms内把温度转换为数字9、应用包括温度控制、工业系统、消费品、温度计和任何热感测系统10、负压特性:电源极性接反时,传感器不会因发热而烧毁,但不能正常工作1.2.2 DS18B20引脚说明DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚有三个,DQ 为数据输入/输出引脚,当被用在寄生电源下,也可以向器件提供电源;GND为地信号;VDD为可选择的电源引脚,当工作于寄生电源时,此引脚必须接地;当VDD端口接电源时是使用外部电源。1.2.3 DS18B20测温原理DS18B20的测温原理如图1-2所示,图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55 所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器 1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。预置斜率累加器比较低温度系数振荡器计数器1温度寄存器Tx预置=0高温度系数振荡器=00计数器2T1加1停止T2图1-2 DS18B20测温原理图1.2.4 DS18B20的工作时序DS18B20的工作协议流程是:初始化ROM操作指令存储器操作指令数据传输。其工作时序包括初始化时序、写时序和读时序,如图1-3 (a)(b)(c)所示。主机控制DS18B20完成任何操作之前必须先初始化,即主机发一复位脉冲(最短为480us的低电平),接着主机释放总线进入接收状态,DS18B20在检测到I/O引脚上的上升沿之后,等待15-60us然后发出存在脉冲(60-240us的低电平)。 写时间片:将数据从高电平拉至低电平,产生写起始信号。在15us之内将所需写的位送到数据线上,在15us到60us之间对数据线进行采样,如果采样为高电平,就写1,如果为低电平,就写0。在开始另一个写周期前必须有1us以上的高电平恢复期。 DS18B20等待 DS18B20Tx产生 15us16us 脉冲60-240 主机复位脉冲 VCC 480us<TX<960us 主机Rx min480us 1-Wire Bus GND图1-3 (a)初始化时序 主机写“0”时隙 主机写“1”时隙 VCC 60us<TX<120us 1us<txcc<1-Wire Bus GND DS18B20采样 >1us DS18B20采样 15us MIN TYP MAX MIN TYP MAX 15us 30us 15us 15us 30us图1-3(b)写时序VCC 主机读“0”时隙 主机读“1”时隙1-Wire Bus GND 主机采样 1us15us 15us 30us 主机采样 15us图1-3(c)读时序读时间片:主机将数据线从高电平拉至低电平1us以上,再使数据线升为高电平,从而产生读起始信号。主机在读时间片下降沿之后15us内完成读位。每个读周期最短的持续期为60us,各个读周期之间也必须有1us以上的高电平恢复期。1.3测温电路设计数字温度传感器DS18B20的测温电路如图1-4所示:图1-4 测温电路1.4 按键模块设计利用单片机的IO口实现按键的中断输入。另外需要一个与门实现与中断端口的连接。按键电路如图1-5所示,期中按键K1为进入/退出设置键;K2为增加键;K3为减少键。图1-5按键模块1.5 报警电路设计三极管驱动蜂鸣器:报警电路如图1-6所示,三极管Q5来驱动喇叭LS1。图1-6 报警电路1.6 显示电路设计采用四位共阴极LED数码管来显示温度,可以直接读取,温度精确到0.1。四位数码管的显示电路如图1-7所示,从左到右依次是百位,十位,个位,十分位。图1-7 显示电路1.7 串口电路设计单片机与上位机(PC机)的接口电路如图1-8所示:图1-8 接口电路第二章 系统软件设计2.1 各模块的程序设计系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序和按键扫描处理子程序等。2.1.1主程序流程图主程序的主要功能是负责温度的实时显示、读出并处理DS18B20 测量的当前温度值,温度测量每1s 进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图2-1 所示。初始化调用显示子程序1S到?初次上电读出温度值温度计算处理显示数据刷新发温度转换开始命令NYNY图2-1 主程序流程图2.1.2 读出温度子程序读出温度子程序的主要功能是读出RAM 中的9 字节,在读出时需进行CRC 校验,校验有错时不进行温度数据的改写。其程序流程图如图2-2所示:Y发DS18B20复位命令发跳过ROM命令发读取温度命令读取操作,CRC校验9字节完?CRC校验正?确?移入温度暂存器结束NNY图2-2 读出温度子程序流程图2.1.3 温度转换命令子程序温度转换命令子程序主要是发温度转换开始命令,当采用12 位分辨率时转换时间约为750ms,在本程序设计中采用1s 显示程序延时法等待转换的完成。温度转换命令子程序流程图如图2-3 所示: 发DS18B20复位命令发跳过ROM命令发温度转换开始命令结束图2-3 温度转换命令子程序流程图2.1.4 计算温度子程序 开始温度零下?温度值取补码置“”标志计算小数位温度BCD值 计算整数位温度BCD值 结束置“+”标志NY计算温度子程序流程图如图2-4 所示。图2-4 计算温度子程序流程图2.1.5 显示数据刷新子程序显示数据刷新子程序主要是对分离后的温度显示数据进行刷新操作,当标志位位为1时将符号显示位移入第一位。程序流程图如图3-5所示。温度数据移入显示寄存器十位数0?百位数0?十位数显示符号百位数不显示百位数显示数据(不显示符号) 结束NNYY图2-5 显示数据刷新子程序流程图2.1.6 报警子程序设置报警标志位beep,报警流程图如图2-6所示:读取测量温度值温度值>120或<20?Beep=0Beep=1,报警 Y 图2-6 报警流程图2.1.7 按键扫描处理子程序按键采用扫描查询方式,设置标志位,当标志位为1 时,显示设置温度,否则显示当前温度。如图2-7所示K1键按下K3键按下?K2键按下? N N 显示标志位为0?报警温度减1报警温度加1Y Y N 调用显示子程序 Y图2-7 按键扫描子程序流程图2.2 Keil C51编程软件2.2.1 Keil C51简介Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。Keil C51软件是一个基于32位Windows环境的应用程序,支持C语言和汇编语言编程,其6.0以上的版本将编译和仿真软件统一为Vision(通常称为V2)。Keil提供包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,由以下几部分组成:Vision IDE集成开发环境C51编译器、A51汇编器、LIB51库管理器、BL51连接/定位器、OH51目标文件生成器以及 实时操作系统。2.2.2 Keil C51软件应用应用Keil进行软件仿真开发的主要步骤为:编写源程序并保存建立工程并添加源文件设置工程编译/汇编、连接程序调试。Keil使用“工程”(Project)的概念,对工程(而不能对单一的源程序)进行编译/汇编、连接等操作。工程的建立、设置、编译/汇编及连接产生目标文件的方法非常易于掌握。首先选择菜单FileNew,在源程序编辑器中输入汇编语言或C语言源程序(或选择FileOpen,直接打开已用其它编辑器编辑好的源程序文档)并保存,注意保存时必须在文件名后加上扩展名.asm(.a51)或.c;然后选择菜单ProjectNew Project,建立新工程并保存(保存时无需加扩展名,也可加上扩展名.uv2);工程保存后会立即弹出一个设备选择对话框,选择CPU后点确定返回主界面。这时工程管理窗口的文件页(Files)会出现“Target1”,将其前面+号展开,接着选择Source Group1,右击鼠标弹出快捷菜单,选择“Add File to Group Source Group1”,出现一个对话框,要求寻找并加入源文件(在加入一个源文件后,该对话框不会消失,而是等待继续加入其它文件)。加入文件后点close返回主界面,展开“Source Group1”前面+号,就会看到所加入的文件,双击文件名,即可打开该源程序文件。紧接着对工程进行设置,选择工程管理窗口的Target1,再选择ProjectOption for TargetTarget1(或点右键弹出快捷菜单再选择该选项),打开工程属性设置对话框,共有8个选项卡,主要设置包括在Target选项卡中设置晶振频率、在Debug选项卡中设置实验仿真板等,如要写片,还必须在Output选项卡中选中“Creat Hex Fi”;其它选项卡内容一般可取默认值。工程设置后按F7键(或点击编译工具栏上相应图标)进行编译/汇编、连接以及产生目标文件。成功编译/汇编、连接后,选择菜单Debug-Start/Stop Debug Session(或按Ctrl+F5键)进入程序调试状态,Keil提供对程序的模拟调试功能,内建一个功能强大的仿真CPU以模拟执行程序。Keil能以单步执行(按F11或选择Debug-Step)、过程单步执行(按F10或选择Debug-Step Over)、全速执行等多种运行方式进行程序调试。如果发现程序有错,可采用在线汇编功能对程序进行在线修改(Debug-Inline Assambly),不必执行先退出调试环境、修改源程序、对工程重新进行编译/汇编和连接、然后再次进入调试状态的步骤。对于一些必须满足一定条件(如按键被按下等)才能被执行的、难以用单步执行方式进行调试的程序行,可采用断点设置的方法处理。第三章 系统的仿真与总结3.1 Protues仿真3.1.1 Protues简介Proteus软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。 该软件的特点是:1. 实现了单片机仿真和SPICE电路仿真相结合,具有模拟电路仿真、数字电路仿真、各种单片机(51系列、AVR、PIG等常用的MCU)及其外围电路(如LCD、RAM、ROM、键盘、LED、A/D、D/A等)组成的系统仿真。2. 提供了多种虚拟仪器。如示波器、逻辑分析仪、信号发生器等,调试非常方便。3. 提供软件调试功能,同时支持第三方的软件编译和调试环境,如Keil等软件。4. 具有强大的原理图绘制功能。Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。对于这样的仿真实验从某种意义上讲,是弥补了实验和工程应用有脱节的矛盾和现象。同时,当硬件调试成功后,利用Proteus ARES软件,很容易获得其PCB图,为今后的制造提供了方便。3.1.2 proteus 的工作过程 运行proteus 的ISIS 程序后,进入该仿真软件的主界面。在工作前,要设 置view 菜单下的捕捉对齐和system 下的颜色、图形界面大小等项目。通过工 具栏中的p 命令,在pick devices 窗口中选择电路所需的元件,放置元件并调 整其相对位置,元件参数设置,元器件间连线,编写程序;在source 菜单的 Define code generation tools 菜单命令下,选择程序编译的工具、路径、扩展名等项目;在source 菜单的Add/removesource files 命令下,加入单片机硬件电路的对应程序;通过debug 菜单的相应命令仿真程序和电路的运行情况。 Proteus 软件提供了30 多个元件库,数千种元件。元件涉及数字和模拟、交流和直流等。3.1.3 Protues测温仿真通过仿真软件验证该原理图的可行性。采用protues软件对电路仿真,可以得到预期效果。仿真图如图3-1所示。温度传感器的仿真效果图如图3-2所示,此图验证了传感器的温度与数码管显示的数字一致。图3-1 Protues仿真图图3-2 DS18B20仿真图当按下K1 键一次时,进入温度报警上线调节,此时显示软件设置的温度报警上线,按K2或K3分别对报警温度进行加一或减一。当再次按下K1 键时,进入温度报警下线调节,此时显示软件设置的温度报警下线,按K2或K3分别对报警温度进行加一或减一。当第三次按下K1 键时,退出温度报警线设置。显示当前温度。如图3-3是第一次按下K1键显示的上限温度报警值,此时按K2或K3键分别对上限温度报警值进行加一或减一;图3-4是第二次按下K1键显示的下限温度报警值,此时按K2或K3键分别对下限温度报警值进行加一或减一。图3-3上限温度报警值图3-4 下限温度报警值3.1.4 性能分析性能测试可用制作的温度计和已有的成品温度计同时进行测量比较。由于DS18B20的精度很高,所以误差指标可以限制在±0.1以内。另外,0100的测量范围使得该温度计完全适合一般的应用场合,其低压供电特性可以做成电池供电的手持电子温度计。 3.2 总结本次设计主要是通过AT89C51单片机为核心设计的一款数字温度计,该温度计不仅能够实时测量温度值并显示出来,还能够设定温度上下限进行监控,若温度高于设定上限值或低于下限值,则报警电路将进行报警。此次课程设计中,难点在于DS18B20的使用,即对它的时序控制、初始化以及字节读写方法,任何一个环节出错或是时序控制不到位的话就不能得到正确的数据。一旦学会了正确的使用方法,就能感觉到它带来的便利是热电偶不能比拟的,以后再次使用的话就能很快上手了。3.2.1硬件方面本设计采用的是AT89C51单片机为核心的数字温度计,包含了利用温度传感器DS18B20的测温电路、外接键盘、显示电路、继报警电路、复位电路和晶振电路。以DS18B20为主要测温元件进行实时监控温度值。以4位数码管为显示器件,利用单片机的P0口和上拉电阻来驱动4位数码管的显示;利用单片机的P1.7来驱动温度传感器DS18B20测温;报警电路利用三极管放大作用驱动报警器报警;按键是利用单片机的P1口和上拉电阻来驱动工作的。3.2.2软件方面本次设计利用Protues软件对系统进行仿真,利用Keil C51 软件对系统进行编程。C语言设计了温度的读、写程序,并利用程序实时对显示电路进行更新操作。本次设计编写了外接键盘的动作程序,能够感应外接键盘的动作情况对系统做出一系列相应的调整和动作。系统包含了通过外接键盘设定一个基准值的程序,能够比较基准值并通过比较之后的结果对外围电路产生相应的控制。软件设计中,把程序按功能分模块的话能提高编程效率,把问题一一解决,同时画流程图能帮助理清思路,使问题简单化。定义变量时,尽量定义局部变量,在字符型变量能达到要求的情况下就不用定义成整形变量了,以节省内存空间。同时局部变量应避免与全局变量取同名,否则全局变量将被屏蔽或与局部变量相冲突而达不到设计的效果。另一方面,取变量名时也要讲究技巧,应尽量使其见名知意,同样地,写程序时加注释确是非常必要的,否则隔一段时间后,想再改进或做扩展的话就比较困难了,因为即使是自己写的程序也变得难读难懂了。在做键盘消抖时,延时的时间比较重要,一般为10ms左右,延时太短就会使按键太过灵敏,按一下就使数字跳变几次;而延时过长则可能使按键按下了却无响应,在外部定义初始化一个延时函数的入口参量则能很方便地调整延时时间,以达到比较好的效果。另外,如果对按键进行释放判断的话就能解决长时间按键导致按键重复响应的问题。参考文献1 金发庆.传感器技术与应用.北京:机械工业出版社,2002.181-1832 沙占友.智能化集成温度传感器原理与应用. 机北京:械工业出版社,2002.89-903 曹巧媛.单片机原理及应用(第二版). 北京:电子工业出版社,2002.55-574 李建忠.单片机原理及应用. 西安:西安电子科技大学出版社,2008.128-1345 李朝青.单片机原理及接口技术(简明修订版).杭州:北京航空航天大学出版社,1998.123-1256 赵文博,刘涛.单片机语言C51程序设计.北京:人民邮电出版社,2005.1-47 王巧芝.51单片机开发应用从入门到精通.北京:中国铁道出版社,2011.371-3908 王守中.51单片机开发入门与典型实例.北京:人民邮电出版社,2007.195-1989 周润景,张丽娜,丁莉.基于PROTUES的电路及单片机设计与仿真.北京:北京航空航天大学出版社,2009.1-210 从宏寿.电子设计自动化:Proteus在电子电路与51单片机中的应用.西安:西安电子科技大学出版社,2012.1-55致谢值此之际,向在我毕业设计期间给予我谆谆教诲的朱玉华老师表示衷心的感谢! 感谢老师给了我很大的帮助。同时也离不开很多同学的热心帮助,是他们在我遇到难题的时候给了我启发。通过本次毕业设计,我在专业知识、专业技能和解决问题方法方面得到很大的提高。更深入了解并掌握了传感器的基本理论知识, 并在单片机实际电路开发和常用编程设计思路掌握方面有了一定程度的掌握,尽管本次设计还不是很完善,但这为我以后的设计之路积累了宝贵的经验。附录附录A 程序清单#include <reg51.h>#include<stdio.h>#include <intrins.h> /_nop_();延时函数用#define dm P0 /段码输出口#define uchar unsigned char#define uint unsigned intsbit DQ=P17; /温度输入口sbit L1=P20; /数码管1sbit L2=P21; /数码管2sbit L3=P22; /数码管3sbit L4=P23; /数码管4sbit beep=P35; /蜂鸣器sbit set=P14; /温度设置切换键sbit add=P15; /温度加sbit dec=P16; /温度减int temp1=0; /显示当前温度和设置温度的标志位为0 时显示当前温度uint h;uint temp;uchar r;uchar high=120,low=20;uchar sign;uchar q=0;uchar tt=0;uchar scale;uchar code ditab16=0x00,0x01,0x01,0x02, /温度小数部分用查表法 0x03,0x03,0x04,0x04, 0x05,0x06,0x06,0x07, 0x08,0x08,0x09,0x09;uchar code table_dm12=0x3f,0x06,0x5b,0x4f, /小数断码表 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x00,0x40;uchar table_dm1=0xbf,0x86,0xdb,0xcf, /共阴LED 段码表"0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-" 0xe6,0xed,0xfd,0x87, 0xff,0xef; /个位带小数点的断码表uchar data temp_data2=0x00,0x00; /读出温度暂放uchar data display5=0x00,0x00,0x00,0x00,0x00; /显示单元数据,共4 个数据和一个运算暂用void delay(uint t) / 延时函数for (;t>0;t-);void scan()int j;for(j=0;j<4;j+)switch (j)case 0: dm=table_dmdisplay0;L4=0;delay(50);L4=1;/小数case 1: dm=table_dm1display1;L3=0;delay(50);L3=1;/个位case 2: dm=table_dmdisplay2;L2=0;delay(50);L2=1;/十位case 3: dm=table_dmdi