基于单片机与PLC智能家居系统设计报告.docx
- 文档编号:29861586
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:16
- 大小:914.61KB
基于单片机与PLC智能家居系统设计报告.docx
《基于单片机与PLC智能家居系统设计报告.docx》由会员分享,可在线阅读,更多相关《基于单片机与PLC智能家居系统设计报告.docx(16页珍藏版)》请在冰豆网上搜索。
基于单片机与PLC智能家居系统设计报告
PLC课程设计
基于单片机与PLC智能家居系统设计与实现
一、课题设计目的:
1、家居控制的自动化,智能化;
2、此设计对于家居生活能达到省事又省心的目的;
3、进一步加深对PLC的熟练应用,并有效地与单片机结合运用。
二、课题所用主要元件及作用:
1、光敏电阻:
感测光照;
2、湿敏电阻:
感测湿度;
3、温度传感器18B20:
测量温度;
4、遥控器:
遥控窗帘、收衣杆等;
5、单片机:
采集并处理传感器数据,予PLC输入信号;
6、PLC:
控制家里的一些设备,这里主要用于控制窗户与收衣杆;
三、课题设计功能:
1、晚上自动把衣服收存起来,将窗户及窗帘关上<Y9>;
2、要是天气下雨,自动把衣服收存起来<Y9>;
3、白天自动把衣服晾出去<Y10>;
4、本系统可以遥控调式和自动调式;
5、温度的测试并由数码管显示,当温度高于上限或低于下限时,自动开启空调使室内温度达到一个合适的值。
四、课题设计的主要内容:
1、梯形图:
2、系统示意图:
3、原理图:
4、单片机程序:
单片机C主要程序程序:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};
ucharcodeword[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x20};
ucharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
ucharcodelight[2]={"G:
"},shui[3]={"S:
%"},tem[4]={"T:
.C"};
ucharcodemytab[8]={0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00};
uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};
uchardatatemp_data[2]={0x00,0x00};
uinttemp;
bitpresence;
uchara1,a2,a3;
sbitARDA=P1^0;
sbitARDB=P1^1;
sbitARDC=P1^2;
sbitEOC=P1^3;
sbitST=P1^4;
sbitOE=P1^5;
sbitCLK=P1^6;
sbitLCD_RS=P2^0;
sbitLCD_RW=P2^1;
sbitLCD_EN=P2^2;
sbitDQ=P2^3;
sbitjdq0=P2^4;
sbitjdq1=P2^5;
sbitjdq2=P2^6;
sbitbeep=P2^7;
voiddelayms(intms)
{
unsignedchary;
while(ms--)
{
for(y=0;y<250;y++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/*************************1602*****************************************/
bitlcd_busy()
{
bitresult;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
delayNOP();
result=(bit)(P0&0x80);
LCD_EN=0;
return(result);
}
voidlcd_wcmd(ucharcmd)
{
while(lcd_busy());
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
_nop_();
_nop_();
P0=cmd;
delayNOP();
LCD_EN=1;
delayNOP();
LCD_EN=0;
}
voidlcd_wdat(uchardat)
{
while(lcd_busy());
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
delayNOP();
LCD_EN=1;
delayNOP();
LCD_EN=0;
}
voidlcd_init()
{
delayms(15);
lcd_wcmd(0x01);
lcd_wcmd(0x38);
delayms(5);
lcd_wcmd(0x38);
delayms(5);
lcd_wcmd(0x38);
delayms(5);
lcd_wcmd(0x0c);
delayms(5);
lcd_wcmd(0x06);
delayms(5);
lcd_wcmd(0x01);
delayms(5);
}
voidlcd_pos(ucharpos)
{
lcd_wcmd(pos|0x80);
}
/*************************1602******************************************/
voidDelay(unsignedintnum)
{
while(--num);
}
/**********************ds18b20*********************************************/
Init_DS18B20(void)
{
DQ=1;
Delay(8);
DQ=0;
Delay(90);
DQ=1;
Delay(8);
presence=DQ;
Delay(100);
DQ=1;
return(presence);
}
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;
}
}
Read_Temperature(void)
{
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x44);
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0xBE);
temp_data[0]=ReadOneChar();
temp_data[1]=ReadOneChar();
}
/*自定义字符写入CGRAM*/
/*******************************************************************/
voidwritetab()
{
unsignedchari;
lcd_wcmd(0x40);//写CGRAM
for(i=0;i<8;i++)
lcd_wdat(mytab[i]);
}
Disp_Temperature()
{uchari,j;
display[4]=temp_data[0]&0x0f;
display[0]=ditab[display[4]]+0x30;
display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
display[3]=display[4]/100+0x30;
display[1]=display[4]%100;
i=display[1]/10;
j=display[1]%10;
display[2]=display[1]/10+0x30;
display[1]=display[1]%10+0x30;
if(display[3]==0x30)
{
display[3]=0x20;
if(display[2]==0x30)
display[2]=0x20;
}
lcd_pos(0x43);
lcd_wdat(tem[0]);
lcd_wdat(tem[1]);
lcd_wdat(display[3]);
lcd_wdat(display[2]);
lcd_wdat(display[1]);
lcd_wdat(tem[2]);
lcd_wdat(display[0]);
writetab();
delayms(5);
lcd_pos(0x4b);
lcd_wdat(0x00);
lcd_wdat(tem[3]);
if(i>=2&&j>5)
a1=1;
else
a1=0;
}
wendu()
{
Read_Temperature();
Disp_Temperature();
if(a1==1)
{jdq1=0;
beep=0;}
else
{jdq1=1;
beep=1;}
}
/****************************ds18b20***************************************/
/*****************************光照**************************************/
guangzhao()
{
uchari,shuzi[4];
uintj;
TR0=1;
ARDA=0;
ARDB=0;
ARDC=0;
ST=0;
ST=1;
ST=0;
while(EOC==0);
OE=1;
i=P3;
OE=0;
j=(255-i)*(3000/255);
shuzi[0]=j/1000;
shuzi[1]=j%1000/100;
shuzi[2]=j%100/10;
shuzi[3]=j%10;
if(shuzi[0]==0)
{shuzi[0]=10;
if(shuzi[1]==0)
{shuzi[1]=10;
if(shuzi[2]==0)
shuzi[2]=10;}
}
lcd_pos(0x00);
lcd_wdat(light[0]);
lcd_wdat(light[1]);
lcd_wdat(word[shuzi[0]]);
lcd_wdat(word[shuzi[1]]);
lcd_wdat(word[shuzi[2]]);
lcd_wdat(word[shuzi[3]]);
delayms(10);
if(j<=500)
a2=1;
else
a2=0;
}
/*************************光照******************************************/
/**************************湿度*****************************************/
shidu()
{
uchari,shuzi[3],m;
floatj;
ARDA=1;
ARDB=0;
ARDC=0;
ST=0;
ST=1;
ST=0;
while(EOC==0);
OE=1;
i=P3;
OE=0;
j=(255-i)/255.0*100;
m=(int)j;
shuzi[0]=m/100;
shuzi[1]=m%100/10;
shuzi[2]=m%10;
if(shuzi[0]==0)
{shuzi[0]=10;
if(shuzi[1]==0)
shuzi[1]=10;
}
lcd_pos(0x0a);
lcd_wdat(shui[0]);
lcd_wdat(shui[1]);
lcd_wdat(word[shuzi[0]]);
lcd_wdat(word[shuzi[1]]);
lcd_wdat(word[shuzi[2]]);
lcd_wdat(shui[2]);
delayms(10);
if(m>=50)
a3=1;
else
a3=0;
}
/**************************湿度*****************************************/
/***************主函数*********************/
voidmain()
{
TMOD=0x02;
TH0=0xfe;
TL0=0xfe;
ET0=1;
EA=1;
lcd_init();
while
(1)
{
guangzhao();
shidu();
TR0=0;
wendu();
if(a2||a3)
jdq0=0;
else
jdq0=1;
}
}
voidtimer0()interrupt1
{
TF0=0;
CLK=!
CLK;
}
5、实物图:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 PLC 智能家居 系统 设计 报告