单片机温度控制系统的设计Word文档下载推荐.docx
《单片机温度控制系统的设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机温度控制系统的设计Word文档下载推荐.docx(45页珍藏版)》请在冰点文库上搜索。
AT89C51LED单片机
ABSTRACT
SCMhasbecomeincreasinglywideapplicationintheelectronicproducts,alsousedinmanyelectronicproductstothetemperaturedetectionandcontrol.Thescopeofapplicationofincreasinglywideandvariedwithtemperaturecontrollers,variousarisesatthehistoricmomentofintelligenttemperaturecontrollerissuitablefordifferentoccasions.MCUapplicationthereisagrowing,atthesametime,drivetraditionalcontroltesttechnologyisbecomingmoreandmoreupdates.Inreal-timedetectionandautomaticcontrolofmicrocomputerapplicationsystem,thesinglechipmicrocomputeroftenasacorecomponenttouse,onlysinglechipmicrocomputeraspectsknowledgeisnotenough,stillshouldaccordingtothespecificcombinationofhardwareandsoftware,thehardwarestructure,perfected.The51single-chipmicrocomputeristhesinglechipmicrocomputeristhemosttypicalandmostrepresentativeone.ThissystemisdesignedbasedontheMCS51seriessinglechipmicrocomputer,canrealizethekeyboardkeysanddigitaldynamicdisplayandcandisplaythereal-timetemperature.Principlesofthissystembasedonsinglechipmicrocomputertechnologyandsingle-chipmicrocomputerAT89C51asthecorecontroller,throughtheproductionofhardwarecircuitandsoftwareprogramcompiled,designtoproduceatemperaturecontrolsystem,includingthefollowingfunctions:
1cansettheneedtocontroltemperature;
2detecttheactualtemperature;
3candisplaysettemperatureandrealtemperature;
4compareactualtemperatureandsettemperature,determinewhethertostarttheheatingdevice;
ThetemperaturesystemmainlyincludeLCDdisplaymodule,LEDstatuslightmodule,keyboardmodule,temperaturedetectionmodule,resetthemodulecomponents.
KeyWords:
frequencymodulatedtransmitter;
crystaloscillator;
outputfilter.
1设计要求及方案选择
1.1设计要求
(1)制作完成简易的电子时钟,时间可调整。
(2)有闹钟功能。
(3)利用数码管或者液晶显示器显示时间(XX-XX-XX由左向右分别为:
时、分、秒,且每秒更新一次)。
(4)设计电路
(5)在KEIL中编辑、编译、调试程序,并在protuse中仿真。
扩展部分(选作)
(1)显示年月日;
(2)声音播报时间;
(3)有温度显示;
(4)其它
1.2方案选择
本系统由51系列单片机AT89S52、按键、时钟、液晶显示和外围降温、加热电路等部分构成。
对温度进行实时采集并通过程序设定最高温度、最低温度。
采集到的实时温度通过串口向单片机进行传输,最后将测得的结果发送到液晶1602显示出来。
该系统对所测得的温度值进行分析,当温度高于或者低于设定的温度限时自动报警,并驱动相应的降温或加热设备,以达到对温度智能控制,从而使环境温度维持在设定的有利温度范围内。
系统总体结构图如图
2理论分析与设计
2.1温度测量电路的分析及设计
DS18B20通过P3.3口和AT89S52进行通讯。
GND为接地线,Q为数据输入输出接口,通过一个较弱的上拉电阻与单片机相连。
VCC为电源接口,既可由数据线提供电源,又可由外部提供电源,范围3.O~5.5V。
其接口电路如图
图4-2
2.2 时钟电路的分析及设计
利用DS1320芯片完成实时时钟的读取和设置,能实现对年、月、日、星期、时、分、秒进行记时,具有闰年补偿功能。
其工作电压为2.5伏到5.5伏,采用三线接口与CPU进行同步通信,并可采用突发方式一次传递多个字节的时钟信号或RAM数据。
3 电路设计
3.1硬件电路的设计
3.2 软件的设计
#include<
reg51.h>
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineLCD_DATA1//Data
sbitLCD_RS=P2^0;
sbitLCD_RW=P2^1;
sbitLCD_EN=P2^2;
sbitLCD_LED=P2^6;
sbitK1=P1^4;
sbitK2=P1^5;
sbitK3=P1^6;
sbitK4=P1^7;
sbitreset=P1^2;
sbitsclk=P1^0;
sbitio=P1^1;
sbitDQ=P3^3;
sbitBEEP=P3^7;
sbitJDQ1=P2^3;
//驱动电动机(0表示接通,1表示关闭)
bitflag=1,hour=0,min=0,sec=0;
bityear=0,month=0,day=0,week=0;
bitalarm_flag=0;
sfrDBPort=0x80;
//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口
uchartimecount=0,count=0;
uchartemp_value;
//温度值
uchardigital;
ucharTempBuffer[7];
unsignedcharfrq;
ucharstr1[]="
--Week:
"
;
ucharstr2[]="
ucharstr3[]="
Alarm:
ucharinit[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};
//
ucharinit1[]={0x00,0x00};
ucharinit2[]={0x00,0x59,0x23,0x11,0x06,0x03,0x08};
//秒,分,时,日,月,星期,年
ucharbj_time[]={0x00,0x00,0x00};
//秒,分,时
ucharcodemytab[8]={0x01,0x1b,0x1d,0x19,0x1d,0x1b,0x01,0x00};
//小喇叭
#definedelayNOP();
{_nop_();
_nop_();
};
voidSet_W1302(ucharaddr);
voidSet_Flash(ucharrow,ucharcol);
voidSet_place(ucharrow,ucharcol);
voidPlay_nowtime();
voidkey_set(ucharnum,ucharrow,ucharcol);
voidkey_set_1(ucharnum,ucharrow,ucharcol);
voidalarm_time();
voidPlay_alarmtime();
voidTime_compare();
voidInit_DS18B20(void);
unsignedcharReadOneChar(void);
voidWriteOneChar(uchardat);
voidReadTemp(void);
voidtemp_to_str(void);
voidPrint(unsignedchar*str);
voidLCD_Write(bitstyle,unsignedcharinput);
unsignedcharLCD_Wait(void);
voidRead_DS18B20(void);
voidspeak(void);
voiddelayms(unsignedcharms);
voidbeep_temp();
voiddianji(void);
voiddelay1(intms)
{
unsignedchary;
while(ms--)
{
for(y=0;
y<
250;
y++)
_nop_();
}
}
/******************************************************************/
/**/
/*检查LCD忙状态*/
/*lcd_busy为1时,忙,等待。
lcd-busy为0时,闲,可写指令与数据。
*/
/******************************************************************/
bitlcd_busy()
{
bitresult;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
delayNOP();
result=(bit)(P0&
0x80);
LCD_EN=0;
return(result);
/*********************************************************/
/*写指令数据到LCD*/
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。
voidlcd_wcmd(ucharcmd)
{
while(lcd_busy());
LCD_RW=0;
P0=cmd;
/*写显示数据到LCD*/
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。
voidlcd_wdat(uchardat)
LCD_RS=1;
P0=dat;
/*LCD初始化设定*/
voidinit_lcd()
delay1(15);
lcd_wcmd(0x01);
//清除LCD的显示内容
lcd_wcmd(0x38);
//16*2显示,5*7点阵,8位数据
delay1(5);
lcd_wcmd(0x0c);
//显示开,关光标
lcd_wcmd(0x06);
//移动光标
//
voiddelay()
ucharj;
for(j=250;
j>
0;
j--);
/*写字符串函数*/
voidwrite_str(ucharaddr,uchar*p)
uchari=0;
lcd_wcmd(addr);
while(p[i]!
='
\0'
)
lcd_wdat(p[i]);
i++;
/*设定显示位置*/
voidwrite_position(ucharrow,ucharcol)
ucharplace;
if(row==1)
place=0x80+col-1;
lcd_wcmd(place);
else
place=0xc0+col-1;
/*自定义字符写入CGRAM*/
voidwritetab()
unsignedchari;
lcd_wcmd(0x40);
//写CGRAM
for(i=0;
i<
8;
i++)
lcd_wdat(mytab[i]);
/**********************************************************/
//
voidwrite_byte(ucharinbyte)
uchari;
for(i=0;
i<
8;
i++)
sclk=0;
//写的时候低电平改变数据
if(inbyte&
0x01)
io=1;
io=0;
sclk=1;
//写的时候高电平,把数据写入ds1302
inbyte=inbyte>
1;
ucharread_byte()//sclk的下跳沿读数据
uchari,temp=0;
//设置为输入口
7;
if(io==1)
temp=temp|0x80;
temp=temp&
0x7f;
sclk=1;
//产生下跳沿
temp=temp>
return(temp);
//往ds1302的某个地址写入数据
voidwrite_ds1302(ucharcmd,ucharindata)
reset=1;
write_byte(cmd);
write_byte(indata);
reset=0;
//读ds1302某地址的的数据
ucharread_ds1302(ucharaddr)
ucharbackdata;
write_byte(addr);
//先写地址
backdata=read_byte();
//然后读数据
return(backdata);
//设置初始时间
voidset_ds1302(ucharaddr,uchar*p,ucharn)//写入n个数据
write_ds1302(0x8e,0x00);
//写控制字,允许写操作
for(;
n>
n--)
write_ds1302(addr,*p);
p++;
addr=addr+2;
write_ds1302(0x8e,0x80);
//写保护,不允许写
//读取当前时间
voidread_nowtime(ucharaddr,uchar*p,ucharn)
*p=read_ds1302(addr);
}
//初始化DS1302
voidinit_ds1302()
write_ds1302(0x80,0x00);
write_ds1302(0x90,0xa6);
//一个二极管+4K电阻充电
//写保护控制字,禁止写
/**************