,并且接收到八位的密码以后就开始运行密码核对程序,当密码输入正确后,就可以进行开锁、上锁或修改密码的操作。当密码输入错误的时候就会进入密码输入提醒程序提醒用户重新输入密码,密码输入累积到3次时系统会报警并锁定。Р初始化Р等待遥控识别按键Р遥控学习模式Р密码核对Р报警锁定Р开锁Р上锁Р密码修改РNР错误Р正确Р遥控ID存在?Р密码锁模式РYР?Р图9主程序流程图Р5.2.2接收解码程序Р红外接收解码的关键是如何识别‘0’和‘1’码,我的做法是根据‘0’和‘1’码的高电平宽度不一样的特点来进行识别。接收程序的流程图如图10所示。Р进入红外接收程序后先关闭中断。接着的工作是避开9ms高电平、4.5ms的低电平的引导码,并且判断是否干扰信号或者重复信号。正如前面所说,一体化红外接收头的输出端电平跟遥控发射端电平相反。如图14所示。Р所以只要遥控有键按下单片机就会马上产生中断接收数据。跟在引导码后面的是32位用户码和数据码,也就是我们想要的数据,单片机把它接收并保存。当接收完8位的数据时要更换另外一个数据缓冲区,当32位的键码都接收完的时候就意味这一帧的数据已经接收完毕。然后根据接收到的数据码和数据反码是否对应位相反来确定接收的这一帧数据是否正确,最后退出接收解码程序。Р发射模块РMCUР9msР4.5msР接收头Р9msР4.5msР图10 接收头前导码信号变相图Р而单片机的接收端的‘0’‘1’波形图如图15所示。在保存‘0’码和‘1’码的时候还有一个保存时机的问题,如果从0.56ms低电平过后开始延时,0.56ms以后若读到为低电平,说明该位为‘0’,反之则为‘1’。为安全起见,延时必须比0.56ms长一些,但又不能超过1.12ms,否则如果该位为‘0’读到的已是下一位的高电平,因此取( 1.12ms + 0.56ms )/2=0.84ms 较为可靠,一般取0.84ms左右均可。