51单片机红外接收解码程序
接收以S52单片机作为接收系统。以S52的P33口作为接收端口该
端口是外部中断1。
这个接受程序是以XC866作为红外发送控制系统接收程序如下:
i
cludereg52h
头文件
i
cludei
tri
sh
defi
eucharu
sig
edchar
宏定义
defi
eui
tu
sig
edi
t
sbitHWRxP33
位声明
codeucharTable共阴数码管09af表
0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f
0x770x7c0x390x5e0x790x710x40
ucharTable_Data800000000用于显示的数组
ucharTable_Rx67用于存储判断接收是1或0的参数
voidDelay延时子函数
voidDisplayucharlpucharlc显示
uchari
定义变量
P20
端口2为输出关闭
P1P10xF8
将P1口的前3位输出0对应138
译门输入脚全0为第一位数码管
fori0ilci循环显示采用动态扫描
f
P2Tablelpi查表法得到要显示数字的数码段
iflpi0x7f
P20x80
Delay延时
P20
清0端口准备显示下位
ifi7
检测显示完8位否完成直接退出不让P1
口再加1
否则进位影响到第四位数据
break
P1
点亮下一位数码管
voidmai
主函数
EA1EX11IT11
while1
首先开启总中断开启外部中断1设置成下降沿触发方式一直显示其它由中断处理
f
DisplayTable_Data8
voidDelay
延时时间大约为31us晶振12M
uchari13
whilei
i
voidDelay_msui
tz延时时间约为1msX晶振为12M
ui
tx0y0
forxzx0x
fory54y0y
voidho
gwai
i
terrupt2
外部中断1INT1〔P33连
接红外线接收IC数据脚
ucharijtmp
EX10关闭中断
j33传送一组数包括引导码1位4个八
位数据总共33位
fi0
从第一维数组开始
续没有则退出
Delay_ms10ifHWRx然后再检测红线接收脚是有数据招收有继
EX11retur
whilej循环接收33位数据为何我们用到66位数组我们可以不接收高电平
时间常数只接低电平常数就可以判断1或0了在这里我们都接收还有一点要知道
接收波形是反向在没有接收时端口为高电平
tmp0Table_Rxi1时间量从1开始
whileHWRx检测高低电平的变化这里检测的是高电平
f
Table_Rxi没变继续加1
Delay
家一个延时防
止计数值一下子就加满了
tmp
加1
iftmp250
break
i
tmp0
Table_Rxi1
时间量从1开始
whileHWRx
检测高低电
平的变化这里检测的是低电平
Table_Rxi没变继
续加1
Delay
同上
tmp
加1
用于判断是1还是0的低电平来了
iftmp250
break
f
i
P10xf8
i200
加入循环延时抗干r