资料

单片机遥控的酒店客房灯光控制系统(图)

上传人:admin

上传时间: 2008-09-09

浏览次数: 2838

  前言:本人工作的酒店开业于一九九八年,至今已有七年之久,当初选型设备老化过时,特别对于科技飞速发展的当今。酒店原有的智能控制系统较周边新开张酒店相比,已跟不上潮流,失去竞争能力。例如原来酒店客房灯光控制系统均采用TCL2.0系列产品,房间的电视、台灯、地灯、鱼缸照明、夜灯、廊灯、吧台灯等开关与床头灯调光开关均集中安装在床头柜处(如图1)。由于开关较多且固定在床头柜侧面,客人想开灯时必须先看清开关下面的标记才能正确开灯,有时为开一盏灯竟把所有的开关都按了一遍,使用时极为不便。现在大多数星级酒店都采用微动开关轻触式集中控制面板,安装在床头柜的正上方。虽然较以前直观,但是开关多且固定仍不是十分方便。本人采用8051系列单片机将原来固定的机械式开关改用遥控控制,这样一个遥控器就可以控制整个房间的灯光开启,电源控制箱可以放在床头柜内;遥控器在放置在床头柜上,可以任意移动,还可以在遥控面板中间加装一液晶时钟(如图2所示)。美观且实用即大方便客人的使用。

图1 老式控制柜

图2 新式遥控发射器

  一 硬件电路的设计

  1、 遥控发射电路

  如图3所示,为该系统遥控发射器电原理图,其中P1口作为键盘扫描端口,具有16个操作键,可分别控制单片机发出16种不同脉冲,执行16种操作。第9脚为单片机的复位脚,采用RC上电复位电路;15脚作为红外线遥控码的输出口,用于输出38KHz载波编码。脉冲经9013放大然后由红外发射管输出;18、19脚接12M晶振。P1.4P1.7需接上拉电阻。

图3 遥控发射电路图

  2、 遥控接收电路

  如图4所示,为该系统遥控接收电原理图,其中P1.0P1.2口作为数码管的二进制数据输出,显示数字为07,0表示最暗,7表示最亮,采用带锁存功能的七段译码电路74HC4511集成块译码显示数值。4511的LE端接8051的30脚(地址锁存允许控制);P0.0P0.7以及P2.2P2.7作为14个电器的电源控制输出,接口用继电器隔离输出。P2.0口为调光脉冲输出,输出脉冲由三极管9012放大后经光电耦合器MOC3021驱动双向可控硅控制负载;P3.0口为交流50Hz同步检测输入。系统对市电进行变压、整流、并经施密特触发器整形后得到100Hz的方波(周期10ms),作为发送调光脉冲的同步信号,系统采用10ms为一个单位时间的长度,灯的亮度越高,则可控硅导通时间的占空比越大;P3.1口为红外遥控码输入,采用集成红外线接收路SFH506-38,此集成元件体积小、抗干扰性好、灵敏度高、并且价格低廉。它仅有三个脚,分别是电源正极、电源负极以及信号输出端,其工作电压为5V左右,它的主要功能包括放大、选频、解调几大部分,要求输入是已经被调制的信号,经过它的接收放大和解调会在输出端直接输出原始信号至P3.1脚。这款红外线接收电路接收距离可以达8米左右,完全可以满足客房内的遥控距离(一般客房标准间都在30平米左右);P3.2脚为外部中断0输入脚,采用下降沿触发,当有信号时,第一位码的低电平启动中断程序,实时接收数据帧。第9脚为单片机的复位脚,采用RC上电复位电路;18、19脚接12M晶振。

图4 遥控接收电路图

  二 系统的遥控功能实现方法

  1、 遥控编码格式

  该遥控器采用脉冲个数编码,不同的脉冲个数代表不同的码,最小为2个脉冲,最大为17个脉冲。为了使接收可靠,第一位码宽为3ms,其余为1ms,遥控数据帧间隔大于10ms,如图5所示。

图5 遥控脉冲编码图

  2、 遥控码的发射

  当某个操作键按下时,单片机先读出该键值,然后根据键值设定的遥控脉冲个数,再调制成38KHz的方波由红外线发射管发射出去。P3.5端口的输出调制波如图5所示。

  3、 数据帧的接收处理

  当红外线接收器输出脉冲帧数据时,第一位码的低电平将启动中断程序,实时接收数据帧。在数据接收时,先对第一位(起始位)码的码宽进行验证。若第一位低电平码的脉宽小于2ms,将作为错误码处理;否则认为是起始码,累加器A加1。当间隔位的高电平大于3ms时,结束接收,然后根据累加器A中的脉冲个数,执行相应的输出操作。图6为红外线接收器输出的一帧遥控码波形图。

图6 一帧遥控码波形图

  三 遥控发射及接收控制程序流程图

  1、 遥控发射程序控制流程图

图7 遥控发射控制流程图

  2、 遥控接收程序控制流程图

图8遥控接收控制流程图

  四 主要程序分析

  1、 键盘扫描程序

  本电路采用44矩阵式键盘电路,共16个按健开关可发送16种编码指令。首先将立即数#0F0H送至P1口,再读入P1口值与#0F0H相比较,相等则说明没有键按下,返回。不相等则表示有键按下,再调用延时消抖程序,确认有键按下。转至行扫描程序确认按键所在的行,并将R2赋行号初值,然后调用列扫描程序确认按键所在例号。例号与行号初值相加即得按键号(送寄存器A)。

  KEYWORK: MOV P1,#0F0H ;置P1口输入状态

  MOV A,P1 ;读入P1口值

  MOV B,A ;P1口值暂存B中

  CJNE A,#0F0H,KEYHIT ;不等于#0FFH,转KEYHIT(有键按下)

  KEYOUT: RET ;没有键按下返回;

  KEYHIT: LCALL DL10MS ;延时去抖动

  MOV A,P1 ;再读入P1口值至A

  CJNE A,B,KEYOUY ;A不等于B(是干扰),子程序返回

  SETB P1.1 ;有键按下,找键号开始,查0行

  SETB P1.2

  SETB P1.3

  MOV A,P1 ;读入P1口值

  CJNE A,#0FEH,KEYVAL0 ;P1不等于#0FEH,按下键在第0行

  SETB P1.0 ;不在第0行,开始查1行

  CLR P1.1

  MOV A,P1 ;读入P1口值

  CJNE A,#0FDH,KEYVAL1 ;P1口不等于#0FDH,按下键在第1行

  SETB P1.1 ;不在第1行,开始查2行

  CLR P1.2

  MOV A,P1 ;读入P1口值

  CJNE A,#0FBH,KEYVAL2 ;P1口不等于#0FBH,按下键在第2行

  SETB P1.2 ;不在第2行,开始查3行

  CLR P1.3

  MOV A,P1 ;读入P1口值

  CJNE A,#0F7H,KEYVAL3 ;P1口不等于#0F7H,按下键在第3行

  LJMP KEYOUT ;不在第3行,子程序返回

  KEYVAL0: MOV R2,#00H ;按下键在第0行,R2赋行号初值0

  LJMP KEYVAL4 ;跳到KEYVAL4

  KEYVAL1: MOV R2,#04H ;按下键在第1行,R2赋行号初值4

  LJMP KEYVAL4 ;跳到KEYVAL4

  .

  .

  KEYVAL4: MOV DPTR,#KEYVALTAB ;翻译成连续数字

  MOV B,A ;P1口值暂存B内

  ANL B,#0F0H ;取高四位

  MOV R0,#0 ;清R0

  KEYVAL5: MOV A,R0 ;查列号开始,R0数据放入A

  SUBB A,#04H ;A中数减4

  JNC KEYOUT ;借位C为0,查表出错,返回

  MOV A,R0 ;查表次数小于4,继续查,

  MOVC A,@A+DPTR ;查列号表

  INC R0 ;R0加1

  CJNE A,B,KEYVAL5 ;查得值和P1口值不等,转KEYVAL5再查

  DEC R0 ;查得值和P1口值相等,R0减1

  MOV A,R0 ;放入A(R0中数值即为列号值)

  ADD A,R2 ;与行号初值相加成为键号值(0-15)

  KEYVALTAB: DB 0E0H,0D0H,0B0H,07H ;列号对应数据表

  ;对应列号: 0 1 2 3

| 收藏本文
最新评论

用户名: 密码: