基于单片机的家用热水器控制器设计毕业设计论文.docx
《基于单片机的家用热水器控制器设计毕业设计论文.docx》由会员分享,可在线阅读,更多相关《基于单片机的家用热水器控制器设计毕业设计论文.docx(13页珍藏版)》请在冰豆网上搜索。
基于单片机的家用热水器控制器设计毕业设计论文
优秀论文审核通过
未经允许切勿外传
摘要
我的毕业设计题目是:
基于单片机的家用热水器控制器的设计。
目前热水器已成为日常生活中不可缺少的家用电器,设计制造更实用、更方便、更安全、更节能的热水器是产品设计师和生产厂商不断追求的目标[1]。
家用热水器具有体积小、使用安全、安装方便等优点。
系统硬件电路设计包括加热控制、温度检测等电路的设计。
电热水器是一种可供洗手间、厨房、浴室使用的家用电器,具有无污染、安全、保温时间长、使用方便等优点。
随着人民生活水平的不断提高和我国电力工业的不断发展,电热水器得到不断普及。
本文给出了一种基于51单片机实现的热水器电加热器的设计方案。
本文运用以AT89S51为控制核心的方法,提出了利用DS18B20来实现温度检测,并设计一个由继电器控制的电路,利用继电器来改变小电流控制的电路功率,构建了一个加热控制电路,从而得出了可以实现加热以及保温的结论。
关键字:
热水器,单片机,DS18B20温度检测器,继电器
Micro-controllerofwater
Abstract
Mygraduationprojecttopicis:
thedesignofmicrocontroller-basedthedailylifeofandmanufactureofmorepractical,moreconvenient,safer,moreenergy-efficientwaterincludingcircuitdesign.Electricwateravailabletoilet,kitchen,bathroomand,safe,longthispaper,basedon51single-chipdesignoftheauxiliarythispaper,AT89S51asthecontrolcore,DS18B20temperaturedetection,andtodesignarelaycontrolcircuit,usetherelaytochangethesmall-currentcontrolcircuitpowertobuildaordertogetconclusionofwaterbeachievedandthekeepingoftemperature..
Keywords:
Water&Instrumentation,2010(7):
24-27
[10]李章勇,官方勇.太阳能热水器智能控制器研制[J].2008年家用自动控制器技术国际研讨会,2008(11):
[11]苗红蕾.一款新型的智能家用电热水器[J].邢台职业技术学院学报,2005(11):
60-63
[12]郁玉龙,赵宁卢,洪武.用AT89C51单片机设计智能家用电热水器[J].实用电子制作,2007(10):
33-35
[13]蔡满军,吴磊.智能温度控制器的设计[J].自动化仪表,2010(10):
68-75
[14]HuangDinpjin,FeiHan,LiLiang,ZhuYunzhou.DesignforN+IFault-tolerantIntegratedSolarController[J].Automation&Instrumentation,2010(10):
[15]SurachaiPanich.DevelopmentofFuzzyControllerforWaterLevelinStreamBoilerTank[J].JournalofComputerScience,2010(11):
附录一原理图
附录二PCB图
、
附录三仿真图
附录四程序
*头文件*
#includebitflag=0;
sbitp15=P1^5;
sbitp16=P1^6;
sbitp30=P3^0;
sbitp31=P3^1;
sbitk0=P1^0;
sbitk1=P1^1;
sbitk2=P1^2;
sbitk3=P1^3;
uchartable1[]="chenbeibei";
uchartable2[]="TEMP:
00.0C";
uchartable3[]="SETTEMP:
";
uchartable4[]="H:
60CL:
40C";
uchartable[];
ucharH=60,L=40;
*1MS为单位的延时程序*
voiddelay_1ms(uintx)
{
ucharj;
while(x--){
for(j=0;j<125;j++)
{;}
}
}
*1602函数*
voidwrite_com(uintcom)
{
lcdrs=0;
rw=0;
P0=com;
delay_1ms
(1);
lcden=1;
delay_1ms
(1);
lcden=0;
}
voidwrite_date(uintdate)
{
lcdrs=1;
rw=0;
P0=date;
delay_1ms
(1);
lcden=1;
delay_1ms
(1);
lcden=0;
}
voidlcd_init()
{
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
}
voidset(ucharadd,uchardat)
{
ucharshi,ge;
shi=dat10;
ge=dat%10;
write_com(0x80+0x40+add);
write_date(0x30+shi);
write_date(0x30+ge);
}
延时函数
voiddelay(unsignedinti)
{
while(i--);
}
voidkeyscan()
{
uchari,j;
write_com(0x80);
for(i=0;i<16;i++)
{
write_date(table3[i]);
delay_1ms
(2);
}
write_com(0x80+0x40);
for(i=0;i<16;i++)
{
write_date(table4[i]);
delay_1ms
(2);
}
while
(1)
{
if(k0==0)
{
delay_1ms
(2);
if(k0==0)
{
while(!
k0);
while
(1)
{
if(k0==0)
{
delay_1ms
(2);
if(k0==0)
{
j++;
}
while(!
k0);
}
if((j%2)==0)
{
if(k1==0)
{
delay_1ms
(2);
if(k1==0)
{
H++;
}
while(!
k1);
}
if(k2==0)
{
delay_1ms
(2);
if(k2==0)
{
H--;
}
while(!
k2);
}
}
if((j%2)==1)
{
if(k1==0)
{
delay_1ms
(2);
if(k1==0)
{
L++;
}
while(!
k1);
}
if(k2==0)
{
delay_1ms
(2);
if(k2==0)
{
L--;
}
while(!
k2);
}
}
set(2,H);
set(12,L);
if(k3==0)
{
delay_1ms
(2);
if(k3==0)
{
gotoreti;
}
while(!
k3);
}
}
}
}
}
reti:
;
}
初始化函数
Init_DS18B20(void)
{
unsignedcharx=0;
DQ=1;DQ复位
delay(8);稍做延时
DQ=0;单片机将DQ拉低
delay(80);精确延时大于480us
DQ=1;拉高总线
delay(14);
x=DQ;稍做延时后如果x=0则初始化成功x=1则初始化失败
delay(20);
}
读一个字节
ReadOneChar(void)
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--){
DQ=0;给脉冲信号
dat>>=1;
DQ=1;给脉冲信号
if(DQ)dat|=0x80;
delay(4);
}
return(dat);
}
写一个字节
WriteOneChar(unsignedchardat)
{
unsignedchari=0;
for(i=8;i>0;i--){
DQ=0;
DQ=dat&0x01;
delay(5);
DQ=1;
dat>>=1;
}
}
读取温度
ReadTemperature(void)
{
unsignedchara=0;
unsignedcharb=0;
unsignedintt=0;
floattt=0;
Init_DS18B20();
WriteOneChar(0xCC);跳过读序号列号的操作
WriteOneChar(0x44);启动温度转换
Init_DS18B20();
WriteOneChar(0xCC);跳过读序号列号的操作
WriteOneChar(0xBE);读取温度寄存器等(共可读9个寄存器)前两个就是温度
a=ReadOneChar();
b=ReadOneChar();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;将温度的高位与低位合并
t=tt*10+0.5;对结果进行4舍5入
return(t);
}
voidwrite_sfm(ucharadd,uintdate)
{
ucharbai,shi,ge,dat;
dat=date10;
bai=date100;
shi=date%10010;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+bai);
write_date(0x30+shi);
write_com(0x80+0x40+3+add);
write_date(0x30+ge);
if(L{
p15=1;
p16=1;
p30=0;
p31=0;
}
if(dat>H)
{
p15=0;
p30=1;
p31=0;
}
if(dat{
p16=0;
p30=0;
p31=1;
}
}
voidmain()
{
uinttemp_buff;
uchari;
p15=1;
p16=1;
p30=0;
p31=0;
lcd_init();
Init_DS18B20();
keyscan();
write_com(0x80);
for(i=0;i<16;i++)
{
write_date(table1[i]);
delay_1ms
(2);
}
write_com(0x80+0x40);
for(i=0;i<16;i++)
{
write_date(table2[i]);
delay_1ms
(2);
}
while
(1)
{
temp_buff=ReadTemperature();*读取当前温度*
write_sfm(7,temp_buff);
delay_1ms(500);
}
}