您的位置 首页 新能源

51单片机-温度控制器规划详解+电路+代码

这个51单片机电路里面,需要用到:AT89C51x1主要控制单片机AT24C02x1EEPROM-2K储存器DS180B2x1温度传感器10uFx1,47uF

这个51单片机电路里边,需求用到:

AT89C51 x1 首要操控单片机
AT24C02 x1 EEPROM-2K贮存器
DS180B2 x1温度传感器
10uF x1 , 47uF x1 有极电容
104[0.1uF] x3 , 30pF x2 无极电容
12MHz x1石英晶体振荡器
1K[1千欧姆] x2 电阻
7cmx9cm x1 全能洞洞电路板
继电器若干[根据需求用到的继电器数目安装到电路上,主控芯片规划能够操控八位继电器(整一个P1端口)]
总价如同12块左右吧,主张淘宝一下,不同的商家出售器材的价格不同..
Q1:EEPROM的效果
A1:因为EEPROM[电压式可擦写ROM]能够让单片机进行IIC读写外部贮存数据,也便利今后换一个操控电路温度值,单片机不可能每换一个操控温
度值的时分就从头对主控芯片进行编程..
Q2:为什么EEPROM要2K巨细呢?
A2:太大的贮存空间没有实质上的含义,最多运用的数据只用26位数据位,并且更大的贮存空间的EEPROM造价也贵,T24C02-DIP8[直插八个引
脚]需求0.8元左右,AT24C512-DIP8[数据存储空间512KB]需求17元左右..
Q3:主控芯片能够用其它的51系列替代吗?
A3:完全能够的,只需求在原代码文件中修正一下头文件就能够把程序移植到另一个类型的芯片,同理也能够把程序移植到AT89C2051中,
AT89C2051比AT89C51的一个优点便是C2051系列的芯片体积比C51系列的芯片小,能够把电路更小化,假设还要求电路更小化的话选用SOP封
装[贴片型封装]的电子元件是一个不错的挑选,不过太小的SOP元件焊接到电路上会另你很头疼,电路布局必定程度上也会影响电路板的全体大
小..
EEPROM贮存数据的办法解析:

下面是EEPROM里边的数据贮存结构[嘻嘻,图像得有点欠好,技术问题请见谅啦..]

首先从主控进口代码处进行剖析:

#define EEPROM_StartAddr 0x4E

#define EEPROM_StartFlag 0xB0

LED=1;

BitData=read_add(EEPROM_StartAddr);

if (BitData!=EEPROM_StartFlag) while(1);

ListTotal=read_add(EEPROM_StartAddr+1);

for(i=0;i

{

CtrlList[i].AlarmTemp=read_add((EEPROM_StartAddr+2)+i*3);

CtrlList[i].CtrlPort =read_add((EEPROM_StartAddr+2)+i*3+1);

}

LED=0;

代码首先会从EEPROM里边读取0x4E位里边的数据来和EEPROM初步数据位标志进行比照,判别这个EEPROM的数据格式的正确性,因为没有让

主控芯片对每一个数据位进行校验,那么这便是一个简略的验证办法,要是对每一位数据都要进行的验证的话得需求一个牢靠,高效的算法,这样虽

然安全,不过会对主控芯片初始化有必定的功能影响

判别初步数据位失利后,主控芯片会进入到卡死状况[见代码 while(1); ,死循环,处理器永久也跳不出这个循环到外面]

判别初步数据位成功后,下一步就从EEPROM的0x4F位读取出需求操控温度的项目总数,然后再依照这个项目总数来进行数据位偏移来读取即将

操控的温度数值和警报操控端口,留意两个操控数据结构中心需求用一个NULL[即0x00]来隔开来,避免数据结构被打乱

从EEPROM里边读取完结数据后,主控芯片作业指示灯发光,初步进入温度操控

首要代码:

while(1)

{

TempData=get_temp();

BitData=(TempData%1000/100)*10;//十位温度。

BitData=(TempData%1000%100/10)+BitData;//个位温度。

for(i=0;i

{

CtrlElec=(CtrlList[i].AlarmTemp>=BitData)?0:1;

CtrlListPort=CtrlList[i].CtrlPort;

CtrlPort(CtrlListPort,CtrlElec); //契合条件输出底电,不契合输出高电

delayb(100);

}

delayb(200);

}

这个可不像SetTimer()相同,用SetTimer()指定了的函数不需求加上while 循环,仅且把上面的代码当作线程来看待,让这个线程运转的代码段永久

都是这个,假设线程的代码一旦履行结束[也便是说跳出了while 死循环],那么它就会封闭掉自己和开释归于自己的TLS[线程本地贮存]

先从DS18B02里边读取出来温度值,然后再对温度进行转化,把转化好的温度再和从EEPROM里边读取出来的数据结构进行比较

一个温度操控判别周期约一秒[以12MHz来核算的话,应该是略大于一秒而不会小于一秒]..

下面是温度操控器的电路:

5V供电电路:

主控芯片及外围器材电路:

电路顶用继电器来操控外部电路的开闭,G[公共端] B[常闭端] K[常初步] 便是让继电器操控外部电路的开关,5V电压和P1^0端口是用来操控继电器的G端和B,K端通路.原理如下

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/xinnengyuan/317230.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部