单片机温度控制系统的设计Word文档下载推荐.docx

上传人:b****4 文档编号:6843251 上传时间:2023-05-07 格式:DOCX 页数:45 大小:149.97KB
下载 相关 举报
单片机温度控制系统的设计Word文档下载推荐.docx_第1页
第1页 / 共45页
单片机温度控制系统的设计Word文档下载推荐.docx_第2页
第2页 / 共45页
单片机温度控制系统的设计Word文档下载推荐.docx_第3页
第3页 / 共45页
单片机温度控制系统的设计Word文档下载推荐.docx_第4页
第4页 / 共45页
单片机温度控制系统的设计Word文档下载推荐.docx_第5页
第5页 / 共45页
单片机温度控制系统的设计Word文档下载推荐.docx_第6页
第6页 / 共45页
单片机温度控制系统的设计Word文档下载推荐.docx_第7页
第7页 / 共45页
单片机温度控制系统的设计Word文档下载推荐.docx_第8页
第8页 / 共45页
单片机温度控制系统的设计Word文档下载推荐.docx_第9页
第9页 / 共45页
单片机温度控制系统的设计Word文档下载推荐.docx_第10页
第10页 / 共45页
单片机温度控制系统的设计Word文档下载推荐.docx_第11页
第11页 / 共45页
单片机温度控制系统的设计Word文档下载推荐.docx_第12页
第12页 / 共45页
单片机温度控制系统的设计Word文档下载推荐.docx_第13页
第13页 / 共45页
单片机温度控制系统的设计Word文档下载推荐.docx_第14页
第14页 / 共45页
单片机温度控制系统的设计Word文档下载推荐.docx_第15页
第15页 / 共45页
单片机温度控制系统的设计Word文档下载推荐.docx_第16页
第16页 / 共45页
单片机温度控制系统的设计Word文档下载推荐.docx_第17页
第17页 / 共45页
单片机温度控制系统的设计Word文档下载推荐.docx_第18页
第18页 / 共45页
单片机温度控制系统的设计Word文档下载推荐.docx_第19页
第19页 / 共45页
单片机温度控制系统的设计Word文档下载推荐.docx_第20页
第20页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机温度控制系统的设计Word文档下载推荐.docx

《单片机温度控制系统的设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机温度控制系统的设计Word文档下载推荐.docx(45页珍藏版)》请在冰点文库上搜索。

单片机温度控制系统的设计Word文档下载推荐.docx

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电阻充电

//写保护控制字,禁止写

/**************

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2