指令4:控制显示的开关。D:整体显示开关控制,高电平时为开显示,低电平时为关显示。C:光标开关控制,高电平时有光标,低电平时无光标。B:光标闪烁控制,时产生闪烁高电平,低电平时不闪烁。
指令5:显示移位或者光标移位。S/C:高电平时显示文字,低电平时移动光标。
指令6:功能设置命令。DL:当为高电平时为4位总线,当为低电平时为8位总线。N:为低电平时进行单行显示,为高电平时进行双行显示。F:高电平时显示5×10的点阵字符,低电平时显示5×7的点阵字符。
指令7:字符发生器RAM地址设置脚。
指令8:DDRAM地址设置位。
指令9:读光标地址、忙信号。BF:为忙标志位,当为高电平时表示忙,此时LCD不能接收数据或指令,如果低电平时表示不忙。
指令10:写数据。
指令11:读数据。
显示字符时要先输入显示字符地址如图13,LCD1602可以显示两行字符,每行有40个地址,但是只使用每行的前十优尔个地址。
LCD
16字×2行
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 …… 27
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 …… 67
图13 LCD1602显示地址
显示地址时要求最高位D7恒定为高电平1所以实际写入的数据地址都应再加上10000000B(80H)[10]。
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
3.5 红外发射编码及解码原则
红外发射程序流程如图14所示:
图14 红外编码发射程序流程图
采用脉宽调制的串行码,二进制“0”以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示;二进制“1”以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示[11]。
上述“0”和“1”组成的二进制码需经过38kHz的载频进行调制以提高发射效率[12],可以降低电源功耗,调高发射距离。通过红外发射二极管产生红外线向空间发射。发射代码由一个起始码(9ms高电平,4.5ms低电平),然后发送数据[13],如图15:
9ms 4.5ms
引导码 0 0 1 1
图15 红外发射波形图
发送数据采用32位二进制码组。其中前16位为从机的地址识别码,用于区别不同的设备。后16位为所要发送的数据码和其反码[14]。
红外接收程序流程如图16所示:
图16 红外接收解码流程图
解码的关键是如何识别“0”和“1”,从位的定义我们可以发现“0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“0” 为0.56ms,“1”为1.68ms,所以必须根据高电平的宽度区别“0”和“1”。如果从0.56ms低电平过后,开始延时 0.56ms以后,若读到的电平为低,说明该位为“0”,反之则为“1”[15]。 AT89C51单片机的电子密码锁及报警系统设计+电路图+源码(6):http://www.youerw.com/tongxin/lunwen_1035.html