




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
附录4软件设计源程序 题 目 教学楼智能照明控制系统软件设计学生姓名 李鑫 专业班级 电子信息工程04级2 学 号 2 院 (系) 电气信息工程学院 指导教师 曹祥红 完成时间 2008年 6月 10 日 1主机程序#include #include #include #include #include #define uchar unsigned char#define uint unsigned intvoid msec(uint x);uchar rec_es(void);void sent_es(uchar schar);sbit KEY_INT = P33; /键盘中断sbit WARN = P34; /报警控制uchar data key_buf; /定义键值寄存器uchar idata room_disbuf16=教室号:000 ;uchar idata JSRS_disbuf16=当前使用:000 ;uchar idata GXDJ_disbuf16=光线等级:0 ;uchar idata time_disbuf16=00:00:00 ;uchar idata KDSJ_disbuf16=00:00 ;uchar idata GDSJ_disbuf16=00:00 ;uchar data ZMKG;uchar data room_buf3;uchar data cou1,cou2;long int data com1,com2,com3,com4;bit bdata flag1,flag2;uchar code ZMK_disbuf16=照明: 开 ;uchar code ZMG_disbuf16=照明: 关 ;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_disbuf0); msec(2); sent_es(time_disbuf1); msec(2); sent_es(time_disbuf3); msec(2); sent_es(time_disbuf4); 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_buf0) room_disbufcou1=key_buf+0x30; room_bufcou1-7=key_buf; if(key_buf=13) room_bufcou1-7=0; room_disbufcou1=0x30; if(cou1=9) cou1=7; else cou1+; LCD_Wrchar(8,room_disbuf); msec(50); /key_buf=0; flag1=0; if(key_buf=11) sent_es(1);/发读教室状态指令 msec(10);/等待从机判断 sent_es(room_buf0);/发送教室号 msec(2); sent_es(room_buf1); msec(2); sent_es(room_buf2); / msec(20);/等待从机判断教室号 com1=0; while(com11000&RI=0) com1+; if(RI=1) JSRS_disbuf9=rec_es()+0x30; JSRS_disbuf10=rec_es()+0x30; JSRS_disbuf11=rec_es()+0x30; GXDJ_disbuf9=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,照明: 开 ); else LCD_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_buf0) time_disbufcou1=key_buf+0x30; if(key_buf=13) time_disbufcou1=0x30; if(cou1=4) cou1=0; else if(cou1=0&cou1=3&cou14) cou1+; else if(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_disbuf0); msec(2); sent_es(time_disbuf1); msec(2); sent_es(time_disbuf3); msec(2); sent_es(time_disbuf4); 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_buf0) KDSJ_disbufcou1=key_buf+0x30; if(key_buf=13) KDSJ_disbufcou1=0x30; if(cou1=4) cou1=0; else if(cou1=0&cou1=3&cou14) cou1+; else if(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_buf0) GDSJ_disbufcou1=key_buf+0x30; if(key_buf=13) GDSJ_disbufcou1=0x30; if(cou1=4) cou1=0; else if(cou1=0&cou1=3&cou14) cou1+; else if(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_disbuf0); msec(2); sent_es(time_disbuf1); msec(2); sent_es(time_disbuf3); msec(2); sent_es(time_disbuf4); flag2=0; /显示时间子功能 /= key_buf=0; /main /=延时子程序=/说明:函数传递的数值即延时时间,单位为ms/创建日期:2008.5.10/入口参数:X/=void msec(uint x) unsigned char k; while(x-) for(k=0;k125;k+); /=发送串行数据=void sent_es(uchar schar)SBUF=schar;while(TI=0&key_buf!=15);TI=0;/=/=接收串行数据=uchar rec_es(void) uchar recnum; while(RI=0&key_buf!=15); recnum=SBUF; RI=0; return recnum; /=void getkey(void)interrupt 2 /取键值服务程序 TR0=0; EX1=0; if(TR0=0) key_buf=ZLG7290_GetKey(); WARN=0; msec(10); WARN=1; EX1=1; flag1=1; TR0=1; /=void time0(void)interrupt 1TH0=0x3c; TL0=0xb0; cou2+; if(cou2=20) cou2=0; if(time_disbuf7=0x39) time_disbuf7=0x30; if(time_disbuf6=0x35) time_disbuf6=0x30; if(time_disbuf4=0x39) time_disbuf4=0x30; if(time_disbuf3=0x35) time_disbuf3=0x30; if(time_disbuf1=0x39) time_disbuf1=0x30; time_disbuf0+; else if(time_disbuf1=0x33&time_disbuf0=0x32) time_disbuf0=0x30; time_disbuf1=0x30; else time_disbuf1+; else time_disbuf3+; else time_disbuf4+; flag2=1; com2=(time_disbuf0-0x30)*1000+(time_disbuf1-0x30)*100+(time_disbuf3-0x30)*10+time_disbuf4-0x30; com3=(KDSJ_disbuf0-0x30)*1000+(KDSJ_disbuf1-0x30)*100+(KDSJ_disbuf3-0x30)*10+KDSJ_disbuf4-0x30; com4=(GDSJ_disbuf0-0x30)*1000+(GDSJ_disbuf1-0x30)*100+(GDSJ_disbuf3-0x30)*10+GDSJ_disbuf4-0x30; if(com2=com3) sent_es(2); if(com2=com4) sent_es(3); else time_disbuf6+; else time_disbuf7+; 2从机主程序#include reg52.h#include math.h#includeVIIC_C51.h#define uchar unsigned char#define uint unsigned intvoid led_scan(void);/函数声明段void delay_ms(uint x);void key_scan(void);void ad_convert(uchar channel);void pass_dis(uchar *dis);void sent_es(uchar schar);uchar rec_es(void);void time_dis(void);sbit keyin=P17;sbit adc_flag=P32;sbit buzzer=P34;sbit relay=P35;sbit HW1=P12;sbit HW2=P13;uchar data dis_buf6=0x14,0x14,0x14,0x14,0x14,0x14;/定义显示缓冲区uchar data time_buf6=0x19,0x17,0,0,0,0;/时间缓冲区uchar data gx_buf6=0x20,0x17,0x17,0x17,0x17,0;/时间缓冲区uchar data rs_buf6=0x1b,0x18,0x17,0,0,0;/时间缓冲区uchar data room_buf3;uchar data JSRS;/教室人数uchar data GXDJ;/光线等级uchar data wink_con;/闪烁控制位uchar data key_buf;/定义键值缓冲区uchar data wink_speed;/闪烁速度,值越小闪烁速度越快uchar data wink_spbuf;uchar data GXJC_cou;/光线检测定时uchar data key_cou;/键盘扫描定时unsigned long data CSXS_cou;/参数显示定时unsigned long data QZKD_cou;/强制开灯时间uchar data menu_num;/菜单号uchar data es_buf;/通用变量bit bdata ZMKG;/照明开关bit bdata KDYX;/开灯允许标志bit bdata off_flag,key;/开关标志位uchar data adc_buf;/AD转换值缓冲uchar code class_number6=0x0c,0x21,0x17,0x06,0x00,0x05;/教室号uchar code l_on6=0x13,0x17,0x17,0x17,0,0x21;uchar code l_off6=0x13,0x17,0x17,0,0x0f,0x0f;uchar code dis_code= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,/ 0 1 2 3 4 5/ 00H 01H 02H 03H 04H 05H 0x82,0xf8,0x80,0x90,0x88,0x83,/ 6 7 8 9 A b/ 7DH 07H 08H 09H 0AH 0BH 0xc6,0xa1,0x86,0x8e,0x8c,0xc1,/ C D E F P U/ 0CH 0DH 0EH 0FH 10H 11H 0x89,0xc7,0xbf,0x91,0x00,0xff,/ H L - y ON OFF/ 12H 13H 14H 15H 16H 17H 0x92,0xce,0x8b,0xaf,0xa3,0xa1,/ S T h r o d/ 18H 19H 1AH 1BH 1CH 1DH 0xf0,0x87,0xc2,0xc8,0xa3,0xa1;/ S t G N o d/ 1EH 1FH 20H 21H 22H 23H void main(void) start: GXJC_cou=100; QZKD_cou=0; KDYX=1; key_cou=12; key_buf=0; menu_num=0; ZMKG=1;/上电关的灯 buzzer=1; delay_ms(400);/开机延时200MS/=初始化定时器= TMOD=0x21;/定时器0工作在方式1,定时器1为方式2 EA=1;/开总中断 ET0=1;/开定时器0 TH0=0xec; TL0=0x78; TR0=1;/开定时器0/=配置串口= TH1=0Xfa;/设置波特率为9600b/s TL1=0Xfa; SCON=0xd0;/设置串口位方式3 PCON=0X80;/波特率加倍 RI=0; TI=0; /=/=闪烁控制= wink_spbuf=25; wink_speed=wink_spbuf; wink_con=0xFF;/= delay_ms(500); pass_dis(class_number); delay_ms(500);/显示初始化 pass_dis(rs_buf); delay_ms(500); pass_dis(gx_buf); delay_ms(500); pass_dis(l_off); delay_ms(500); pass_dis(time_buf); delay_ms(500); TR1=1;/定时器1开始计数 while(1) if(HW1=0)&(key_buf=0)/有人进入检测 while(HW1=0)&(key_buf=0)&(RI=0); while(HW2=1)&(key_buf=0)&(RI=0); while(HW2=0)&(key_buf=0)&(RI=0); if(JSRS=0)&(ZMKG=1)&(GXDJ5)&(key_buf=0)&(RI=0)&(KDYX=1)/有人进入且光线不足则开灯 ZMKG=0; if(key_buf=0&RI=0) JSRS+; rs_buf3=JSRS/100; rs_buf4=(JSRS-rs_buf3*100)/10; rs_buf5=JSRS-rs_buf3*100-rs_buf4*10; pass_dis(rs_buf); CSXS_cou=400;/ delay_ms(300); if(HW2=0)&(key_buf=0)/有人走出检测 while(HW2=0)&(key_buf=0)&(RI=0); while(HW1=1)&(key_buf=0)&(RI=0); while(HW1=0)&(key_buf=0)&(RI=0); if(JSRS=1)&(ZMKG=0)&(key_buf=0)&(RI=0)/教室无人关灯 ZMKG=1; if(JSRS!=0&RI=0) JSRS-; rs_buf3=JSRS/100; rs_buf4=(JSRS-rs_b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年4月网络搭建模拟试题及答案(附解析)
- 怎样进行创新设计
- 3月汽车发动机检修试题含参考答案解析
- 安全项目风险管理考核试卷
- 安全运维招聘注意事项
- 肥料制造智能化控制考核试卷
- 文化创意创业生态系统考核试卷
- 电力工程设计考核试卷
- 学习编写安全专项施工方案
- 2025年煤炭采掘机械设备合作协议书
- 八年级数学题试卷及答案
- 2025年物业管理从业人员考试试卷及答案
- 比亚迪新能源汽车业务竞争战略:基于全产业链优势的多维剖析与展望
- 教研员考试试题及答案
- 河北检察院试题及答案
- 2025年下半年山东潍坊市工程技师学院招聘事业单位控制总量教师35人易考易错模拟试题(共500题)试卷后附参考答案
- 部编版语文四年级下册 26《宝葫芦的秘密》整本书教学设计
- 《高血压疾病诊断与治疗》课件
- MOOC 大学英语听说译-河南理工大学 中国大学慕课答案
- 《水电工程岩爆风险评估技术规范》(NB-T 10143-2019)
- 【护理讲课】肺炎病人的护理PPT
评论
0/150
提交评论