版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、毕业设计书课题名称智能客房控制器的设计目 录绪论3第1章AT89S52概述41.1 AT89S52的功能41.2 AT89S52的特性4第2章客房控制器的系统结构52.1 客房控制器的系统结构52.2 控制器电路硬件设计52.3 I/O输入电路设计6第3章 AT89S52控制的电路73.1 AR89S52控制LED显示时间83.2 4X4矩阵式键盘按键93.2.1 试验任务103.2.2硬件电路原理图113.2.3 系统板上硬件连线123.2.4程序设计内容133.2.5 程序框图143.2.6 C语言源程序103.3 LED点阵显示103.3.1 8X8LED点阵显示驱动技术原理图103.3
2、.2 16X16LED点阵显示汉字103.4 红外线发射电路的设计103.4.1红外线传感器103.4.2放大电路的基本知识103.4.3半导体三极管103.4.4红外线发射电路图11第4章总结31致谢32参考文献33摘 要介绍了智能客房控制系统的结构、功能和特点。给出了以At89S52单片机为主控制器的客房控制器输入、输出硬件接口电路的设计,并对其特点做出阐述。结合控制系统的功能要求,对软件设计的程序流程及实现的基本过程进行了说明。关键词:At89S52 智能客房 单片机 楼宇自动化随着智能建筑和楼宇自动化的飞速发展,出现了与传统家居有着本质差别的智能家居
3、,给住户提供了高品质的生活环境。与普通家居相比,智能家居不仅具有传统的居住功能,提供舒适、安全、高品位、宜人的家庭环境,而且将原来的被动静止结构转变为具有能动智慧的工具,提供全方位的信息交换功能,帮助家庭与外部保持信息交流畅通,优化人们的生活方式,帮助人们有效的安排时间,增强家居生活的安全性,并实现有效的节能管理。因此,智能家居在人们生活中获得了越来越广泛的应用。本文以宾馆客房的智能控制和管理为例,介绍基于At 89S52单片机的智能客房控制系统的设计。第1章AT89S52概述 AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。AT89S52使用
4、Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,AT89S52拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。1.1 AT89S52功能AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择
5、节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。1.2 AT89S52 特性· 兼容MCS-51指令系统· 8k可反复擦写(>1000次)ISP Flash ROM · 1000次擦写周期· 32个双向I/O口· 工作电压· 3个16位可编程定时/计数器· 时钟频率0-33MHz · 全双工UART串行中断口· 128x8bit内部RAM · 低功耗空闲和省
6、电模式· 中断唤醒省电模式· 3级加密位· 看门狗(WDT)电路· 软件设置空闲和省电功能· 灵活的ISP字节和分页编程· 双数据寄存器指针第二章 客房控制器的系统结构2.1 客房控制器的系统结构 与传统客房相比,现代客房在室内装备上已经有了很大的改进,主要体现了智能、舒适、高效、节能和便利的特点。客房控制系统的总体结构如图1所示,主控制器需要对客房内的廊灯、夜灯、房灯、吧灯以及清理、勿扰、门铃等开关进行控制和管理。而总制开关、节电开关用于客房的节能控制,求救按钮、门磁开关等则是基于安全方面的考虑。
7、主控制器通过对风机和电磁阀的控制,可以调节客房的温度。温度控制器主要用于时钟、日历、风机状态的显示和客房温度的设定。主控制器通过RS485总线与温控器进行通信,通过现场总线与酒店的服务台及工程部的管理服务器进行通信。 智能客房控制器在安全、舒适、节能和强化功能方面具有以下特点:(1)不仅实现了对客房内的灯具、背景音乐、空调、服务等常规设施的控制,还有紧急救助、防盗报警等监控功能。此外,客房控制器通过现场总线将客房状态传送到楼层服务台、总台等,从而实现了客房的远程控制和管理。 (2 ) 强弱电分开,所有的强电控制都是由12V弱
8、电继电器的控制来实现,安全性好。 (3) 用插卡节电开关控制客房总电源,客人进入宾馆客房时插卡取电,客人离开时拔卡断电;设置“总制”键,客人入睡前,按此键后系统便进入低能耗状态;客房室内温度控制采用模糊控制,大大降低宾馆中央空调的能耗。 (4) 客房有人时,客房温度由客人通过温度控制器设定,由主控制器通过对风机、电磁阀的控制来完成;而无人或待租时,总台向主控制器发送命令,使空调处于节能状态。2.2 控制器硬件电路设计 为降低成本、小体积和满足控制功能,主控制器选用技术成熟、性价比高的AT89S
9、52单片机。 AT89S52内置在线可擦除编程8KB FLASH,不需要扩展存储器;具有32个可编程I/O口;而且采用了ISP在线编程,提高了调试效率, 减少了传统烧写器烧写芯片时对芯片造成的损耗。2.3 I/O输入电路设计 客房控制系统的最大特点是输入、输出开关量多,主控制器单片机已有的I/O口不能满足使用需求,需要进行扩展。为降低成本,采用简单的TTL电路扩展I/O口,即单片机的P2.0、P2.1口地址信号作为译码器74LS139的输入信号,74LS139的输出信号作为总线驱动器74LS244的片选信号,74LS244的8个输出脚分别接单片机
10、P0口的8位,通过片选74LS244单片机即可把74LS244输入脚上的数据读入,其I/O输入接口电路如图2所示。IG01IG08是一组弱电端子输入信号线,它们分别和8个弱电开关相连。由于系统有24个开关输入量,因此,电路共用了3个74LS244,当片选信号CS1CS3中有一个有效时,其对应74LS244上的数据就被读入到单片机中。图3 I/O输出接口电路原理图为保证用电安全,智能客房控制系统的输出电路采用了弱电控制强电的方式,即用12V继电器控制220V交流电。输出接口电路也采用TTL电路扩展I/O口,即单片机的P2.2、P2.3口地址信号作为译码器74LS139的输入信号,74
11、LS139的输出信号作为74LS273锁存器的片选信号;74LS273锁存器的8个输入脚分别接单片机P0口的8位,其输出经达林顿功率驱动芯片ULN2803,即可控制继电器;I/O输出接口电路如图3所示。由于系统有24个开关输出量,因此,电路共用了3个74LS273和3个ULN2803,当片选信号CS4CS6中有一个有效时,其对应74LS273上的数据即可输出到继电器。 控制器的其它电路主要还有,为了在系统出现故障或程序跑飞的情况下,控制器能够自动恢复正常工作,采用MAX813L芯片设计了看门狗监测和系统复位电路;为了实现主控制器与总台及温控器的通信,采用MA
12、X1487E芯片设计了RS485通信接口电路。第三章 AT89S52控制的电路3.1AT89S52控制LED显示时间时间万年历程序程序 2009-05-28 08:56:40 阅读15 评论0 字号:大中小 订阅/#include<windows.h>#include<iostream>#include<string>#include<ctime>#include<windows.h> int hour,min,sec;
13、 /定义整型时分秒。int year,month,day; /定义整型年月日。void print();void printhour(); /函数调用。void printmin();void printsec();void printyear();void printmonth();void printday();void progress();using na
14、mespace std;void main() string password; cout<<"-"<<endl; cout<<"欢迎使用时钟万年历软件"<<endl; /输出提示。 cout<<"请根据提示完成时间设置"<<endl; cout<<"初始密码:wang:"<<endl; cout<<"-"<<
15、;endl; cout<<"+"<<endl; cout<<"+设置时间+"<<endl; /初始化时间。 cout<<"+"<<endl; printhour(); /设置小时。 printmin(); &
16、#160; /设置分钟。 printsec(); /设置秒钟。 printyear(); /设置年份。 printmonth(); /设置月份。 printday(); /设置号数。 co
17、ut<<"请输入密码:"<<endl; cin>>password; while(password="wang") progress(); /函数主要执行过程。 system("cls"); /清屏函数。
18、/以下是在程序中调用的函数。void print() cout<<"设置时间格式不正确"<<endl;void printhour() cout<<"输入小时数:"<<endl; cin>>hour; while(hour>=24|hour<0) print(); /提示输入时间不正确。 cin>>hour; void
19、 printmin() cout<<"输入分钟数:"<<endl; cin>>min; while(min>=60|min<0) print(); /提示输入时间不正确。 cin>>min; void printsec() cout<<"输入秒钟数:"<<endl; cin>>sec; wh
20、ile(sec>=60|sec<0) print(); /提示输入时间不正确。 cin>>sec; void printyear() cout<<"输入年份:"<<endl; cin>>year; void printmonth() cout<<"输入月份:"<<endl; cin>>month;
21、160;while(month>12|month<0) print(); /提示输入时间不正确。 cin>>month; void printday() cout<<"输入号数:"<<endl; cin>>day; while(day>30|day<0) print(); /提示输入时
22、间不正确。 cin>>day; void progress() /sec+; cout<<"-"<<endl; cout<<"北京时间:"<<endl; cout<<"-"<<endl; cout<<"YY:"<<"MM:"<<"DD:"<<endl; /
23、输出年月日的标题。 /cout<<year<<":"<<month<<":"<<day<<endl; cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl; cout<<"_"<<endl; cout<<"
24、;HH:"<<"MM:"<<"SS:"<<endl; /输出时分秒的标题。 /cout<<hour<<":"<<min<<":"<<sec<<endl; cout<<hour<<"时"<<min<<"分"<<sec<<"秒"<<
25、endl; cout<<"_"<<endl; Sleep(1000); /注意理解为什么要把延时放在这儿。 sec+; /延时以后秒钟加1. /为什么上面两行的Sleep(1000);和sec+;要放在此处,而不放在下面。 /首先设置时间以后得显示当前设置时间,然后再延时一秒以后,秒钟 /才加1,如果把sec+;放在执行显示过程的
26、前面,则显示结果要比设置 /的时间晚一秒。注意此处的用意。 if(sec=60) sec=0; /当增加到60,清零。 min+; /同时分加1。 /Sleep(1000); /延时1秒。 if(
27、min=60) min=0; /fen增加到60则清零。 hour+; /hour加1。 if(hour=24) hour=0;
28、 /hour增加到24则清零。 sec=0; /sec清零。 min=0; /min清零。 day+; /hour增加到24则day加1。 if(day=31)
29、; day=1; month+; /day增加到31(30号那一天完了以后)则month加1。 if(month=13) month=1; year+; /month增加到13(12月那一月完了以后)则year加1。
30、 3.2 4X4矩阵式键盘按键3.2.1试验任务如图 4.14.2 所示,用 AT89S51 的并行口 P1 接 4 × 4 矩阵键盘,以 P1.0 P1.3 作输入 线 ,以 P1.4 P1.7 作输出线;在数码管上显示每个按键的 “ 0 F ” 序号。对应的按键的序号排列如图 4.14.1 所示3.2.2 硬件电路原理图 系统板上硬件连线( 1 把 “ 单片机系统 “ 区域中的 P3.0 P3.7 端口用 8 芯排线连接到 “ 4X4 行列式键盘 ”区域中的 C1 C4 R1 R4 端口上;( 2 把 “ 单片机系统 ” 区域中的 P0.0/AD0 P0.7/AD7 端
31、口用 8 芯排线连接到 “ 四路静 态数码显示模块 ” 区域中的任一个 a h 端口上;要求: P0.0/AD0 对应着 a , P0.1/AD 1对应着 b , , P0.7/AD7 对应着 h 。3.2.4 程序设计内容( 1 4 × 4 矩阵键盘识别处理( 2 每个按键有它的行值和列值 ,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和 CPU 通信。每个按键的状态同样需变成数字量 “ 0 ” 和 “ 1 ” ,开关的一端(列线)通过电阻接 V CC ,而接地是通过程序输出数字 “ 0 ” 实现的。键盘处理程序的任务是:确定有无键按下,判断哪 一个键
32、按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。3.2.5 程序框图3.2.6 C 语言源程序#include <AT89S52.H>unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;unsigned char temp;unsigned char key;unsig
33、ned char i,j;void main(void)while(1)P3=0xff;P3_4=0;temp=P3;temp=temp & 0x0f;if (temp!=0x0f)for(i=50;i>0;i-)for(j=200;j>0;j-);temp=P3;temp=temp & 0x0f;if (temp!=0x0f)temp=P3;temp=temp & 0x0f;switch(temp)case 0x0e:key=7;break;case 0x0d:key=8;break;case 0x0b:key=9;break;case 0x07:key=
34、10;break;temp=P3;P1_0=P1_0;P0=tablekey;temp=temp & 0x0f;while(temp!=0x0f)temp=P3;temp=temp & 0x0fP3=0xff;P3_5=0;temp=P3;temp=temp & 0x0f;if (temp!=0x0f)for(i=50;i>0;i-)for(j=200;j>0;j-);temp=P3;temp=temp & 0x0f;if (temp!=0x0f)temp=P3;temp=temp & 0x0f;switch(temp)case 0x0e:k
35、ey=4;break;case 0x0d:key=5;break;case 0x0b:key=6;break;case 0x07:key=11;break;temp=P3;P1_0=P1_0;P0=tablekey;temp=temp & 0x0f;while(temp!=0x0f)temp=P3;temp=temp & 0x0f;P3=0xff;P3_6=0;temp=P3;temp=temp & 0x0f;if (temp!=0x0f)for(i=50;i>0;i-)for(j=200;j>0;j-);temp=P3;temp=temp & 0x
36、0f;if (temp!=0x0f)temp=P3;temp=temp & 0x0f;switch(temp)case 0x0e:key=1;break;case 0x0d:key=2;break;case 0x0b:key=3;break;case 0x07:key=12;break;temp=P3;P1_0=P1_0;P0=tablekey;temp=temp & 0x0f;while(temp!=0x0f)temp=P3;temp=temp & 0x0f;P3=0xff;P3_7=0;temp=P3;temp=temp & 0x0f;if (temp!=0
37、x0f)for(i=50;i>0;i-)for(j=200;j>0;j-);temp=P3;temp=temp & 0x0f;if (temp!=0x0f)temp=P3;temp=temp & 0x0f;switch(temp)case 0x0e:key=0;break;case 0x0d:key=13;break;case 0x0b:key=14;break;case 0x07:key=15;break;temp=P3;P1_0=P1_0;P0=tablekey;temp=temp & 0x0f;while(temp!=0x0f)temp=P3;temp
38、=temp & 0x0f;3.3 LED点阵显示3.3.1 8X8 LED点阵显示驱动技术原理图3.3.2 16×16点阵LED显示汉字 Proteus中点阵LED最大为8×8点阵,不能用来显示汉字,而四片接在一起又因为引脚太近,无法接线。然而,是不是这样就意味着不能仿真“点阵汉字”了呢?笔者经过研究,将库里的8×8点阵LED修改后,将四片8×8点阵LED合并成一体,就成了16×16的点阵LED了。 该LED的特点是:
39、共阴、逐行扫描、低在前高位在后,上面的引脚为数据口,下面的引脚为行选引脚,低电平有效。 电路由AT89C52、4片74HC138、4片8×8点阵组成。74HC138用于选择行,4片74HC138的有效顺序为:左上,右上,左下,右下。P0口作为数据口,4片74HC138列引脚都接到P0口。以下程序在16×16点阵LED上依次显示“梅川酷子”四个字,分别用正向显示和反向显示,间隔两秒钟变换一次,电路图和效果图下图所示。 AT89c52晶振频率为24MHz,用T0定时,改变变量flag值,从而让程序确定显示哪个汉字和显示方式(正向or反向)。i
40、 nclude <atmelregx52.h>#define int8 unsigned char#define int16 unsigned int#define int32 unsigned longint8 flag;/*flag变量MSB 7 6 5 4 3 2 1 0 LSB × ×
41、; × Bit51,Bit4=0 时,负向显示Bit50,Bit4=1 时,负向显示Bit2.074HC138的片选信号*/int8 n;int8 code table32=0x88,0x00,0x88,0x00,0x88,0x7F,0x48,0x00,0xDF,0x1F,0xA8,0x10,0x9C,0x12,0xAC,0x14,0xEA,0x7F,0x8A,0x12,0x89,0x14,0x88,0x10,0x88,0x7F,0x08,0x10,0x08,0x14,0x08,0x08,/*&quo
42、t;梅",0*/0x08,0x20,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x04,0x21,0x04,0x20,0x02,0x00,/*"川",1*/0x00,0x08,0xFE,0x08,0x28,0x0A,0x28,0x7E,0xFE,0x0A,0xAA,0x09,0xAA,0xFF,0xEA,0x00,0x86,0x00,0x82,0x7E,0xFE,0x4
43、2,0x82,0x42,0x82,0x42,0xFE,0x7E,0x82,0x42,0x00,0x00,/*"酷",2*/0x00,0x00,0xF8,0x1F,0x00,0x08,0x00,0x04,0x00,0x02,0x00,0x01,0x00,0x01,0x00,0x41,0xFE,0xFF,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x40,0x01,0x80,0x00/*"子",3*/;void delay(void);void main(void)int8 i;int8 j;int8
44、 index;flag=0x10;n=0;/定时器T0初始化TMOD=0x01;TH0=0xb1;TL0=0xe0;ET0=1;EA=1;TR0=1;while(1)index=flag&0x03;if(flag&0x30)=0x10) /正向显示 for(i=0;i<8;i+) /显示上半屏
45、0; P0=tableindex2*i; /左上 P2=i|0x08; delay(); &
46、#160; P0=tableindex2*i+1; /右上 P2=i|0x10; delay();
47、60; for(i=8;i<16;i+) /显示下半屏 P0=tableindex2*i; /左下 P2=(i-8)|0x20;
48、160; delay(); P0=tableindex2*i+1; /右下 &
49、#160; P2=(i-8)|0x40; delay(); if(flag&0x30)=0x20) /反向显示 for(i=0;i<8;i+)
50、160; P0=(tableindex2*i); /左上 P2=i|0x08; del
51、ay(); P0=(tableindex2*i+1); /右上 P2=i|0x10; delay();
52、; for(i=8;i<16;i+) P0=(tableindex2*i); /左下 P2=(i-8)|0x20;
53、160; delay(); P0=(tableindex2*i+1); /右下 P2=(i-8)|0x40;
54、 delay(); void delay(void)int16 i;for(i=0;i<50;i+);void timer0() interrupt 1 using 3 TF0=0;TH0=0xb1;TL0=0xe0; /10ms中断一次if(n<200) n+
55、;else /2秒改变一次 switch(flag) case 0x10: flag=0x11;/下次显示正向“川” break; cas
56、e 0x11: flag=0x12;/下次显示正向“酷” break; case 0x12: flag=0x13;/下次显示正
57、向“子” break; case 0x13: flag=0x20;/下次显示负向“川”
58、break; case 0x20: flag=0x21;/下次显示负向“梅” break;
59、 case 0x21: flag=0x22;/下次显示负向“酷” break; case 0x22: &
60、#160; flag=0x23;/下次显示负向“子” break; case 0x23: flag=0x10;/下次显示正向“梅”
61、; break; n=0;3.4红外线发射电路的设计要将信号以红外线的方式发射出去,首先要把脉冲信号进行调制,而电路中的信号往往比较小,不能驱动负载。所以要通过放大电路将信号放大,通过红外线发光二极管发射出去。发射器件和放大电路是发射中必不可少的。3.4.1.红外线传感器要将红外线发射出去,发射器件是必不可少的,则我们就要对红外线的发射器件进行选择,要能够发射比自然发射的红外线有更强的辐射强度。而要对信号接收器件,则要有较强的接收能力,它能将接收的红外线转换成足够强的电信
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年二级建造师考试通关练习试题一套附答案详解
- 2025年一级建造师考试通关练习试题必考附答案详解
- 2025年安全员B证考试试卷重点附答案详解
- 2025年安全员B证考试试题附答案详解(培优)
- 城区2019年事业编招聘考试真题及答案解析2
- 世界卫生日安全班会课件
- 建设工程监理制度练习试题及答案
- 惠东2021年事业编招聘考试真题及答案解析
- 执业药师《中药学综合知识与技能》试题及答案(卷十)
- 执业药师继续教育糖尿病患者教育试题及答案
- 围墙维修合同协议书
- 新疆准噶尔盆地西缘(克拉玛依市)历史遗留废弃矿山生态修复示范工程(白碱滩区)建设项目环境影响报告表
- 校园舆情管理制度
- 2022城市轨道交通列车驾驶员技能及素质要求第1部分:地铁、轻轨和单轨
- T-CECS 10400-2024 固废基胶凝材料
- 2025年广东南油服务有限公司招聘笔试参考题库含答案解析
- 【MOOC】人工智能原理-北京大学 中国大学慕课MOOC答案
- 人教版劳动教育一年级上册全册课件
- DB1310-T256-2021石油天然气站场危险废物贮存设施技术规范
- 2024年江西省高考化学试卷(真题+答案)
- 《油气井增产技术》课件-2、压裂混砂车的选用
评论
0/150
提交评论