智能照明控制系统源代码.docx
《智能照明控制系统源代码.docx》由会员分享,可在线阅读,更多相关《智能照明控制系统源代码.docx(30页珍藏版)》请在冰豆网上搜索。
智能照明控制系统源代码
附录4
软件设计源程序
题目教学楼智能照明控制系统软件设计
学生姓名李鑫
专业班级电子信息工程04级2
学号2
院(系)电气信息工程学院
指导教师曹祥红
完成时间2008年6月10日
1主机程序
#include
#include
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
voidmsec(uintx);
ucharrec_es(void);
voidsent_es(ucharschar);
sbitKEY_INT=P3^3;//键盘中断
sbitWARN=P3^4;//报警控制
uchardatakey_buf;//定义键值寄存器
ucharidataroom_disbuf[16]={"教室号:
000"};
ucharidataJSRS_disbuf[16]={"当前使用:
000"};
ucharidataGXDJ_disbuf[16]={"光线等级:
0"};
ucharidatatime_disbuf[16]={"00:
00:
00"};
ucharidataKDSJ_disbuf[16]={"00:
00"};
ucharidataGDSJ_disbuf[16]={"00:
00"};
uchardataZMKG;
uchardataroom_buf[3];
uchardatacou1,cou2;
longintdatacom1,com2,com3,com4;
bitbdataflag1,flag2;
ucharcodeZMK_disbuf[16]={"照明:
开"};
ucharcodeZMG_disbuf[16]={"照明:
关"};
main()
{msec(1000);//开机延时
//EN=0;//上电液晶屏禁能
EA=1;//开所有中断
ET0=1;//开定时器0
TMOD=0x21;//设置T1为方式2
TH1=0Xfa;//设置波特率为9600b/s
TL1=0Xfa;
TH0=0x3c;
TL0=0xb0;
SCON=0xd0;//设置串口位方式3
PCON=0X80;//波特率加倍
RI=0;
TI=0;
cou2=0;
flag2=0;
//========开机动态提示==========
LCD_Ini();//LCD初始化
WARN=0;//系统启动提示
msec(200);
WARN=1;
EX1=1;//开外部中断1
TR0=1;
TR1=1;//定时器1开始计数
//==============================
//====LCD初始化及开机提示=======
LCD_Wrhz(0,"郑州轻工业学院");//系统加载完毕界
LCD_Wrhz(16,"毕业设计");
LCD_Wrhz(8,"教学楼智能照明");
LCD_Wrhz(24,"控制系统");
KEY_INT=1;
while(KEY_INT);
key_buf=0;
while
(1)
{
LCD_Wrchar(0,"1.查看教室状态");//显示主菜单
LCD_Wrchar(16,"2.设置");
LCD_Wrchar(8,"3.控制");
LCD_Wrchar(24,"4.关于本系统");
msec(10);
if(flag2)
{sent_es(5);
msec(10);
sent_es(time_disbuf[0]);
msec
(2);
sent_es(time_disbuf[1]);
msec
(2);
sent_es(time_disbuf[3]);
msec
(2);
sent_es(time_disbuf[4]);
flag2=0;
}
if(key_buf==1)
{LCD_WrCommand(0x01);//清屏并归零地址计数器
msec
(1);
LCD_Wrchar(16,"输入教室号");
LCD_Wrchar(8,room_disbuf);
key_buf=0;
flag1=0;
while(key_buf!
=15)
{cou1=7;
while(key_buf!
=11&&key_buf!
=15)
{if(flag1&&key_buf!
=11&&key_buf!
=15)
{if(key_buf<10&&key_buf>0)
{room_disbuf[cou1]=key_buf+0x30;
room_buf[cou1-7]=key_buf;
}
if(key_buf==13)
{room_buf[cou1-7]=0;
room_disbuf[cou1]=0x30;
}
if(cou1==9)
cou1=7;
elsecou1++;
LCD_Wrchar(8,room_disbuf);
msec(50);
//key_buf=0;
flag1=0;
}
}
if(key_buf==11)
{sent_es
(1);//发读教室状态指令
msec(10);//等待从机判断
sent_es(room_buf[0]);//发送教室号
msec
(2);
sent_es(room_buf[1]);
msec
(2);
sent_es(room_buf[2]);
//msec(20);//等待从机判断教室号
com1=0;
while(com1<1000&&RI==0)
{com1++;
}
if(RI==1)
{
JSRS_disbuf[9]=rec_es()+0x30;
JSRS_disbuf[10]=rec_es()+0x30;
JSRS_disbuf[11]=rec_es()+0x30;
GXDJ_disbuf[9]=rec_es()+0x30;
ZMKG=rec_es();
LCD_WrCommand(0x01);//清屏并归零地址计数器
msec
(1);
LCD_Wrchar(0,room_disbuf);//显示主菜单
LCD_Wrchar(16,JSRS_disbuf);
LCD_Wrchar(8,GXDJ_disbuf);
if(ZMKG==1)
{LCD_Wrchar(24,"照明:
开");}
elseLCD_Wrchar(24,"照明:
关");
}
else
{LCD_WrCommand(0x01);//清屏并归零地址计数器
msec
(1);
LCD_Wrchar(0,"通信失败");//显示通信失败
LCD_Wrchar(16,"该从机不存在或者");
LCD_Wrchar(8,"连接故障");
}
while(key_buf!
=15);
}
}
}//选功能菜单1
if(key_buf==2)
{LCD_WrCommand(0x01);//清屏并归零地址计数器
msec
(1);
LCD_Wrchar(0,"1.当前时间设定");
LCD_Wrchar(16,"2.开灯时间设定");
LCD_Wrchar(8,"3.关灯时间设定");
key_buf=0;
while(key_buf!
=15&&key_buf!
=11)
{
if(key_buf==1)
{LCD_WrCommand(0x01);//清屏并归零地址计数器
msec
(1);
LCD_Wrchar(0,"时间设定");//显示通信失败
LCD_Wrchar(16,time_disbuf);
cou1=0;
key_buf=0;
flag1=0;
while(key_buf!
=11&&key_buf!
=15)
{if(flag1&&key_buf!
=11&&key_buf!
=15)
{if(key_buf<10&&key_buf>0)
{time_disbuf[cou1]=key_buf+0x30;
}
if(key_buf==13)
{
time_disbuf[cou1]=0x30;
}
if(cou1==4)
cou1=0;
elseif((cou1>=0&&cou1<1)||(cou1>=3&&cou1<4))
cou1++;
elseif(cou1==1)
cou1+=2;
LCD_Wrchar(16,time_disbuf);
msec(50);
//key_buf=0;
flag1=0;
}
if(key_buf==11)
{sent_es(5);
msec(10);
sent_es(time_disbuf[0]);
msec
(2);
sent_es(time_disbuf[1]);
msec
(2);
sent_es(time_disbuf[3]);
msec
(2);
sent_es(time_disbuf[4]);
flag2=0;
}
}
}//功能2子功能1
if(key_buf==2)
{LCD_WrCommand(0x01);//清屏并归零地址计数器
msec
(1);
LCD_Wrchar(0,"开灯时间设定");//显示通信失败
LCD_Wrchar(16,KDSJ_disbuf);
cou1=0;
key_buf=0;
flag1=0;
while(key_buf!
=11&&key_buf!
=15)
{if(flag1&&key_buf!
=11&&key_buf!
=15)
{if(key_buf<10&&key_buf>0)
{KDSJ_disbuf[cou1]=key_buf+0x30;
}
if(key_buf==13)
{
KDSJ_disbuf[cou1]=0x30;
}
if(cou1==4)
cou1=0;
elseif((cou1>=0&&cou1<1)||(cou1>=3&&cou1<4))
cou1++;
elseif(cou1==1)
cou1+=2;
LCD_Wrchar(16,KDSJ_disbuf);
msec(50);
//key_buf=0;
flag1=0;
}
}
}//功能2子功能2
if(key_buf==3)
{LCD_WrCommand(0x01);//清屏并归零地址计数器
msec
(1);
LCD_Wrchar(0,"关灯时间设定");//显示通信失败
LCD_Wrchar(16,GDSJ_disbuf);
cou1=0;
key_buf=0;
flag1=0;
while(key_buf!
=11&&key_buf!
=15)
{if(flag1&&key_buf!
=11&&key_buf!
=15)
{if(key_buf<10&&key_buf>0)
{GDSJ_disbuf[cou1]=key_buf+0x30;
}
if(key_buf==13)
{
GDSJ_disbuf[cou1]=0x30;
}
if(cou1==4)
cou1=0;
elseif((cou1>=0&&cou1<1)||(cou1>=3&&cou1<4))
cou1++;
elseif(cou1==1)
cou1+=2;
LCD_Wrchar(16,GDSJ_disbuf);
msec(50);
//key_buf=0;
flag1=0;
}
}
}//功能2子功能3
}
}//功能菜单2
if(key_buf==3)
{LCD_WrCommand(0x01);//清屏并归零地址计数器
msec
(1);
LCD_Wrchar(0,"1.允许照明");//显示通信失败
LCD_Wrchar(16,"2.照明关闭");
LCD_Wrchar(8,"3.所有分机复位");
key_buf=0;
while(key_buf!
=15)
{
if(key_buf==1)
{sent_es
(2);//发读教室状态指令
msec(10);//等待从机判断
LCD_WrCommand(0x01);//清屏并归零地址计数器
msec
(1);
LCD_Wrchar(0,"提示:
");//操作提示
LCD_Wrchar(16,"指令已发送");
LCD_Wrchar(8,"全局照明允许开");
while(key_buf!
=15);
key_buf=0;
}
if(key_buf==2)
{sent_es(3);//发读教室状态指令
msec(10);//等待从机判断
LCD_WrCommand(0x01);//清屏并归零地址计数器
msec
(1);
LCD_Wrchar(0,"提示:
");//操作提示
LCD_Wrchar(16,"指令已发送");
LCD_Wrchar(8,"全局照明允许关");
while(key_buf!
=15);
key_buf=0;
}
if(key_buf==3)
{sent_es(4);//发读教室状态指令
msec(10);//等待从机判断
LCD_WrCommand(0x01);//清屏并归零地址计数器
msec
(1);
LCD_Wrchar(0,"提示:
");//操作提示
LCD_Wrchar(16,"指令已发送");
LCD_Wrchar(8,"所有分机已复位");
while(key_buf!
=15);
key_buf=0;
}
}
}//功能菜单3
if(key_buf==4)
{LCD_WrCommand(0x01);//清屏并归零地址计数器
msec
(1);
LCD_Wrchar(0,"本系统为2008");//显示通信失败
LCD_Wrchar(16,"年郑州轻工业学院");
LCD_Wrchar(8,"毕业设计题目:
");
LCD_Wrchar(24,"教学楼智能照明控");
while(key_buf!
=15)
{if(key_buf==14)
{LCD_WrCommand(0x01);//清屏并归零地址计数器
msec
(1);
LCD_Wrchar(0,"本系统为2008");//显示通信失败
LCD_Wrchar(16,"年郑州轻工业学院");
LCD_Wrchar(8,"毕业设计题目:
");
LCD_Wrchar(24,"教学楼智能智能控");
key_buf=0;
}
if(key_buf==16)
{LCD_WrCommand(0x01);//清屏并归零地址计数器
msec
(1);
LCD_Wrchar(0,"制系统。
");//显示通信失败
LCD_Wrchar(16,"学生:
李鑫");
LCD_Wrchar(8,"");
LCD_Wrchar(24,"");
key_buf=0;
}
}
}//功能菜单4
if(key_buf==12)
{LCD_WrCommand(0x01);//清屏并归零地址计数器
msec
(1);
LCD_Wrchar(0,"当前时间:
");
key_buf=0;
while(key_buf==0)
{LCD_Wrchar(8,time_disbuf);
msec(10);
if(flag2)
{sent_es(5);
msec(10);
sent_es(time_disbuf[0]);
msec
(2);
sent_es(time_disbuf[1]);
msec
(2);
sent_es(time_disbuf[3]);
msec
(2);
sent_es(time_disbuf[4]);
flag2=0;
}
}
}//显示时间子功能
}
//===============================================================
key_buf=0;
}//main
//==================延时子程序====================
//说明:
函数传递的数值即延时时间,单位为ms
//创建日期:
2008.5.10
//入口参数:
X
//================================================
voidmsec(uintx)
{
unsignedchark;
while(x--)
{
for(k=0;k<125;k++);
}
}
//==========发送串行数据============
voidsent_es(ucharschar)
{
SBUF=schar;
while(TI==0&&key_buf!
=15);
TI=0;
}
//==================================
//===========接收串行数据===========
ucharrec_es(void)
{ucharrecnum;
while(RI==0&&key_buf!
=15);
recnum=SBUF;
RI=0;
returnrecnum;
}
//==================================
voidgetkey(void)interrupt2//取键值服务程序
{TR0=0;
EX1=0;
if(TR0==0)
{
key_buf=ZLG7290_GetKey();
}
WARN=0;
msec(10);
WARN=1;
EX1=1;
flag1=1;
TR0=1;
}
//==================================
voidtime0(void)interrupt1
{TH0=0x3c;
TL0=0xb0;
cou2++;
if(cou2==20)
{cou2=0;
if(time_disbuf[7]==0x39)
{time_disbuf[7]=0x30;
if(time_disbuf[6]==0x35)
{time_disbuf[6]=0x30;
if(time_disbuf[4]==0x39)
{time_disbuf[4]=0x30;
if(time_disbuf[3]==0x35)
{time_disbuf[3]=0x30;
if(time_disbuf[1]==0x39)
{time_disbuf[1]=0x30;
time_disbuf[0]++;
}
elseif(time_disbuf[1]==0x33&&time_disbuf[0]==0x32)
{time_disbuf[0]=0x30;
time_disbuf[1]=0x30;
}
elsetime_disbuf[1]++;
}
elsetime_disbuf[3]++;
}
elsetime_disbuf[4]++;
flag2=1;
com2=(time_disbuf[0]-0x30)*1000+(time_disbuf[1]-0x30)*100+(time_disbuf[3]-0x30)*10+time_disbuf[4]-0x30;com3=(KDSJ_disbuf[0]-0x30)*1000+(KDSJ_disbuf[1]-0x30)*100+(KDSJ_disbuf[3]-0x30)*10+KDSJ_disbuf[4]-0x30;com4=(GDSJ_disbuf[0]-0x30)*1000+(GDSJ_disbuf[1]-0x30)*100+(GDSJ_disbuf[3]-0x30)*10+GDSJ_disbuf[4]-0x30;
if(com2=com3)
{sent_es
(2);}
if(com2=com4)
{sent_es(3);}
}
elsetime_disbuf[6]++;
}
elsetime_disbuf[7]++;
}
}
2从机主程序
#include"reg52.h"
#include"math.h"
#include"VIIC_C51.h"
#defineucharunsignedchar
#defineuintunsignedint
voidled_scan(void);//函数声明段
voiddelay_ms(uintx);
voidkey_scan(void);
voidad_convert(ucharchannel);
voidpass_dis(uchar*dis);
voidsent_es(ucharschar);
ucharrec_es(void);
voidtime_dis(void);
sbitkeyin=P1^7;
sbitadc_flag=P3^2;
sbitbuzzer=P3^4;
sbitrelay=P3^5;
sbitHW1=P1^2;
sbitHW2=P1^3;
uchardatadis_buf[6]={0x14,0x14,0x14,0x14,0x14,0x14};//定义显示缓冲区
uchardatatime_buf[6]={0x19,0x17,0,0,0,0};//时间缓冲区
uchardatagx_buf[6]={0x20,0x17,0x17,0x17,0x17,0};//时间缓冲区
uchardatars_buf[6]={0x1b,0x18,0x17,0,0,0};//时间缓冲区
uchardataroom_buf[3];
uchardataJSRS;//教室人数
uchardataGXDJ;//光线等级
uchardatawink_con;//闪烁控制位
uchardatakey_buf;//定义键值缓冲区
ucharda