NEC码的遥控器用单片机解码。
首先解码的必须知道 NEC格式是如何的,红外接收头是接收后是怎样的,程序是把红外接收头接收的信号转变成我们看得懂的16进制通过数码管显示出来。
1.NEC格式:可参考SC6122的规格书,引导码是9ms高电平加4.5ms的低电平
接下来是8位客户码和8位客户码的反码,再接下来就是8位数据码和八位数据码的反码
“0”是0.56ms 的高电平和0.56ms的低电平表示
“1”是0.56ms 的高电平和1.69ms的低电平表示
除引导码外总共16位。
2.红外接收头接收后的数据刚好是跟NEC相反,如下:(若加个反相器的话就是一样的,这块板子上没加)
引导码是9ms低电平加4.5ms的高电平
接下来是8位客户码和8位客户码的反码,再接下来就是8位数据码和八位数据码的反码
“0”是0.56ms 的低电平和0.56ms的高电平表示
“1”是0.56ms 的低电平和1.69ms的高电平表示
3.把红外遥控器的接收的数据装换成我们能看的懂的十六进制从数码管显示(p2口控制8个数码的公共脚,P0 控制笔画A,B,C,D,E,F,G)
P3.2位外部中断口
4.程序的基本思路:
判断P3.2的是否有脉冲即是否有接收到信号
再通过判断接收的信号是否符合NEC的引导码的格式,即高低电平的时间是否正确。
不符合的话则判断为干扰信号,不予以处理,等待下次中断
符合则继续解码,通过特定的延时条件去抓到每一位的数据存放与某内存区(此处为1A,1B,1C,1D)共四个八位数据
再把需要显示的客户码和数据码(在1A和1C 存储区里面)通过16进制转换后在数码管显示
<?XML:NAMESPACE PREFIX = V /> 如下
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP INT
MAIN: SETB EA
SETB IT0
SETB EX0
MOV P1, #11111111B
AJMP $
INT: CLR EA
MOV R6,#10
SB:ACALL YS1
JB P3.2,EXIT
DJNZ R6,SB
JNB P3.2, $
ACALL YS2
MOV R1,#1AH
MOV R2,#4
PP:MOV R3,#8
JJJJ:JNB P3.2,$
LCALL YS1
MOV C,P3.2
JNC UUU
LCALL YS3
UUU: MOV A,@R1
RRC A
MOV @R1,A
DJNZ R3,JJJJ;确定第一个八位是否已经存储完成
INC R1;存储位置累加放下一个八位
DJNZ R2,PP;确定四个八位是否已经完成储存
CLR P3.7
LCALL YS2
SETB P3.7;喇叭提示解码成功
MOV R2,#100
DISPLAY: MOV P1,1AH
MOV R1,1AH
MOV A,R1
MOV B,#16
DIV AB;十六进制转换
MOV R6,A;十位送r6
mov R7,B;十位送r6
MOV DPTR,#TABLE
CLR P2.6
MOV A,R7
MOVC A,@A DPTR
MOV P0,A
LCALL YS3
LCALL YS3
SETB P2.6
CLR P2.7
MOV A,R6
MOVC A,@A DPTR
MOV P0,A
LCALL YS3
SETB P2.7
MOV R1,1CH
MOV A,R1
MOV B,#16
DIV AB;十六进制转换
MOV R7,A;十位送r6
mov R6,B;GE位送r6
MOV DPTR,#TABLE
CLR P2.5
MOV A,R7
MOVC A,@A DPTR
MOV P0,A
LCALL YS3
SETB P2.5
CLR P2.4
MOV A,R6
MOVC A,@A DPTR
MOV P0,A
LCALL YS3
SETB P2.4
DJNZ R2,DISPLAY
EXIT:SETB EA
RETI
YS1:MOV R4,#20
D1:MOV R5,#20
DJNZ R5,$
DJNZ R4,D1
RET
YS2:MOV R4,#10
D2:MOV R5,#235
DJNZ R5,$
DJNZ R4,D2
RET
YS3:MOV R4,#2
D3:MOV R5,#248
DJNZ R5,$
DJNZ R4,D3
RET
TABLE:DB 3FH,06H,5BH,4FH,66H;0-4
DB 6DH,7DH,07H,7FH,6FH;5-9
DB 77H,7CH,39H,5EH;A-D
DB 79H,71H;E-F
END
用户1615276 2008-10-1 08:59
用户163410 2008-9-26 18:25
用户6386 2008-9-26 12:55
用户170308 2008-9-26 12:49