C51单片机实例温控程序(各模块详解附图)
基于C51的温度控制系统.

目录摘要 (I)Abstract (II)1绪论 (1)1.1设计目的及意义 (1)1.2研究内容 (2)1.3设计方案 (2)1.4方案论证 (3)2硬件电路 (5)2.1单片机及最小系统 (5)2.2显示电路设计 (6)2.3键盘检测电路 (8)2.4温度检测电路 (9)2.5输出电路 (15)2.6串行通信电路 (17)2.7 总电路图 (19)3程序设计 (20)3.1总程序 (20)3.2 温度设定和显示程序 (21)3.3温度获取程序 (23)3.4基于PID的温控程序设计 (26)3.5串行通信 (30)4系统调试及仿真 (32)4.1仿真环境 (32)4.2系统电路仿真 (33)4.3 Simulink仿真 (37)5.总结与展望 (43)5.1主要工作内容 (43)5.2工作小结 (43)5.3 待解决的问题及未来研究方向 (44)致谢 .............................................................................................................. 错误!未定义书签。
摘要温度控制是工业生产和日常生活中的一个很重要的环节,能够实现自动检测和控制是智能化温度控制系统的基本要求。
但是,温度本身的惯性特性导致被控制对象的滞后性大,这是我们的在控制过程中面的难题。
传统的温度控制系统已经不能满足我们的需求,所以我们必须要找出解决的方案。
本文设计选取恒温箱为研究对象,并运用数字传感技术单片机技术和PID 控制算法结合起来,来实现对温度的高精度的控制,本系统以C51单片机为核心,采用DS18B20数字温度传感器采集环境温度,将采集的温度数据显示在数码管上,采集到环境温度的同时使用单片机内部的PID算法程序对加热电路实施控制,这是因为PID控制应用广泛,功能易实现,能够根据温度误差的反馈来调整系统的输出。
基于51单片机的温度控制系统设计

基于 51 单片机的水温自动控制系统引言在现代的各种工业生产中,不少地方都需要用到温度控制系统。
而智能化的控制系统成为一种发展的趋势.本文所阐述的就是一种基于 89C51 单片机的温度控制系统。
本温控系统可应用于温度范围30℃到96℃。
设计并制作一水温自动控制系统,可以在一定范围(30℃到96℃)内自动调节温度,使水温保持在一定的范围(30℃到96℃)内。
(1) 利用摹拟温度传感器检测温度,要求检测电路尽可能简单。
(2) 当液位低于某一值时,住手加热。
(3) 用 AD 转换器把采集到的摹拟温度值送入单片机。
(4) 无竞争—冒险,无颤动。
(1) 温度显示误差不超过1℃.(2) 温度显示范围为0℃—99℃。
(3) 程序部份用 PID 算法实现温度自动控制。
(4) 检测信号为电压信号。
根据设计要求和所学的专业知识,采用 AT89C51 为本系统的核心控制器件。
AT89C51 是一种带4K 字节闪存可编程可擦除只读存储器的低电压,高性能CMOS 8 位微处理器。
其引脚图如图1 所示。
显示模块主要用于显示时间,由于显示范围为0~99℃,因此可采用两个共阴的数码管作为显示元件.在显示驱动电路中拟订了两种设计方案:方案一:采用静态显示的方案采用三片移位寄存器 74LS164 作为显示电路,其优点在于占用主控系统的 I/O 口少,编程简单且静态显示的内容无闪烁,但电路消耗的电流较大。
方案二:采用动态显示的方案由单片机的 I/O 口直接带数码管实现动态显示, 占用资源少,动态控制节省了驱动芯片的成本,节省了电,但编程比较复杂,亮度不如静态的好。
由于对电路的功耗要求不大,因此就在尽量节省 I/O 口线的前提下选用方案一的静态显示.图 1 AT89C51 引脚图1 温度检测:有选用 AD590 和LM35D 两种温度传感器的方案,但考虑到两者价格差距较大,而本系统中对温度要求的精度不很高,于是选用比较便宜 LM35D。
基于c51单片机的数字温度自动控制电路

基于c51单片机的数字温度自动控制电路基于C51单片机的数字温度自动控制电路设计,主要实现了对温度的监测以及相应的自动控制功能。
本文将从电路的整体设计、主要器件的选择和功能模块的实现三个方面进行介绍。
电路的整体设计包括主控板、传感器、执行器和显示模块四个主要部分。
主控板采用C51单片机作为核心,具有高速运算、较大存储空间和丰富的外围接口,可以实现多种功能的集成。
传感器使用温度传感器,能够实时感知环境的温度变化。
执行器采用继电器或变频器等设备,可以根据主控板的控制信号进行相应的动作。
显示模块利用数码管或液晶显示屏等设备,能够直观地展示当前温度情况和控制结果。
主要器件的选择对于电路设计非常重要。
C51单片机作为主控板的核心部件,需要具备高性能、低功耗和丰富的外围接口特点。
目前市场上有多种供应商提供的C51单片机,如STC系列、AT89C系列等,可以根据具体需求进行选择。
温度传感器的选用直接影响到对温度的监测精度,目前常用的温度传感器有NTC热敏电阻、DS18B20数字温度传感器等,可以根据物料成本和性能要求进行选择。
电路的执行器可根据具体需求选择继电器、变频器等设备,确保能够准确控制温度。
显示模块可以选择数码管或液晶显示屏等设备,具有较好的可视化效果。
需要实现的功能模块包括温度采集、温度控制和参数显示等。
温度采集模块通过与温度传感器的连接,可以读取传感器所处环境的温度值,并将其传递给主控板进行处理。
温度控制模块通过与执行器的连接,可以根据主控板的控制信号对温度进行调节,实现自动控制的功能。
参数显示模块可以实时显示当前温度值和控制结果,方便用户了解系统的工作状态。
基于C51单片机的数字温度自动控制电路可以实现对温度的实时监测和相应的自动控制,具有较高的可靠性和稳定性。
通过合理选择主要器件和实现功能模块,可以满足不同场景的需求,提高温度控制的精度和效率。
51单片机--智能温控器课程设计

单片机课程设计说明书专业:机械设计制造及其自动化设计题目:智能温控器设计者:指导老师:设计时间:2013/5/28——2013/6/12一、课题名称:一个基于51单片机的智能温控器课程设计二、主要技术指标及工作内容和要求:本设计以MCS-51系列单片机为核心,采用常用电子器件设计,一个电源开关,两个控制温度设定按键(增大/减小),四位数码管分别显示设定温度和实际温度,量程为0~99度,打开电源开关后设定温度初始化为26度。
1,按键输入采用中断方式,两个按键分别接INT0和INT1。
2,采用铂电阻(Pt100)温度传感器进行温度测量,模数转换采用ADC0809。
3,单片机根据设定温度S和实测温度P控制继电器R的动作,死区设为2度:当P<=S-1时,控制R接通电加热回路;当P>S+1时,控制R断开电加热回路;当S-1<P<=S+1时,R保持原状态不变。
目录错误!未定义书签。
1.系统总体设计方案 (1)1.1智能温控器的功能设计 (1)2.系统硬件设计 (2)2.1 单片机概述 (2)2.2 A/D转换电路 (2)2.2.1 ADC0808介绍 (2)2.2.2 A/D转换电路工作原理 (3)2.3 温度采样电路 (3)2.3.1铂电阻(Pt100)温度传感器 (3)2.4按健开关 (4)2.5温度显示电路 (5)2.5.2 温度显示工作原理 (5)2.6热电阻驱动电路 (6)第3章系统软件设计 (7)3.1软件设计思路 (7)3.2 程序流程 (7)3.3 程序内容编写 (9)参考文献: (13)附录 (14)基于MCS-51单片机的智能温控器的设计与开发1.系统总体设计方案智能温控器主要单片机,时序电路,温度采样电路,A/D转换电路,温度显示电路,温度输入电路,驱动电路等组成。
系统原理图见图1所示:图1智能温控器控制系统框图1.1智能温控器的功能设计以MCS-51系列单片机为核心,采用常用电子器件设计,一个电源开关,两个控制温度设定按键(增大/减小),四位数码管分别显示设定温度和实际温度,量程为0~99度,打开电源开关后设定温度初始化为26度。
单片机温度控制系统(附程序及原理图)

1绪论温度控制,在工业自动化控制中占有非常重要的地位。
单片机系统的开发应用给现代工业测控领域带来了一次新的技术革命,自动化、智能化均离不开单片机的应用。
将单片机控制方法运用到温度控制系统中,可以克服温度控制系统中存在的严重滞后现象,同时在提高采样频率的基础上可以很大程度的提高控制效果和控制精度。
现代自动控制越来越朝着智能化发展,在很多自动控制系统中都用到了工控机,小型机、甚至是巨型机处理机等,当然这些处理机有一个很大的特点,那就是很高的运行速度,很大的内存,大量的数据存储器。
但随之而来的是巨额的成本。
在很多的小型系统中,处理机的成本占系统成本的比例高达20%,而对于这些小型的系统来说,配置一个如此高速的处理机没有任何必要,因为这些小系统追求经济效益,而不是最在乎系统的快速性,所以用成本低廉的单片机控制小型的,而又不是很复杂,不需要大量复杂运算的系统中是非常适合的。
温度控制,在工业自动化控制中占有非常重要的地位,如在钢铁冶炼过程中要对出炉的钢铁进行热处理,才能达到性能指标,塑料的定型过程中也要保持一定的温度。
随着科学技术的迅猛发展,各个领域对自动控制系统控制精度、响应速度、系统稳定性与自适应能力的要求越来越高,被控对象或过程的非线性、时变性、多参数点的强烈耦合、较大的随机扰动、各种不确定性以及现场测试手段不完善等,使难以按数学方法建立被控对象的精确模型的情况。
随着电子技术以及应用需求的发展,单片机技术得到了迅速的发展,在高集成度,高速度,低功耗以及高性能方面取得了很大的进展。
伴随着科学技术的发展,电子技术有了更高的飞跃,我们现在完全可以运用单片机和电子温度传感器对某处进行温度检测,而且我们可以很容易地做到多点的温度检测,如果对此原理图稍加改进,我们还可以进行不同地点的实时温度检测和控制。
2总体设计方案2.1 温度控制的总体设计和思路在这个系统中我们从性能及设计成本考虑,我们选择AT89S52芯片。
51单片机设计数字温度计(流程图+源码+实物图片)

DS18B20获取温度程序流程图DS18B20的读字节,写字节,获取温度的程序流程图如图所示结束DS18B20初始化程序流程图写0x44启动DS18B20延时500 s_____ 、一DS18B20 初始化写0xcc跳过读RCMDS18B20获取温度程序流程图DS18B20读字节程序流程图图3-4 DS18B20程序流程图DS18B20写字节程序流程图显示程序设计显示电路是由四位一体的数码管来实现的。
由于单片机的I/O 口有限,所以数码管采用动态扫描的方式来进行显示。
程序流程图如图所示。
图显示程序流程图按键程序设计按键是用来设定上下限报警温度的。
具体的程序流程图如图所示N附 1 源程序代码******************************************************************* 程序名 ; 基于 DS18B20 的测温系统* 功 能: 实时测量温度,超过上下限报警,报警温度可手动调整。
K1 是用来 * 进入上下限调节模式的,当按一下 K1 进入上限调节模式,再按一下进入下限 * 调节模式。
在正常模式下,按一下K2 进入查看上限温度模式,显示 1s 左右自动* 退出;按一下 K3 进入查看下限温度模式,显示 1s 左右自动退出;按一下 K4 消除 * 按键音,再按一下启动按键音。
在调节上下限温度模式下, K2 是实现加 1 功能, * K1 是实现减 1 功能, K3 是用来设定上下限温度正负的。
* 编程者: ZPZ * 编程时间: 2009/10/2*******************************************************************bit s=0;〃s 是调整上下限温度时温度闪烁的标志位, s=0不显示200ms , s=1 显示 1s 左右bit s1=0; void display1(uint z); #include"ds18b20.h" //s1 标志位用于上下限查看时的显示//声明 display1 ()函数//将 ds18b20.h 头文件包含到主程序#include"keyscan.h" #include"display.h"/***********************//将 keyscan.h 头文件包含到主程序 //将 display.h 头文件包含到主程序 主函数 ************************/#include<AT89X52.h> #include<intrins.h>// 将 AT89X52.h 头文件包含到主程序 //将 intrins.h 头文件包含到主程序(调用其中的 函数延时)_nop_() 空操作#define uint unsigned int #define uchar unsigned char uchar max=0x00,min=0x00;//变量类型宏定义,用 //变量类型宏定义,用//max 是上限报警温度, uint 表示无符号整形( 16 位) uchar 表示无符号字符型( 8 位)min 是下限报警温度void main(){beer=1;led=1; timer1_init(0); get_temperature(1);while(1){keyscan();get_temperature(0);//获取温度函数//关闭蜂鸣器// 关闭LED 灯//初始化定时器1(未启动定时器1)// 首次启动DS18B20 获取温度(DS18B20 上点后自动将EEPROM 中的上下限温度复制到TH 和TL 寄存器)//主循环//按键扫描函数keyscan(); // 按键扫描函数display(temp,temp_d*0.625);// 显示函数 alarm(); //报警函数 keyscan();// 按键扫描函数}}/******************************************************************** * 程序名 ; __ds18b20_h__ * 功 能: DS18B20 的 c51 编程头文件 * 编程者: ZPZ * 编程时间: 2009/10/2* 说 明:用到的全局变量是:无符号字符型变量temp ( 测得的温度整数部分 ),temp_d* ( 测得的温度小数部分 ),标志位 f (测量温度的标志位‘ 0'表示“正温度”‘ 1'表 * 示“负温度”),标志位 f_max (上限温度的标志位‘ 0'表示“正温度”、‘ 1'表 * 示“负温度”),标志位f_min (下限温度的标志位‘ 0'表示“正温度”、‘ 1'表* 示“负温度”),标志位 w ( 报警标志位‘ 1'启动报警‘ 0'关闭报警 ) 。
基于C51单片机的温度控制系统应用系统设计(附程序)

基于C51单片机的温度控制系统应用系统设计(附程序)基于C51单片机的温度控制系统应用系统设计---------------单片机原理及应用实践周设计报告姓名:班级:学号:同组成员:指导老师:成绩:时间: 2011年 7 月 3 日单片机温度控制系统摘要温度是日常生活中无时不在的物理量,温度的控制在各个领域都有积极的意义。
很多行业中都有大量的用电加热设备,如用于热处理的加热炉,用于融化金属的坩锅电阻炉及各种不同用途的温度箱等,采用单片机对它们进行控制不仅具有控制方便、简单、灵活性大等特点,而且还可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量。
因此,智能化温度控制技术正被广泛地采用。
本温度设计采用现在流行的AT89S51单片机,配以DS18B20数字温度传感器,该温度传感器可自行设置温度上下限。
单片机将检测到的温度信号与输入的温度上、下限进行比较,由此作出判断是否触发相应设备。
本设计还加入了常用的液晶显示及状态灯显示灯常用电路,使得整个设计更加完整,更加灵活。
关键词: 温度箱;AT89C52;LCD1602:单片机;控制目录1 引言11.1 温度控制系统设计的背景、发展历史及意义 11.2 温度控制系统的目的 11.3 温度控制系统完成的功能 12 总体设计方案 22.1 方案一 22.2 方案二 23 DS18B20温度传感器简介73.1 温度传感器的历史及简介73.2 DS18B20的工作原理7DS18B20工作时序7ROM操作命令 93.3 DS18B20的测温原理98B20的测温原理: 9DS18B20的测温流程104 单片机接口设计 124.1 设计原则124.2 引脚连接12晶振电路 12串口引脚 12其它引脚 135 系统整体设计145.1 系统硬件电路设计14主板电路设计14各部分电路145.2 系统软件设计 16系统软件设计整体思路16 系统程序流图176 结束语21附录22参考文献391 引言1.1 温度控制系统设计的背景、发展历史及意义随着社会的发展,科技的进步,以及测温仪器在各个领域的应用,智能化已是现代温度控制系统发展的主流方向。
C51单片机实例温控程序(各模块详解附图

*
*
实际温度超过你设定的温度,蜂鸣器报警。
*
*
*
*
包括各个模块及详细的注释
*
*
方便 C51 单片机入门级别者阅读
*
*--------------------------------------------------------------------------------------*/
#include<stc12c5a.h> typedef unsigned char uchar ; typedef unsigned int uint; sbit heat= P1^3; uchar makesure; uchar tp=0; uchar num=0; uchar ad=0; uchar s60,s61,s62,s63,temp;
/*--------------------------------------------------------------------------------------------------------------------------------------------
*
*
*
该程序为一个完整的温度控制器程序
0x3e,0x3d,0x3d,0x3c,0x3b,0x3b,0x3a,0x39,0x38,0x38,0x37,0x36,0x36,0x36,0x35,0x35,
0x34,0x33,0x33,0x32,0x32,0x31,0x31,0x30,0x30,0x2f,0x2f,0x2e,0x2e,0x2d,0x2d,0x2c,
0x10,0x0f,0x0f,0x0e,0x0e,0x0e,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x0b,0x0a,0x0a,0x09,
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*--------------------------------------------------------------------------------------------------------------------------------------------***该程序为一个完整的温度控制器程序**最小系统温控板(后附图)**实现功能:**1、2X2的矩阵按键:分别实现(温度+,温度-,温度**确认,回到初始化状态)**2、先按键设定你要的温度值,然后按下确认键,**此时,水泥电阻开始加热,数码管动态显示电阻**此时的温度。
实现控制水泥电阻被加热到你所需要**的温度值。
并且能够稳定在你所设定的温度下。
当**实际温度超过你设定的温度,蜂鸣器报警。
****包括各个模块及详细的注释**方便C51单片机入门级别者阅读**--------------------------------------------------------------------------------------*/#include<stc12c5a.h>//该头文件可以百度到typedef unsigned char uchar;typedef unsigned int uint;sbit heat=P1^3;uchar makesure;//s62键为makesure确定键(若按下则置1)uchar tp=0;uchar num=0;uchar ad=0;uchar s60,s61,s62,s63,temp;//定义四个按键void smgshow(uchar num,uchar tp);//声明数码管显示函数void keyask(void);//键盘扫描uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//数码管编码/*--------------------------------------------------------------------------------------------------------------------------------------------*三个小函数**delayus()--1us延时**delay1ms()--1ms延时**buzzeron()--蜂鸣器响*----------------------------------------------------*/void delayus(uint xus)//--------------------1us基准延时函数{uint i,j;for(i=0;i<xus;i++)for(j=0;j<10;j++);}void delay1ms(unsigned int i)//-------------------1ms基准延时函数{unsigned char j;while(i--){for(j=0;j<115;j++){;}}}void buzzeron(void)//--------------------蜂鸣器响动函数{unsigned int t;P1M1&=~0x10;P1M0|=0X10;for(t=0;t<100;t++){P14=0;smgshow(num,tp);P14=1;smgshow(num,tp);}P14=0;}/*--------------------------------------------------------------------------------------------------------------------------------------------***函数名:Init()****描述:各端口初始化****参数:无****返回值:无*------------------------------------------------------*/void Init(){P1M1&=~0X08;//P1^3口推挽输出P1M0|=0X08;P0M1=0X00;//P0口全部推挽输出P0M0=0XFF;P1M0&=~0X02;//P1^1口高阻输入避免各器件及电路对P11口的干扰P1M1|=0x02;ADC_CONTR|=0x80;//启动BIT3=0x08(ADC_STARTAD)开启转换delayus(1);AUXR1&=~0X04;//AD值存储方式ADC_CONTR=0XE1;//打开AD通道}/*--------------------------------------------------------------------------------------------------------------------------------------------***函数名:keyboardset()****描述:键盘检测及设置,由两个函数构成**先用keyask函数扫描哪个键按下,**然后用keyboardset执行相应功能******参数:无****返回值:无*------------------------------------------------------------------------------------*/void keyboardset(void){uchar i;P1M1&=0xef;P1M0|=0x10;//推挽输出,以驱动蜂鸣器P14=0x00;{keyask();//按键扫描if((s60+s61+s62+s63)!=0){if(s60==1){if(num>0)num=num-1;smgshow(num,tp);}if(s61==1){num=num+1;smgshow(num,tp);if(num>=99)num=99;}if(s62==1){if(num>tp)makesure=1;return;}if(s63==1){makesure=0;return;}for(i=0;i<20;i++)//每按一次,响一次{P1=0x10;delay1ms(1);P1=0x00;delay1ms(1);}}else{smgshow(num,tp);}}}void keyask(void)//---------------------------------------------------------------------------按键扫描函数{s60=0;s61=0;s62=0;s63=0;P3=0xb0;//第一行扫描10110000temp=P3&0x30;if(temp!=0x30){delay1ms(10);if(temp!=0x30)//消除抖动switch(temp){case(0x20):s60=1;while(!(P3&0x10));break;//while消抖case(0x10):s61=1;while(!(P3&0x20));break;}}P3=0x70;//第二行扫描temp=P3&0x30;if(temp!=0x30){delay1ms(10);if(temp!=0x30)switch(temp){case(0x20):s62=1;while(!(P3&0x10));break;case(0x10):s63=1;while(!(P3&0x20));break;}}}/*--------------------------------------------------------------------------------------------------------------------------------------------***函数名:getAd()****描述:AD初始化及采集****参数:无****返回值:sum*------------------------------------------------------------------------------*/uchar getAd(void){uchar i;uint sum=0;for(i=0;i<8;i++){ADC_CONTR|=0x08;//启动BIT3=0x08(ADC_STARTAD)开启转换delayus(1);P1ASF=0X02;//P1口模拟功能控制位00000010开启P11while((ADC_CONTR&0x10)==0x00);//等待转换结束(等ADC_FLAG置1转换结束)ADC_CONTR&=~0x10;//ADC_FLAG软件清零sum+=ADC_RES;//SUM存电压值}sum>>=3;//右移3位,除以8,求平均值return(uchar)sum;//强制转换将sum转换为uchar形式}uchar code adlist[]={0x63,0x63,0x62,0x62,0x61,0x61,0x60,0x60,0x5f,0x5e,0x5e,0x5d,0x5c,0x5c,0x5b,0x5a,0x5a,0x59,0x58,0x57,0x57,0x56,0x55,0x54,0x53,0x52,0x51,0x50,0x4f,0x4e,0x4d,0x4c,0x4b,0x4a,0x49,0x48,0x47,0x46,0x46,0x45,0x44,0x43,0x42,0x42,0x41,0x40,0x3f,0x3f,0x3e,0x3d,0x3d,0x3c,0x3b,0x3b,0x3a,0x39,0x38,0x38,0x37,0x36,0x36,0x36,0x35,0x35,0x34,0x33,0x33,0x32,0x32,0x31,0x31,0x30,0x30,0x2f,0x2f,0x2e,0x2e,0x2d,0x2d,0x2c,0x2c,0x2b,0x2b,0x2a,0x2a,0x29,0x29,0x28,0x28,0x27,0x27,0x26,0x26,0x25,0x25,0x24,0x24,0x24,0x23,0x23,0x22,0x22,0x21,0x21,0x20,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x18,0x18,0x18,0x17,0x16,0x16,0x15,0x15,0x15,0x14,0x14,0x13,0x13,0x13,0x12,0x12,0x11,0x11,0x10,0x10,0x10,0x0f,0x0f,0x0e,0x0e,0x0e,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x0b,0x0a,0x0a,0x09,0x09,0x08,0x08,0x08,0x07,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x05,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00};//AD转换的温度值表/*--------------------------------------------------------------------------------------------------------------------------------------------***函数名:smgshow()****描述:数码管显示(动态)****参数:num,tp****返回值:无*------------------------------------------------------------------------------*/void smgshow(uchar num,uchar tp){P0=table[num/10];//千位P27=1;P26=0;P25=0;P24=0;delay1ms(2);P0=table[num%10];//百位P27=0;P26=1;P25=0;P24=0;delay1ms(2);P0=table[tp/10];//十位P27=0;P26=0;P25=1;P24=0;delay1ms(2);P0=table[tp%10];//个位P27=0;P26=0;P25=0;P24=1;delay1ms(2);}/*--------------------------------------------------------------------------------------------------------------------------------------------***主函数****先初始化,再进入循环*********------------------------------------------------------------------------------*/void main(){Init();//各端口初始化while(1)//进入死循环{keyboardset();//----------键盘检测及设置ad=getAd();//----------得到的AD值tp=adlist[ad/2];//----------经查表得到的温度赋给tpif(makesure==1)//----------等待s62确认键是否按下{if(num>=tp)//----------当设定值大于实际温度值时加热{heat=1;//----------电阻加热}if(tp>num)//-----------当设定值小于实际温度值时停止加热{heat=0;//-----------停止加热buzzeron();//-----------蜂鸣器响}}smgshow(num,tp);//-----------数码管显示}}/*---------------------------------------------------------------------------------------------------------------------------------by灏*/原理图:实物图:。