资源描述
课程设计
基于单片机红外遥控系统设计
学院:计算机与通信工程学院
专业:通信工程
班级:通信11-3班
姓名:
学号:
摘要
本设计采用51单片机作为遥控发射接受芯片,HS003B作为红外一体化接受发射管,在此基本上设计了一种简易智能红外遥控系统。系统涉及接受和发射两大某些,发射某些有16个按键,接受某些具有8盏彩色LED灯、一片二位数码管和蜂鸣器系统。发射某些通过键盘扫描判断哪个键被按下,通过单片机编码程序进行编码,控制红外发射电路发送信号。接受某些解码信号,实现相应输出。本设计方案结合红外遥控设计简朴、作以便、成本低廉等特点。
核心字: 红外遥控 信号调制 编码 解码
目录
摘要 II
1.绪论 1
1.1课题目和意义 1
1.2红外线简介 1
1.3红外遥控系统简介 1
2 课题方案和设计思路 2
2.1总体方案 2
2.2红外发射器设计 3
2.2.1红外发射器原理 3
2.2.2红外编码 3
2.3红外接受端设计 4
3硬件构造设计与简介 5
3.1 AT89C51系列单片机功能特点 5
3.1.1 重要特性 5
3.1.2 管脚阐明 5
3.1.3基本电路 7
3.2 红外发射电路 8
3.3红外接受电路设计 9
3.3.1 红外接受模块 9
3.3.2数码管 9
3.3.3 彩灯系统 10
3.3.4蜂鸣器系统 11
3.3.5红外接受端电路图 12
4 软件设计 12
4.1 定期/计数器功能简介 12
4.2 遥控码发射 13
4.3 红外接受 14
5.课程设计总结和心得 15
参照文献 16
附录 17
附录1 Proteus仿真图 17
附录2 发射程序 17
附录3 接受程序 20
1.绪论
1.1课题目和意义
随着科技发展,人们生活节奏也越来越快,随之人们对以便,快捷规定也随之不断增高。遥控器浮现,在一定限度上满足了人们这个规定。遥控器是由高产创造家Robert Adler在五十年代创造[1]。而红外遥控是20世纪70年代才开始发展起来一种远程控制技术,其原理是运用红外线来传递控制信号,实现对控制对象远距离控制,详细来讲,就是有发射器发出红外线指令信号,有接受器接受下来并对信号进行解决,最后实现对控制对象各种功能远程控制。
红外遥控具备独立性、物理特性与可见光相似性、无穿透障碍物能力及较强隐蔽性等特点。随着红外遥控技术开发和迅速发展,诸多电器采用该项技术,使人们生活更加便捷。本小组通过红外遥控技术来控制多盏彩灯亮灭状况,实现各种花型以及数码管数值显示。通过本课题设计,更好理解红外线编码解码方式及其红外遥控系统其她工作原理。
1.2红外线简介
红外线又称红外光波,在电磁波谱中,光波波长范畴为0.01um~1000um。依照波长不同可分为可见光和不可见光,波长为0.38um~0.76um光波可为可见光,依次为红、橙、黄、绿、青、蓝、紫七种颜色。光波为0.01um~0.38um光波为紫外光(线),波长为0.76um~1000um光波为红外光(线)。红外光按波长范畴分为近红外、中红外、远红外、极红外4类。红外线遥控是运用近红外光传送遥控指令,波长为0.76um~1.5um。用近红外作为遥控光源,是由于当前红外发射器件(红外发光管)与红外接受器件(光敏二极管、三极管及光电池)发光与受光峰值波长普通为0.8um~0.94um,在近红外光波段内,两者光谱正好重叠,可以较好地匹配,可以获得较高传播效率及较高可靠性。
1.3红外遥控系统简介
红外遥控系统重要由遥控发射器、一体化接受头、单片机、接口电路构成,遥控器用来产生遥控编码脉冲,驱动红外发射管输出红外遥控信号,遥控接受头完毕对遥控信号放大、检波、整形、解调出遥控编码脉冲。遥控编码脉冲是一组串行二进制码,对于普通红外遥控系统,此串行码输入到微控制器,由其内部CPU完毕对遥控指令解码,并执行相应遥控功能。使用遥控器作为控制系统输入,需要解决如下几种核心问题:如何接受红外遥控信号;如何辨认红外遥控信号以及解码软件设计、控制程序设计。
红外遥控是单工红外通信方式,整个通信中,需要一种发射端和一种接受端。发送端采用单片机将待发送二进制信号编码调制为一系列脉冲串信号,通过红外发射管发射红外信号。红外接受端普遍采用价格便宜,性能可靠一体化红外接受头接受红外信号,它同步对信号进行放大、检波、整形,得到TTL。
2 课题方案和设计思路
2.1总体方案
红外遥控系统普通由红外发射装置和红外接受设备两大某些构成,图2为所示为构造框图。
VCC
INTO
AT89C51
GND
+5V
红外接受器(一体化接受器)
Vcc
红外发射电路
(遥控键盘)
OUT
图2-1 系统构造框图
红外发射装置又由键盘电路、红外编码芯片、电源和红外发射电路构成。红外接受设备可由红外接受电路、红外解码芯片、电源和应用电路构成。
2.2红外发射器设计
2.2.1红外发射器原理
由于指令数据时间周期较长,信号频率很低,直接发射传送效率和距离受限,抗干扰性差,因而,必要采用二次调制方式,将指令数据通过载波信号进行调制,形成较高频率复合信号,在通过红外发射二极管产生红外线发射出去。
键盘
编码
调制
红外发射
38KHz载波发生器
图2-2 红外遥控发射原理框图
2.2.2红外编码
红外编码有诸各种方式,本课题采用脉冲宽度调制方案,这种遥控码具备如下特性: 以脉宽为0.565ms、间隔0.56ms、周期为1.125ms组合表达二进制“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms组合表达二进制“1”。 波形如下图。
位“0” 位“1”
0.56ms 0.56ms
1.125ms 2.25ms
图2-3 位“0”和位“1”波形图
在此简介较普遍使用NEG原则。其数据格式涉及引导码、顾客码、数据码和数据反码,编码共占32位。数据反码是数据码反相后编码,编码用于对数据纠错。
9ms 4.5ms C0-C7 C0’-C7’ D0-D7 D0’-D7’
起始引导码 顾客码 顾客码 数据码 数据码
8bit 8bit 8bit 8bit
13.5ms 18-36ms 27ms
58.5-76.5ms
图2-4 数据格式
2.3红外接受端设计
接受端重要涉及红外接受模块和解调单片机。其中,红外线接受模块涉及光电转换放大器和解调电路。当红外线发射信号进入模块后,在其输出端得到原先数字控制编码,再通过单片机解码程序进行解码,便知按下那个键,实现相应输出。P0.0连接蜂鸣器系统,每成功接受到信号,蜂鸣器发出一声响声。P1口连接8盏彩灯,接受数据不同彩灯花色不同,P2口、P3.0和P3.1连接一片二位数管,数码管显示从01到16数值,分别相应发射某些16个按键。
红外接受端
数码管显示
AT89C51
蜂鸣器系统
8盏LED彩灯
+5V电源
图2-5 接受某些原理框图
3硬件构造设计与简介
3.1 AT89C51系列单片机功能特点
3.1.1 重要特性
·与MCS-51 兼容
·4K字节可编程闪烁存储器
·寿命:1000写/擦循环
·数据保存时间:
·全静态工作:0Hz-24Hz
·三级程序存储器锁定
·128*8位内部RAM
·32可编程I/O线
·两个16位定期器/计数器
·5个中断源
·可编程串行通道
·低功耗闲置和掉电模式
·片内振荡器和时钟电路
3.1.2 管脚阐明
—VCC:供电电压。
—GND:接地。
—P0口:P0口为一种8位漏级开路双向I/O口,每个管脚可吸取8TTL门电流。当P1口管脚写“1”时,被定义为高阻输入。P0可以用于外部程序数据存储器,它可以被定义为数据/地址第八位。在FLASH编程时,P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部电位必要被拉高。
—P1口:P1口是一种内部提供上拉电阻8位双向I/O口,P1口缓冲器能接受输出4TTL门电流。P1口管脚写入“1”后,电位被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉缘故。在FLASH编程和校验时,P1口作为第八位地址接受。
—P2口:P2口为一种内部上拉电阻8位双向I/O口,P2口缓冲器可接受输出4个TTL门电流,当P2口被写“1”时,其管脚电位被内部上拉电阻拉高,且作为输入。作为输入时,P2口管脚电位被外部拉低,将输出电流,这是由于内部上拉缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址高八位。在给出地址“1”时,它运用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器内容。P2口在FLASH编程和校验时接受高八位地址信号和控制信号。
—P3口:P3口管脚是8个带内部上拉电阻双向I/O口,可接受输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入时,由于外部下拉为低电平,P3口将输出电流(ILL),也是由于上拉缘故。
P3口也可作为AT89C51某些特殊功能口,如下所示:
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 (外部中断0)
P3.3 (外部中断1)
P3.4 T0(记时器0外部输入)
P3.5 T1(记时器1外部输入)
P3.6 (外部数据存储器写选通)
P3.7 (外部数据存储器读选通)
P3口同步为闪烁编程和编程校验接受某些控制信号。
—RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期高电平时间。
—:当访问外部存储器时,地址锁存容许输出电平用于锁存地址地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变频率周期输出正脉冲信号,此频率为振荡器频率1/6。因而它可用作对外部输出脉冲或用于定期目。然而要注意是:每当用作外部数据存储器时,将跳过一种ALE脉冲。如想禁止ALE输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令时ALE才起作用。此外,该引脚被略微拉高。如果微解决器在外部执行状态ALE禁止,置位无效。
—:外部程序存储器选通信号。在由外部程序存储器取址期间,每个机器周期两次有效。但在访问外部数据存储器时,这两次有效信号将不浮现。
—:当保持低电平时,访问外部ROM;注意加密方式1时,将内部锁定为RESET;当端保持高电平时,访问内部ROM。在FLASH编程期间,
此引脚也用于施加12V编程电源(VPP)。
—XTAL1:反向振荡放大器输入及内部时钟工作电路输入。
—XTAL2:来自反向振荡器输出
3.1.3基本电路
在XTAL1和XTAL2之间接一只石英振荡晶体构成了单片机时钟电。
AT89C51复位引脚RST/VP通过片内一种施密特触发器(抑制噪声作用)与片内复位电路相连,施密特触发器输出在每一种机器周期由复位电路采样一次。当振荡电路工作,并且在RST引脚上加一种至少保持2个机器周期高电平时,就能使AT89C51完毕一次复位。
复位不影响RAM内容。复位后,PC指向0000H单元,使单片机从起始地址0000H单元开始重新执行程序。因此,当单片机运营出错或进入死循环时,可按复位键重新启动。
MCS-51单片机普通采用上电自动复位和按钮复位两种复位方式。上电复位运用电容器充电来实现。按钮复位又分为按钮电平复位和按钮脉冲复位。前者将复位端通过电阻与Vcc相接;后者运用RC微分电路产生正脉冲来达到复位目。复位电路参数选取应能保证复位高电平持续时间不不大于2个机器周期。
图3-1 AT89C51基本电路
3.2 红外发射电路
本遥控发射器采用脉冲宽度调制红外遥控方式,脉冲宽度调制红外遥控就是指令信号产生电路以不同脉冲编码代表不同控制指令。
在拟定选取AT89C51作为本设计发射电路核心芯片和点触式开关作为控制键后,加上一种简朴红外发射电路和12M晶体震荡器便可实现红外发射。
发射某些重要元件为红外发光二极管。它事实上是一只特殊发光二极管,由于其内部材料不同于普通发光二极管,因而在其两端施加一定电压时,它发出便是红外线而不是可见光。当前大量使用红外发光二极管发出红外线波长为940nm左右,外形与普通Φ5发光二极管相似,只是颜色不同[6]。
遥控发射通过键盘,每按下一种键,即产生具备不同编码数字脉冲,这种代码指令信号调制在38KHz载波上,勉励红外光二极管产生不同脉冲,通过空间传送到受控机遥控接受器。P1口作为按键某些,P3.6口作为发射某些。
独立式键盘可工作在查询方式下,通过I/O口读入键状态,当有键被按下时I/O口变为低电平,而未被按下键相应为高电平,这样通过读电平状态可判断与否有键按下和哪个键被按下。
图3-2 红外发射端电路
3.3红外接受电路设计
3.3.1 红外接受模块
HS003B是一种常用红外接受模块。红外接受模块内部具有高频滤波电路,专门用来滤除红外合成信号载波信号(38KHz),并送出接受到信号。模
块有3个引脚;引脚1(GND)为接地端;引脚2(VCC)为为电源正极;引脚3
(OUT)为数字信号输出端。
1 2 3
图3-3 HS003B红外接受模块
3.3.2数码管
表3-1 七段LED字形码
显示字符
共阳极
字符码
共阴极
字符码
0
3FH
C0H
1
06H
F9H
2
5BH
A4H
3
4FH
B0H
4
66H
99H
5
6DH
92H
6
7DH
82H
7
07H
F8H
8
7FH
80H
9
6FH
90H
图3-4 二位数码管显示屏
设计中用到型号为7SEG-MAX2-CA-BLUE二位共阳极数码管显示屏。它左下侧ABCDEFG DP是LED数码管显示屏I/O口,是段选信号,右下侧12是它位选信号,就是从左到右分别是第一位到第二位,段选信号与位选信号分别接到单片机不同输出口,例如段选信号可以接到P2口,位选信号可以接到P3.0口和P3.1口,共阳极字形显示代码为:unsigned char[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90},P3.0输出为0,P3.1输出为1时,选中第二位,段选信号就执行从0到9显示,P3.0输出为1,P3.1输出为0时,选中第一位,段选信号就执行从0到9显示。
3.3.3 彩灯系统
P1口连接8盏彩灯,P1.0和P1.4连接是LED-RED,P1.1和P1.5连接是LED-YELLOW,P1.2和P1.6连接是LED-GREEN,P1.3和P1.7连接是LED-BLUE。依照接受到信号显示不同花型。
图3-5 彩灯系统连接图
3.3.4蜂鸣器系统
P0.0连接蜂鸣器系统,每成功接受到信号,蜂鸣器发出一声响声。
图3-6 蜂鸣器系统连接图
3.3.5红外接受端电路图
图3-7 红外接受端电路图
4 软件设计
4.1 定期/计数器功能简介
AT89C51单片机内部设有两个16位可编程定期/计数器,简称定期器0和定期器1,分别用T0和T1表达。其功能同普通定期计数器,重要作用是:第一,作为一段特定期间长短定期;第二,可以计算由T1或T0引脚输入脉冲数,前者在应用上可以产生对的时间延迟及定期去执行中断服务程序,而后者则是计数器或者计频器设计。
这两个定期器自身有四种工作模式可供使用,如表2所示。
表4-1 四种工作模式
M1 MO
工作方式
功能阐明
0 0
模式0
13位计数器
0 1
模式1
16位计数器
1 0
模式2
8位自动重装计数器
1 1
模式3
定期器0:提成两个8位计数器
定期器1:停止计数
4.2 遥控码发射
当某个操作按键按下时,单片机先读出键值,然后依照键值设定遥控码脉冲个数,再调制成38kHz方波由红外线发光管发射出去[13]。
普通,红外遥控是将遥控信号(二进制脉冲码)调制在38KHz载波上,经缓冲放大后送至红外发光二极管,转化为红外信号发射出去。为了提高抗干扰性能和减少电源消耗,将上述遥控编码脉冲对频率为38KHz(周期为26us)载波信号进行脉幅调制(PAM),再经缓冲放大后送到红外发光管,将遥控信号发射出去。
红外信号发射过程:一方面发射9ms高电平和4.5ms低电平引导码,再发送16位地址码前8位,16位地址码后8位,8位按键数据和8位按键数据反码。
在实践中,采用红外线遥控方式时,由于受遥控距离,角度等影响,使用效果不是较好,如采用调频或调幅发射接受码,可提高遥控距离,并且没有角度影响。
发射控制程序由主程序和键扫描程序、编码发送程序构成,在主程序中,采用键扫描子程序完毕各个按键功能,遥控发射主程序流程图
开始
系统初始化(发送标志清零按键信息置位)
检测并获取按键值
发送按键
发送9ms起始码
发送4.5ms结束码
发送16位地址前8位
发送16位地址后8位
发送8位按键数据
发送8位按键数据反码
(a)红外发射主程序流程图 (b)红外数据发送子程序流程图
图4-1红外发射端程序流程图
4.3 红外接受
红外遥控解码程序重要工作为等待红外线信号浮现,并跳过引导信号,收集持续32位编码数据,并存入内存持续空间。其位信号鉴别原则是:以判断各个位波宽信号来决定高低信号(0或1)。
位解码原理如下:
1) 解码为0:高电平宽度0.56ms+低电平宽度0.56ms。
2) 解码为1:高电平宽度0.56ms+低电平宽度1.68ms。
编码数据读取后,通过单片机将编码数据与键盘代码进行比对,即可解调出详细按键值,便可知按下哪个键,而做出相应控制解决,完毕红外遥控动作。
初始化(开中断,显示初始化)
开始
接受到按键信息
实现相应控制输出
中断开始
接受到引导码
开始接受数据
数据码和数据反码与否相反
成功接受,保存数据
中断返回
Y
Y
N
N
Y
(a) 红外接受主程序流程图 (b)红外接受中断子程序流程图
图4-2 红外接受端程序流程图
5.课程设计总结和心得
这次课程设计耗用了2个星期心血,从一开始拟定课题,到日后资料查找、理论学习,再有就是调试和测试过程,这一切都使我理论知识和动手能力进一步提高。
通过本次红外系统设计,我大有收获。从得到题目到查找资料,从proteus仿真调试到失败后再一次所有重新开始……在这一种布满挑战随着挫折,布满热情随着打击过程中,我感触颇深,它已不但是一种对我三学习知识状况和我应用动手能力检查,并且还是对我钻研精神,面对困难心态,做事毅力和耐心考验。我在这个过程中深刻感受到了做课程设计意义所在。这个课题主线技术就是单片机控制技术,加某些外围电路来实现某些复杂功能。可以依照规定变化软件来实现功能更新和扩展。
本课题重点、难点是:
(1) 考虑电路实现原理以及与单片机接口;
(2) 红外发送与接受技术;
通过完毕本课题,我理解并掌握了红外遥控技术基本理论知识,更进一步掌握单片机在实际电路中开发和应用。为后来从事单片机软硬件产品设计开发打下了一定基本,培养了从事产品研发信心。
参照文献
[1]单片机原理与应用及C51程序设计,夏维成 杨加国 编著,清华大学出版社。
[2] C语言程序设计(第三版),谭浩强 编著,清华大学出版社。
[3] 单片机系统设计与仿真—基于Proteus,肖婧 编著, 北京航空航天大学出版社。
[4] DIY玩转51单片机, 王守中 编著,电子工业出版社。
[5] 单片机侧控技术应用实例解析, 许江淳 陈显宁 陈焰 付丽霞 编著,中华人民共和国电力出版社。
[6] 单片机接口模块应用与开发实例详解, 薛小玲 刘志群 贾俊荣 编著, 北
京航空航天大学出版社。
附录
附录1 Proteus仿真图
附录2 发射程序
#include <REG51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define SBM 0x80
#define m9 (65536-9000)
#define m4_5 (65536-4500)
#define m1_6 (65536-1630)
#define m_65 (65536-580)
#define m_56 (65536-560)
#define m40 (65536-40000)
#define m56 (65536-56000)
#define m2_25 (65536-2250)
sbit IR = P3^6;
sbit LED = P3^7;
uchar KEY(void);
void SanZhuan(void);
void ZZ(uchar x);
void Z0(uchar temp);
void TT0(bit BT,uint x);
void YS(uchar time);
void main(void)
{ TMOD = 0x01;
IR=1;
while(1)
{SanZhuan();}
}
uchar KEY(void)
{uchar H,L;
H=0;
L=0;
P1 = 0xf0;
if(P1!= 0xf0)
{ YS(10);
if(P1!=0xf0)
{H = P1&0xf0;
P1 = 0x0f;
L = P1&0x0f;
}
return (H+L);
}
return 0;
}
void SanZhuan(void)
{ uchar v;
v = KEY();
switch(v)
{case 0x77:ZZ(0x01);v=0;break;
case 0xb7:ZZ(0x02);v=0;break;
case 0xd7:ZZ(0x03);v=0;break;
case 0xe7:ZZ(0x04);v=0;break;
case 0x7b:ZZ(0x05);v=0;break;
case 0xbb:ZZ(0x06);v=0;break;
case 0xdb:ZZ(0x07);v=0;break;
case 0xeb:ZZ(0x08);v=0;break;
case 0x7d:ZZ(0x09);v=0;break;
case 0xbd:ZZ(0x10);v=0;break;
case 0xdd:ZZ(0x11);v=0;break;
case 0xed:ZZ(0x12);v=0;break;
case 0x7e:ZZ(0x13);v=0;break;
case 0xbe:ZZ(0x14);v=0;break;
case 0xde:ZZ(0x15);v=0;break;
case 0xee:ZZ(0x16);v=0;break;
default:v=0;
}
}
void ZZ(uchar x)
{ TT0(1,m9);
TT0(0,m4_5);
Z0(SBM);
Z0(~SBM);
Z0(x);
Z0(~x);
TT0(1,m_65);
TT0(0,m40);
while(KEY())
{ TT0(1,m9);
TT0(0,m2_25);
TT0( 1,m_56);
TT0(0,m40);
TT0(0,m56);
LED = !LED;
}
LED = 1;
}
void Z0(uchar temp)
{ uchar v;
for (v=0;v<8;v++)
{ TT0(1,m_65);
if(temp&0x01) TT0(0,m1_6);
else TT0(0,m_56);
temp >>= 1;
}
}
void TT0(bit BT,uint x)
{
TH0 = x>>8;
TL0 = x;
TF0=0;
TR0=1;
if(BT == 0) while(!TF0);
else while(1)
{
IR = 0;
if(TF0)break;
if(TF0)break;
IR = 1;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
}
TR0=0;
TF0=0;
IR =1;
}
void YS(uchar time)
{ uchar i,j;
for(i=0;i<time;i++)
for(j=0;j<247;j++)_nop_();
}
附录3 接受程序
#include<reg51.h>
sbit IRIN=P3^2;
sbit SPK=P0^0;
sbit RELAY=P2^7;
sbit P3_0=P3^0;
sbit P3_1=P3^1;
unsigned char IRDATA[7];
unsigned char tab[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char X1,X2;
void IRZ();
void XSQ();
void main()
{ EA=1;
EX0=1;
IT0=1;
P1=0xff;
P2=0xc0;
P3_0=0;
P3_1=0;
SPK=1;
IRIN=1;
IRZ();
XSQ();
}
void delay(unsigned char x)
{ unsigned char i;
while(x--)
{for(i=0;i<10;i++){}}
}
void fs_d()
{unsigned char i;
for(i=0;i<100;i++)
{delay(4);
SPK=~SPK;
}
SPK=1;
}
void IR_IN() interrupt 0 using 0
{ unsigned char j,k,n=0;
EX0=0;
delay(20);
if(IRIN==1)
{EX0=1;
return;
}
while(!IRIN){delay(1);}
for(j=0;j<4;j++)
{for(k=0;k<8;k++)
{while(IRIN) {delay(1);}
while(!IRIN) {delay(1);}
while(IRIN)
{delay(1);
n++;
if(n>=30)
{ EX0=1;
return;}
}
IRDATA[j]=IRDATA[j]>>1;
if(n>=8){IRDATA[j]=IRDATA[j]|0x80;}
n=0;}
}
if(IRDATA[2]!=~IRDATA[3])
{EX0=1;
return;
}
else {}
fs_d();
EX0=1;
}
void XSQ()
{ while(1)
{ X1 = IRDATA[2]/16;
X2 = IRDATA[2]%16;
P3_0=1;P3_1=1;P2=tab[X1];P3_0=1;delay(200);
P3_0=1;P3_1=0;P2=tab[X2];delay(200);
}
}
void IRZ()
{ while(1)
{
switch(IRDATA[2])
{ case 0x01:{P1=0xee;break;}
case 0x02:{P1=0xdd;break;}
case 0x03:{P1=0xbb;break;}
case 0x04:{P1=0X77;break;}
case 0x05:{P1=0xf0;break;}
case 0x06:{P1=0x0f;break;}
case 0x07:{P1=0xaa;break;}
case 0x08:{P1=0x55;break;}
case 0x09:{P1=0xe7;break;}
case 0x10:{P1=0xdb;break;}
case 0x11:{P1=0xbd;break;}
case 0x12:{P1=0x7e;break;}
case 0x13:{P1=0xc3;break;}
case 0x14:{P1=0x3c;break;}
case 0x15:{P1=0x00;break;}
case 0x16:{P1=0xff;break;}
}
X1 = IRDATA[2]/16;
X2 = IRDATA[2]%16;
P2=tab[X2];P3_1=1;delay(10);P3_1=0;
P2=tab[X1];P3_0=1;delay(10);P3_0=0;
}
}
展开阅读全文