i
cludereg52h
包含头文件
名
sbitIRINP32
定义红外接收
头的外部接口,即外部中断0
sbitBEEPP15
定义蜂
鸣器接口,我的在P15
u
sig
edcharIRCOM7定义数
组,用来存储红外接收到的数据
voiddelayu
sig
edcharx
延时子程序
u
sig
edchari
延时约
x014ms
whilex
不同遥控器应设
置不同的参数
ffori0i13i咱们先不管,先看这个
参数的选择
voidbeep
u
sig
edchari声子程序
蜂鸣器发
fori0i100i
delay4
这个得看你的蜂
鸣器内部是否有振荡源
BEEPBEEP
如果没有振荡源就
应该输入脉冲信号
BEEP1
fvoidIR_INi
terrupt0usi
g0外部中断0程序
u
sig
edcharjk
0变量,记住
0
EX00以免再次进入中断
先定义禁止中断,
delay15
延
时
014ms1521ms
ifIRIN1高电平说明
如果在这期间有
信号不是来自遥控
的,返回主程序
EX01
retur
whileIRINdelay1死循环,等待9ms前导低电平信号的结束
forj0j4j数据
一共有4组
f
fork0k8k有8位
每组数据
whileIRINdelay1死循环,等待45ms前导高电平的结束
whileIRINdelay1等待056ms低电平的结束,准备采集数据,
whileIRIN据
开始采集数
delay1
延时014ms,
每过014ms时
就加1
用
记录一共
有多少个014ms
if
30014ms3042ms
如果超过
f不要
EX01retur
说明是乱码,放弃
IRCOMjIRCOMj1右移1位,xxxxxxxx变成0xxxxxx
我们先认为这一位数据是0,现在已经送入一位数据了你肯定知道_cror_x1和x1的区别吧
if
8IRCOMjIRCOMj0x80但是如果不是0呢,
0xxxxxxx和0x80相或后变成了1xxxxxxx
这样这一们数据就被记录为1了
f想一下这里为什么是8呢,014ms8112ms,知道了吧
这样反复执行8次,8位数据就存在
IRCOMj中了
外层再循环4次,4832位数据码全
都
在
IRCOM0IRCOM1IRCOM2IRCOM3中了
0
计数后一定要记得清0,否则下一次就不能准确计数了
ifIRCOM2IRCOM3这里
我们判断数据码和数据反码是不是相反
因为相反才是正
确的,否则就放弃
EX01
retur
beep
fEX01
记得开中断,你可
以去掉这句话试一试
voidmai
IE0x81TCON0X01BEEP1IRIN1while1
怎么样,你看懂了吗?
作者:任杰
fr