C51单片机实例温控程序(各模块详解附图)

合集下载

基于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单片机的温度控制系统设计

基于 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单片机作为主控板的核心部件,需要具备高性能、低功耗和丰富的外围接口特点。

目前市场上有多种供应商提供的C51单片机,如STC系列、AT89C系列等,可以根据具体需求进行选择。

温度传感器的选用直接影响到对温度的监测精度,目前常用的温度传感器有NTC热敏电阻、DS18B20数字温度传感器等,可以根据物料成本和性能要求进行选择。

电路的执行器可根据具体需求选择继电器、变频器等设备,确保能够准确控制温度。

显示模块可以选择数码管或液晶显示屏等设备,具有较好的可视化效果。

需要实现的功能模块包括温度采集、温度控制和参数显示等。

温度采集模块通过与温度传感器的连接,可以读取传感器所处环境的温度值,并将其传递给主控板进行处理。

温度控制模块通过与执行器的连接,可以根据主控板的控制信号对温度进行调节,实现自动控制的功能。

参数显示模块可以实时显示当前温度值和控制结果,方便用户了解系统的工作状态。

基于C51单片机的数字温度自动控制电路可以实现对温度的实时监测和相应的自动控制,具有较高的可靠性和稳定性。

通过合理选择主要器件和实现功能模块,可以满足不同场景的需求,提高温度控制的精度和效率。

51单片机--智能温控器课程设计

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单片机设计数字温度计(流程图+源码+实物图片)

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单片机的温度控制系统应用系统设计(附程序)基于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单片机实例温控程序(各模块详解附图

*
*
实际温度超过你设定的温度,蜂鸣器报警。
*
*
*
*
包括各个模块及详细的注释
*
*
方便 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,

基于C51单片机的温度控制系统应用系统设计(附程序)

基于C51单片机的温度控制系统应用系统设计(附程序)

基于C51单片机的温度控制系统应用系统设计(附程序)基于C51单片机的温度控制系统应用系统设计--------- 单片机原理及应用实践周设计报告姓名:班级:学号:同组成员:指导老师:成绩:时间:2011 年7 月3 日单片机温度控制系统摘要温度是日常生活中无时不在的物理量,温度的控制在各个领域都有积极的意义。

很多行业中都有大量的用电加热设备,如用于热处理的加热炉,用于融化金属的坩锅电阻炉及各种不同用途的温度箱等,采用单片机对它们进行控制不仅具有控制方便、简单、灵活性大等特点,而且还可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量。

因此,智能化温度控制技术正被广泛地采用。

本温度设计采用现在流行的AT89S51单片机,配以DS18B2数字温度传感器,上、下限进行比较,由此作出判断是否触发相应设备。

本设计还加入了常用的液晶显示及状态灯显示灯常用电路,使得整个设计更加完整,更加灵活。

关键词:温度箱;AT89C52 LCD1602单片机;控制目录1引言11.1温度控制系统设计的背景、发展历史及意义11.2温度控制系统的目的11.3温度控制系统完成的功能12总体设计方案22.1方案一 22.2方案二 23DS18B20温度传感器简介73.1温度传感器的历史及简介73.2DS18B20的工作原理7DS18B20工作时序7ROM操作命令93.3DS18B20的测温原理98B20的测温原理:9DS18B20的测温流程104单片机接口设计124.1设计原则124.2引脚连接12晶振电路12串口引脚12其它引脚135系统整体设计145.1系统硬件电路设计14主板电路设计14各部分电路145.2系统软件设计16 系统软件设计整体思路系统程序流图176结束语2116附录22参考文献391引言1.1温度控制系统设计的背景、发展历史及意义随着社会的发展,科技的进步,以及测温仪器在各个领域的应用,智能化已是现代温度控制系统发展的主流方向。

c51单片机温度传感器控制电机转动

c51单片机温度传感器控制电机转动
主程序流程图:
图12 主程序流程图
5.2
读温度值模块需要调用4个子程序,分别为:
DS18B20初始化子程序:让单片机知道DS18B20在总线上且已准备好操作
DS18B20写字节子程序:对DS18B20发出命令
DS18B20读字节子程序:读取DS18B20存储器的数据
延时子程序:对DS18B20操作时的时序控制
4.2.2
图3DS18B20外形及引脚
GND:地
DQ:单线运用的数据输入/输出引脚
VD:可选的电源引脚
4.2.3
单总线通常要求接一个约4.7K左右的上拉电阻,这样,当总线空闲时,其状态为高电平。
图4 DS18B20接线原理图
4.2.4
主机使用时间隙来读写DS18B20的数据位和写命令字的位。
1.初始化时序如下图:
课程设计报告
基于单片机的DS18B20温度控制设计
学院:计算机科学与工程
专业:计算机科学与技术
班级:090603
学号:090603120
姓名:张阳阳
指导老师:乔永兴
1
随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便是不可否定的,各种数字系统的应用也使人们的生活更加舒适。数字化控制、智能控制为现代人的工作、生活、科研等方面带来方便。其中数字温度计就是一个典型的例子。
图5 DS18B20初始化时序
2.DS18B20读写时序:
图6DS18B20读写时序
4.2.5
高速暂存存储器由9个字节组成,其分配如表5所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后。

基于c51单片机的数字温度自动控制电路

基于c51单片机的数字温度自动控制电路

基于c51单片机的数字温度自动控制电路一、概述随着科技的不断发展,单片机技术已经被广泛应用于各个领域,其中数字温度自动控制电路是单片机在家电领域中的一大应用。

本文将介绍基于c51单片机的数字温度自动控制电路的设计原理、硬件连接和软件设计。

二、设计原理数字温度自动控制电路是通过传感器收集环境温度信号,经过一定的处理后,根据设定的温度阈值来控制加热或降温设备的工作。

在本设计中,c51单片机将充当控制中心,负责接收传感器信号、进行温度处理,并根据需要发送控制信号。

三、硬件连接1. 传感器部分:采用DS18B20数字温度传感器,它通过一根三线(VCC、GND、DATA)来与单片机相连接,其中DATA线连接到单片机的IO口。

2. 控制部分:通过继电器或者晶闸管等电器元件来控制加热或降温设备的开关,其控制触发线连接到单片机的IO口。

四、软件设计1. 温度采集:通过单片机的IO口读取传感器发送的数字信号,并通过相应的函数进行温度的转换和处理。

2. 温度控制:根据预先设定的目标温度,当实际温度超过或低于设定值时,单片机将相应地通过IO口控制继电器或晶闸管等元件来控制加热或降温设备的开关。

3. 显示部分:可以选择在液晶显示屏上显示当前的温度值和设定的目标温度值,以便实时监测和调整。

五、总结基于c51单片机的数字温度自动控制电路具有温度精度高、控制灵活等优点,适用于家用空调、恒温器、温室控制系统等多种应用场景。

希望本文能够帮助读者对于该领域有所了解,并且可以在实际应用中发挥一定的帮助作用。

六、优化与改进在实际的数字温度自动控制电路应用中,我们可以针对硬件和软件部分进行一些优化和改进,以提高性能和稳定性。

1. 硬件方面的优化:可以考虑采用更精准的温度传感器,如PT100或者thermistor,以提高温度测量的精度。

可以使用更高功率、更可靠的继电器或者晶闸管等控制元件,以适应不同类型的加热或降温设备。

2. 软件方面的优化:在软件设计上,可以引入PID控制算法,以实现更精确的温度控制。

单片机课程设计之温控系统(附源代码)资料

单片机课程设计之温控系统(附源代码)资料

目录一、实验任务与要求二、总体设计三、硬件模块介绍1.单片机模块介绍2.温度传感器3.数码管4.报警电路四程序设计1.温度传感器初始化程序2.温度测量3.数码管显示4.温度报警五、程序流程图六、实验调试七、实验总结一、实验任务与要求1.利用用单片机完成温度的测量并显示2.了解温度传感器的工作原理3.了解锁存器的工作原理4.理解数码管的显示原理二、总体设计利用单片机接收温度传感器传过来的温度值并经过数值处理以动态方式显示于数码管上,利用while函数循环检测温度值,当温度值高于设定值时启动报警电路,报警电路主要由蜂鸣器实现。

三、硬件模块介绍1.单片机模块介绍实验中采用的是89C52。

该单片机是INTEL公司MCS-51系列单片机中基本的产品,它采用ATMEL公司可靠的CMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。

它结合了CMOS的高速和高密度技术及CMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于89C51增强型单片机版本。

具有以下特点:·标准MCS-51内核和指令系统·片内8kROM(可扩充64kB外部存储器)· 32个双向I/O口· 256x8bit内部RAM(可扩充64kB外部存储器)· 3个16位可编程定时/计数器·时钟频率3.5-12/24/33MHz·向上或向下定时计数器·改进型快速编程脉冲算法· 6个中断源· 5.0V工作电压·全双工串行通信口·布尔处理器—帧错误侦测· 4层优先级中断结构—自动地址识别·兼容TTL和CMOS逻辑电平·空闲和掉电节省模式· PDIP(40)和PLCC(44)封装形式原理图如下:2.温度传感器1.概述温度传感器采用的是由美国Dallas 半导体公司生产的数字化温度传感器DS1820 。

基于51单片机的温控系统设计流程框图

基于51单片机的温控系统设计流程框图

基于51单片机的温控系统设计流程框图下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor.I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!基于51单片机的温控系统设计流程详解在电子工程领域,51单片机因其简单易用、功能强大而被广泛应用。

c51单片机实验温度采集控制报告

c51单片机实验温度采集控制报告
LM75A可设置成工作在两种模式:正常工作模式或关断模式。在正常工作模式中,每隔100ms执行一次温度-数字的转换,Temp寄存器保存着最后一次更新的结果;但是,在该模式下,器件的I2C接口仍然有效,寄存器读/写操作纠结执行。器件的工作模式通过配置寄存器可编程位B0业设定。当器件上电或从关断模式进入正常工作模式时启动温度转换。
(一)试验要求
1、在数码管的第一、二个显示当前环境温度,第三、六个数码管熄灭,第四、五个数码管显示设定温度,第七、八个数码管显示电机转速;设定温度初值25,利用“+”“-”两个按键可以加减该温度数值,范围在16~30之间,按键按下蜂鸣器响0.2s。
2、根据设定温度和实际环境温度的温差驱动直流电机。设定温度等于环境温度,直流电机停转;设定温度和环境温度温差的绝对值越大,直流电机转速越快(要求最大转速控制在100以内)。
八、对本实验过程及方法、手段的改进建议
九、附录
温度采集控制实验程序
/*
main.c
LM75A数字温度计
*/
#include "I2C.h"
#include <reg51.h>
#include <string.h>
#include <absacc.h>
#include <CTYPE.H>
//定义显示缓冲区(由定时中断程序自动扫描)
3、I2C工作原理
1)I2C总线概述
I2C总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需
的包括总线裁决和高低速器件同步功能的高性能串行总线。
2)I2C信号线
I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。I2C总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线“与”关系。

基于51单片机的温度控制系统

基于51单片机的温度控制系统

一.概述温度是工业生产中常见的工艺参数之一,任何物理变化和化学反应过程都与温度密切相关,因此温度控制是生产自动化的重要任务。

对于不同生产情况和工艺要求下的温度控制,所采用的加热方式,燃料,控制方案也有所不同。

本设计的控制对象为一电加热炉,输入为加在电阻丝两断的电压,输出为电加热炉内的温度。

输入和输出的传递函数为:G(s)=2/(s(s+1))。

控温范围为100~500℃,所采用的控制方案为直接数字控制(DDC)中的最少拍控制。

二.温度控制系统的组成框图采用典型的反馈式温度控制系统,组成部分见下图。

其中数字控制器的功能由微型机算机实现。

图2.1 温度控制系统的组成框图三.温度控制系统结构图及总述图3.1 温度控制系统结构图图中由4~20mA变送器,I/V,A/D转换器构成输入通道,用于采集炉内的温度信号。

其中,变送器选用XTR101,它将热电偶信号(温度信号)变为4~20mA电流输出,再由高精密电流/电压变换器RCV420将4~20mA电流信号变为0~5V标准电压信号,以供A/D 转换用。

转换后的数字量与与炉温的给定值数字化后进行比较,即可得到实际炉温和给定炉温的偏差。

炉温的设定值由键盘输入。

由微型计算机构成的数字控制器按最小拍进行运算,计算出所需要的控制量。

数字控制器的输出经标度变换后送给8253,由8253定时计数器转变为高低电平的不同持续时间,送至SCR触发电路,触发晶闸管并改变其导通角大小,从而控制电加热炉的加热电压,起到调温的作用。

四.温度控制系统硬件与其详细功能介绍1.微型计算机的选择——时钟发生器,8282——带三态缓冲器的通用8位地址锁存器,8286——具有三态输出的8位双极型总线收发器。

其中,时钟发生器8284A为CPU提供时钟信号,经时钟同步的系统复位信号RESET和准备就绪信号READY;地址锁存器8282是针对于8086CPU地址/数据线分时复用而设计配备的,它可以在8086CPU总线周期的T1状态,利用ALE信号的下降沿将地址信息锁存于其中;总线收发器8286是为了提高8086CPU 数据总线的驱动能力2.SCR触发回路和主回路图4.1 SCR触发回路和主回路如图所示为一晶闸管触发电路。

51单片机温度自动控制系统设计电路图流程图汇编源程序.

51单片机温度自动控制系统设计电路图流程图汇编源程序.

51单片机温度自动控制系统设计+电路图+流程图+汇编源程序51单片机温度自动控制系统设计+电路图+流程图+汇编源程序第三章测温电路的选择及设计3.1 热电偶测温电路3.1.1热电偶热电偶是将温度量转换成电热大小的热电传感器,它被广泛用来测量100℃─1300℃范围内的温度,它具有结构简单,使用方便,精度高,热惯性小,可测局部温度,集中检测,自动记录等特点。

图3.1热电效应无耻悲鄙下流的网"学,网总是抄六;维^论,文.网 如图,将两种不同材料导体A、B 两端接在一起,一端温度为,另一端为T(T>),这时在这个回路中将产生一个与温度、T以及导体料性质有关的电势(T、),这样构成的热电变换元件称为热电偶,可用来测量温度,这种热电效应产生的电势(T、)是由珀尔帖效应和汤姆逊效应引起的。

常见的几种标准化热电偶有:铂—铂热电偶(WRLB)(分度号LB-3)、铂—铂热电偶(WRLL)(分度号:LL-2):镍铬、镍硅或镍铬—镍铝热电偶(WREV)(分度号EV-2):镍铬—考铜热电偶(WREA)(分度号EA-2)。

3.1.2毫伏变送器毫伏变送器是电动单元组合仪表中的一种,它可以将来自热电偶的MV级信号转换为电流输出,同时还能对热电偶温—电曲线进行校正,从而使热电偶检测的温度值与变送器的输出具有线性关系,本系统中所有用的变送器为EX系列仪表中的热电偶温度变送器它的输入电路有冷端补偿和断偶保护措施,负反馈电路具有线性功能。

线性功能:毫伏单元变送用折线近似地代替曲线构成非线性负反馈使变送器整个闭合的特性具有非线性,如果这个非线性的规律和所用热电偶特性曲线互相抵消,就可以使输出电压和电流具有完全正比于温度的性能。

为了提高测量精度,可将变送器进行零点迁移,当温度范围为400℃─1000℃,热电偶输出16.4~41.32mv,使变送器输出0~10mv,其输出经过电流—电压变换电路转换为0~5v电压信号,这样,使用8位的ADC使量化误差达±2.34℃。

温湿度采集控制电路及C51程序

温湿度采集控制电路及C51程序

2
R4 510 D2 LED D LED R3 510
VC C IC6 7 8 N0 5 J S1 1 2 GN D LED + CV 1 J S1 2 2 0 UF 12V 1 Vin +5 V 3 D CV 3 0 . 1 UF
CS1 0 . 1 UF D1
VC C
GN D
+ CV 2 1 0 UF
X1 1 1 . 0 5 9 2 .0 M Hz X2 R2 1K X1
VC C 3 1 19 18 RST RD WR 9 17 16
EA/VP X1 X2 RESET RD WR
RX பைடு நூலகம் TXD ALE/P PSEN
10 11 30 29
RX D TXD ALE PSEN J P2 J UM PER B
VCC 3 1 X1 19 18 RST RD WR 9 17 16
485_E 2 1 2 PIN
X2 R2 1K
VCC J S2 1 2 V1 7 8 N0 5 1 Vin
GN D
RXD TXD ALE/P PSEN
10 11 30 29
RXD TXD ALE PSEN
TXD
4
E1 +5 V 3 R3 510 + CV2 1 0 UF CV3 0 .1 U F D1 LED 1 0 UF/1 6 V
J1
J2
VC C
VC C
3 2 1
GN D
GN D 1 2 3 4 5 6 7 8
3 2 1
U1 P1 0 P1 1 P1 2 P1 3 P1 4 P1 5 P1 6 P1 7 INT1 INT0 T1 T0
8 9 C5 1 P0 0 P0 1 P0 2 P0 3 P0 4 P0 5 P0 6 P0 7 P2 0 P2 1 P2 2 P2 3 P2 4 P2 5 P2 6 P2 7 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 D0 D1 D2 D3 D4 D5 D6 D7 A8 A9 A1 0 A1 1 A1 2 A1 3 A1 4 A1 5

温度监测系统 单片机C51程序

温度监测系统 单片机C51程序

原理图仿真图PCB图C51程序#include "reg51.h"#include "intrins.h"#include "ctype.h"#define uchar unsigned char#define uint unsigned inttypedef unsigned char BYTE;typedef bit BOOL;sbit AD_CLK=P1^2;sbit AD_CS=P1^1;sbit AD_DI=P1^0;sbit lb=P3^7;sbit k1=P3^1;sbit k2=P3^0;sbit kw=P3^2;sbit LCD_RS = P2^5;sbit LCD_RW = P2^6;sbit LCD_EP = P2^7;unsigned char c;unsigned char a;unsigned char b;//unsigned char fm;unsigned char zs;unsigned char ss;unsigned char xs;unsigned char xx;unsigned char i;unsigned char miao;unsigned char fen;unsigned char shi;unsigned char d;bit f;unsigned char dat;double dat1;double temp;double z;BYTE code dis1[] = {"0123456789.-+:a= "}; unsigned char dispbuf[8]={0,0,0,0,0,0,0,0};//////////////////////////////////////////////////////////uchar readadc1(void) //0832函数{uchar i;AD_CS=1;AD_CLK=0;_nop_();AD_CS=0;_nop_();AD_DI=1;AD_CLK=1;_nop_();AD_DI=0;AD_CLK=0;AD_DI=1; //配置位1_nop_();AD_CLK=1;_nop_();AD_CLK=0;AD_DI=0; //配置位2_nop_();AD_CLK=1;_nop_();AD_CLK=0;AD_DI=1;_nop_();AD_CLK=1;for(i=0;i<=8;i++){dat=dat<<1;_nop_();AD_CLK=1;if(AD_DI){dat|=0x01;}_nop_();AD_CLK=0;}AD_CS=1;return(dat);}//////////////////////////////////////////////////////////delay(int ms) // 延时子程序{int i;while(ms--){for(i = 0; i< 250; i++){_nop_();_nop_();_nop_();_nop_();}}}////////////////////////////////////////////////////////////////////////BOOL lcd_bz() // 测试LCD忙碌状态{BOOL result;LCD_RS = 0;LCD_RW = 1;LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();result = (BOOL)(P0 & 0x80);LCD_EP = 0;return result;}////////////////////////////////////////////////////////////////////////lcd_wcmd(BYTE cmd) // 写入指令数据到LCD {while(lcd_bz());LCD_RS = 0;LCD_RW = 0;LCD_EP = 0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0;}////////////////////////////////////////////////////////////////////////lcd_pos(BYTE pos) //设定显示位置{lcd_wcmd(pos | 0x80);}////////////////////////////////////////////////////////////////////////lcd_wdat(BYTE dat) //写入字符显示数据到LCD {while(lcd_bz());LCD_RS = 1;LCD_RW = 0;LCD_EP = 0;P0 = dat;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0;}////////////////////////////////////////////////////////////////////////lcd_init() //LCD初始化设定{lcd_wcmd(0x38);delay(1);lcd_wcmd(0x0c);delay(1);lcd_wcmd(0x06);lcd_wcmd(0x01);delay(1);}///////////////////////////////////////////////////////////////////void wdkz(void) //上下限温度时间调整函数{switch(a){case 1:{ c=1;if(k1==0){delay(50);if(k1==1)ss++;else ss=ss+5;}if(k2==0){delay(50);if(k2==1)ss--;else ss=ss-5;}} b reak;case 2:{if(k1==0){delay(50);if(k1==1)xx++;else xx=xx+5;}if(k2==0){delay(50);if(k2==1)xx--;else xx=xx-5;}} break;case 5:{if(k1==0){delay(50);if(k1==1)miao++;else miao=miao+5;if(miao>59)miao=0;}if(k2==0){delay(50);if(k2==1)miao--;else miao=miao-5;if(miao==0)miao=59;}} b reak;case 4:{if(k1==0){delay(50);if(k1==1)fen++;else fen=fen+5;if(fen>59)fen=0;}if(k2==0){delay(50);if(k2==1)fen--;else fen=fen-5;if(fen==0)fen=59;}} break;case 3:{if(k1==0){delay(50);if(k1==1)shi++;else shi=shi+5;if(shi>23)shi=0;}if(k2==0){delay(50);if(k2==1)shi--;else shi=shi-5;if(shi==0)shi=23;}} b reak;}}/////////////////////////////////////////////////////////////////void xians() //显示函数{lcd_wcmd(0x06);lcd_pos(0x00); //上限温度lcd_wdat(dis1[ss/100]);lcd_pos(0x01);lcd_wdat(dis1[ss/10%10]);lcd_pos(0x02);lcd_wdat(dis1[ss%10]);lcd_pos(0x08);lcd_wdat(dis1[shi/10]);lcd_pos(0x09);lcd_wdat(dis1[shi%10]); lcd_pos(0x0a);lcd_wdat(dis1[13]);lcd_pos(0x0b);lcd_wdat(dis1[fen/10]); lcd_pos(0x0c);lcd_wdat(dis1[fen%10]); lcd_pos(0x0d);lcd_wdat(dis1[13]);lcd_pos(0x0e);lcd_wdat(dis1[miao/10]); lcd_pos(0x0f);lcd_wdat(dis1[miao%10]);lcd_pos(0x40);lcd_wdat(dis1[xx/100]); lcd_pos(0x41);lcd_wdat(dis1[xx/10%10]); lcd_pos(0x42);lcd_wdat(dis1[xx%10]);lcd_pos(0x45);lcd_wdat(dis1[14]);lcd_pos(0x46);lcd_wdat(dis1[15]);lcd_pos(0x47);lcd_wdat(dis1[a]);lcd_pos(0x4a);lcd_wdat(dis1[dispbuf[0]]); lcd_pos(0x4b);lcd_wdat(dis1[dispbuf[1]]); lcd_pos(0x4c);lcd_wdat(dis1[dispbuf[2]]); lcd_pos(0x4d);lcd_wdat(dis1[dispbuf[3]]); lcd_pos(0x4e);lcd_wdat(dis1[dispbuf[4]]); lcd_pos(0x4f);lcd_wdat(dis1[dispbuf[5]]);}///////////////////////////////////////////////////////////////////void baojing() //报警{lb=1;if(temp>ss){lb=0;}if(temp<xx){lb=0;}/*fm=1;if(temp>ss){fm=0;}if(temp<xx){fm=0;}*/}//////////////////////////////////////////////////////////////////zhuanhuan() //转换函数{z=dat*0.01960784;if(z>2.602){dispbuf[ 0 ]=12;temp=(z-2.602)*100;zs=(unsigned char)temp;xs=(unsigned char)((temp-zs)*10);dispbuf[ 1 ]=zs/100;dispbuf[ 2 ]=zs/10%10;dispbuf[ 3 ]=zs%10;dispbuf[ 4 ]=10;dispbuf[ 5 ]=xs;}{dispbuf[ 0 ]=11;temp=(2.602-z)*100;zs=(unsigned char)temp;xs=(unsigned char)((temp-zs)*100);dispbuf[ 3 ]=zs%10;dispbuf[ 2 ]=zs/10%10;dispbuf[ 1 ]=zs/100;dispbuf[ 4 ]=10;dispbuf[ 5 ]=xs/10;dispbuf[ 6 ]=xs%10;}}///////////////////////////////////////////////////////////////////main() //主函数{lcd_init();delay(10);ss=123;xx=3;f=1;TMOD=0x11;TL1=0xb0;TH1=0x3c;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR1=1;TR0=1;ET0=1;ET1=1;EA=1;IT0=1;EX0=1;while(1){xians();baojing();wdkz();{readadc1();zhuanhuan();f=0;}}}////////////////////////////////////////////////////////////////void t1(void) interrupt 3 using 0 //定时1 {TL1=0xb0;TH1=0x3c;d++;if(d==20){f=1;d=0;}}////////////////////////////////////////////////////////////////void X0(void) interrupt 0 //中断{delay(20);if(kw==0){a++;if(a==6)a=0;}}//////////////////////////////////////////////////////////////////void t0(void) interrupt 1 using 0 //定时0 {TH1=(65536-50000)/256;TL1=(65536-50000)%256;b++;if(b==15){b=0;miao++;{miao=0;fen++;if(fen>59){fen=0;shi++;if(shi>23){shi=0;}}}}}///完!!!!。

51单片机温度控制程序

51单片机温度控制程序

51单片机温度控制程序51单片机温度控制程序(续)功能说明: 本装置的功能是对温度进行实时监测与控制。

由温度传感器DS18B20对温度进行采样和转换成数字信号送入单片机,并与设定的报警温度上、下限值进行比较,信息通过LCD显示出来。

如实时温度超过设定的上、下限值,一方面由LC51单片机温度控制程序(续)功能说明:本装置的功能是对温度进行实时监测与控制。

由温度传感器DS18B20对温度进行采样和转换成数字信号送入单片机,并与设定的报警温度上、下限值进行比较,信息通过LCD显示出来。

如实时温度超过设定的上、下限值,一方面由LCD显示信息,并发出警报声;另一方面自动控制继电器(Relay)开接通或断开,从而控制加热源的开与断,达到对温度进行实时控制的目的。

程序:LCD2402.ASM01 ; ―――――――――――――――――――――――――――――――02 ; 温度值存放单元03 TEMP_ZH EQU 24H ;实时温度值存放单元04 TEMPL EQU 25H ;低温度值存放单元05 TEMPH EQU 26H ;高温度值存放单元06 TEMP_TH EQU 27H ;高温报警值存放单元07 TEMP_TL EQU 28H ;低温报警值存放单元08 TEMPHC EQU 29H ;存十位数BCD码09 TEMPLC EQU 2AH ;存个位数BCD码10 ;―――――――――――――11 按键输入引脚定义12 K1 EQU P2.113 K2 EQU P2.214 K3 EQU P2.315 K4 EQU P2.416 ;―――――――――――――17 SPK EQU P3.4 ;蜂鸣器引脚18 RELAY EQU P2.0 ;继电器引脚19 X EQU 2FH ;LCD 地址变量20 ;―――――――――――――21 ;LCD控制引脚22 RS EQU P3.523 RW EQU P3.624 E EQU P3.725 ;―――――――――――――26 FLAG EQU 20H.0 ;DS18B20是否存在标记27 KEY_UD EQU 20H.1 ;设定KEY 的UP与DOWN 标记28 DQ EQU P2.52930 ;=============主程序==============3132 MAIN:33 ACALL SET_LCD ;LCD初始化设置子程序34 ACALL WR_THL ;将报警上下线写入暂存寄存器子程序35 TOOP: ACALL RESET_1820 ;调用18B20复位子程序36 JNB FLAG,TOOP1 ;DS1820不存在转移TOOP1处37 ACALL MEU_OK ;调用显示"OK"信息子程序38 ACALL RE_THL ;把EEROM里温度报警值拷贝回暂存器39 ACALL TEMP_BJ ;显示温度标记"℃"40 JMP TOOP241 TOOP1: ACALL MEU_ERROR ;显示"ERROR"信息42 ACALL TEMP_BJ ;显示温度标记43 JMP $ ;等待44 ;――――――――――――――45 TOOP2:46 ACALL RE_TEMP ;调用读取温度数据子程序47 ACALL SET_DATA ;调用处理显示温度数据子程序48 ACALL TEMP_COMP ;实际温度值与标记温度值比较子程序49 ACALL P_KEY ;调用按键扫描子程序50 SJMP TOOP2 ;循环5152 ;--------―― 读取温度数据子程序--------――53 RE_TEMP:54 ACALL RESET_1820 ;18B20复位子程序55 JNB FLAG,TOOP1 ;DS1820不存在56 MOV A,#0CCH ;跳过ROM匹配57 ACALL WRITE_1820 ;写入子程序58 MOV A,#44H ;发出温度转换命令59 ACALL WRITE_1820 ;调写入子程序60 ACALL RESET_1820 ;调复位子程序61 MOV A,#0CCH ;跳过ROM匹配62 ACALL WRITE_1820 ;写入子程序63 MOV A,#0BEH ;发出读温度命令64 ACALL WRITE_1820 ;写入子程序65 ACALL READ_1820 ;调用读取子程序66 RET6768 ;--------温度数据处理显示子程序----------69 SET_DATA:70 ACALL CONV_TEMP ;处理温度BCD 码子程序71 ACALL DISP_BCD ;显示区BCD 码温度值刷新子程序72 ACALL CONV ;LCD显示子程序73 RET7475;-----------按键键扫描子程序----------76 P_KEY: ;按键K1处理77 JB K1, PK1 ;K1键未按,转到PK1处78 ACALL SPK_BZ ;K1键按下,一声鸣响79 JNB K1,$ ;等按键放开80 MOV DPTR,#M_ALAX1 ;存M_ALAX1表81 MOV A,#182 ACALL LCD_PRINT ;显示字符83 ACALL LOOK_ALARM ;显示信息区子程序84 JB K3, $ ;等待K3按下85 ACALL SPK_BZ ;一声鸣响86 JMP PK2 ;转到标号PK2处87 PK1: ; 按键K2处理88 JB K2, PK3 ;K2键未按,转到PK3处89 ACALL SPK_BZ ;K2键按下,一声鸣响90 JNB K2,$ ;等按键放开91 MOV DPTR, #TA1 ;存#TA1表92 MOV A,#193 ACALL LCD_PRINT ;显示字符94 ACALL SET_ALARM ;设定报警值TH、TL95 ACALL WR_THL ;将设定的TH,TL值写入DS18B20内96 ACALL WRITE_E2 ;调用报警值拷贝EEROM子程序97 PK2:98 ACALL MEU_OK ;显示"OK"信息子程序99 ACALL TEMP_BJ ;显示温度标记子程序100 PK3:101 RET102 ;―――――――――――――103 TA1: ;菜单表104 DB "RESET ALERT CODE"105 ;―――――――――――――106107 ;---------设定报警值TH、TL子程序--------108 SET_ALARM:109 ACALL LOOK_ALARM ;调用显示信息区子程序110 A0: JB K1,A2 ;按下K1(查看键),程序向下运行111 ACALL SPK_BZ ;蜂鸣器响一声112 JNB K1,$ ;等放开113 CPL 20H.1 ;UP/DOWN 标记反向114 A2: JB 20H.1,A3 ;20H.1=1,UP,转移到A3。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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灏*/原理图:实物图:。

相关文档
最新文档