📄 红外线遥控器解码程序 汇编语言 经典说明.htm
字号:
onmouseover="if(this.alt) this.style.cursor='hand';"
onclick="if(this.alt) window.open('http://www.xie-gang.com/hw/Image5.gif');"
src="红外线遥控器解码程序 汇编语言 经典说明.files/Image5.gif"
onload="if(this.width>screen.width-333) {this.width=screen.width-333;this.alt='Click Here to Open New Window';}"
border=0> <BR>②单发代码格式 <BR><BR><IMG
onmouseover="if(this.alt) this.style.cursor='hand';"
onclick="if(this.alt) window.open('http://www.xie-gang.com/hw/Image6.gif');"
src="红外线遥控器解码程序 汇编语言 经典说明.files/Image6.gif"
onload="if(this.width>screen.width-333) {this.width=screen.width-333;this.alt='Click Here to Open New Window';}"
border=0> <BR>③连发代码格式 <BR><IMG
onmouseover="if(this.alt) this.style.cursor='hand';"
onclick="if(this.alt) window.open('http://www.xie-gang.com/hw/Image7.gif');"
src="红外线遥控器解码程序 汇编语言 经典说明.files/Image7.gif"
onload="if(this.width>screen.width-333) {this.width=screen.width-333;this.alt='Click Here to Open New Window';}"
border=0><BR>注:代码宽度算法:<BR><BR>16位地址码的最短宽度:1.12×16=18ms
16位地址码的最长宽度:2.24ms×16=36ms
<BR><BR>易知8位数据代码及其8位反代码的宽度和不变:(1.12ms+2.24ms)×8=27ms<BR><BR>∴32位代码的宽度为(18ms+27ms)~(36ms+27ms)<BR><BR>1.
解码的关键是如何识别“0”和“1”,从位的定义我们可以发现“0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,所以必须根据高电平的宽度区别“0”和“1”。如果从0.56ms低电平过后,开始延时,0.56ms以后,若读到的电平为低,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比0.56ms长些,但又不能超过1.12ms,否则如果该位为“0”,读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.84ms左右均可。<BR><BR>2.
根据码的格式,应该等待9ms的起始码和4.5ms的结果码完成后才能读码。<BR><BR> <BR><BR>如果邮购我们开发的51单片机试验板和扩展元件的网友,可以获得如上图所示的红外遥控手柄,这种遥控器的编码格式符合上面的描述规律,而且价格低廉,有32个按键,按键外形比较统一,如果用于批量开发,可以把遥控器上贴膜换成你需要的字符,这为开发产品提供了便利。<BR><BR>接收器及解码<BR><BR>一体化红外线接收器是一种集红外线接收和放大于一体,不需要任何外接元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,而体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输。<BR><BR>下面是一个对51实验板配套的红外线遥控器的解码程序,它可以把上图32键的红外遥控器每一个按键的键值读出来,并且通过实验板上P1口的8个LED显示出来,在解码成功的同时并且能发出“嘀嘀嘀”的提示音。<BR><BR>这是站长最新用单片机AT89C51制作的30路红外遥控器,遥控器就是自家的VCD遥控器,接收板用了5片CD4069作为输出缓冲隔离,当按下遥控器30个按键中的一个,接收板对应的一个触点会变成高电平,松开按键,立即恢复成低电平,和TTL兼容。</TD></TR></TBODY></TABLE></TD></TR>
<TR bgColor=#f8f8f8>
<TD vAlign=center>
<TABLE class=smalltxt cellSpacing=0 cellPadding=0 width="100%"
border=0>
<TBODY>
<TR>
<TD><IMG src="红外线遥控器解码程序 汇编语言 经典说明.files/lastpost.gif"
align=absMiddle> 2005-1-14 19:42</TD>
<TD align=right><SPAN class=bold
align="right">#3</SPAN></TD></TR></TBODY></TABLE></TD>
<TD vAlign=center>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR class=smalltxt>
<TD align=left><A
href="http://freeweb.nyist.net/~xuyuan/luntan/viewpro.php?username=sina3228&sid=5VUbJ06d"><IMG
alt=查看资料 src="红外线遥控器解码程序 汇编语言 经典说明.files/profile.gif"
border=0></A> <A
href="mailto:sina3228@163.com"><IMG alt=发送邮件
src="红外线遥控器解码程序 汇编语言 经典说明.files/email.gif"
border=0></A> <A
href="http://freeweb.nyist.net/~xuyuan/luntan/search.php?srchuname=sina3228&srchfid=all&srchfrom=0&searchsubmit=yes&sid=5VUbJ06d"><IMG
alt=搜索该用户的全部帖子 src="红外线遥控器解码程序 汇编语言 经典说明.files/find.gif"
border=0></A> <A
href="http://freeweb.nyist.net/~xuyuan/luntan/pm.php?action=send&username=sina3228&sid=5VUbJ06d"
target=_blank><IMG alt=发短消息
src="红外线遥控器解码程序 汇编语言 经典说明.files/pm.gif"
border=0></A> <A
href="http://search.tencent.com/cgi-bin/friend/user_show_info?ln=15149327"
target=_blank><IMG alt=OICQ
src="红外线遥控器解码程序 汇编语言 经典说明.files/oicq.gif"
border=0></A> </TD>
<TD align=right> <A
href="http://freeweb.nyist.net/~xuyuan/luntan/post.php?action=edit&fid=6&tid=383&pid=2053&page=1&sid=5VUbJ06d"><IMG
alt=编辑帖子 src="红外线遥控器解码程序 汇编语言 经典说明.files/edit.gif"
border=0></A> <A
href="http://freeweb.nyist.net/~xuyuan/luntan/post.php?action=reply&fid=6&tid=383&repquote=2053&sid=5VUbJ06d"><IMG
alt=引用回复 src="红外线遥控器解码程序 汇编语言 经典说明.files/quote.gif"
border=0></A>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></A><A
name=pid2054>
<TABLE cellSpacing=0 cellPadding=0 width="98%" align=center border=0>
<TBODY>
<TR>
<TD bgColor=#000000>
<TABLE style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word"
cellSpacing=1 cellPadding=4 width="100%" border=0>
<TBODY>
<TR bgColor=#ffffff>
<TD vAlign=top width="21%"><SPAN class=bold
?>sina3228</SPAN><BR><SPAN class=smalltxt>支柱会员<BR><IMG
src="红外线遥控器解码程序 汇编语言 经典说明.files/star.gif"><IMG
src="红外线遥控器解码程序 汇编语言 经典说明.files/star.gif"><IMG
src="红外线遥控器解码程序 汇编语言 经典说明.files/star.gif"><IMG
src="红外线遥控器解码程序 汇编语言 经典说明.files/star.gif"><BR><BR>
<TABLE style="TABLE-LAYOUT: fixed" cellSpacing=0 cellPadding=0
width="95%" border=0>
<TBODY>
<TR>
<TD align=middle><IMG
src="红外线遥控器解码程序 汇编语言 经典说明.files/06.gif"
border=0></TD></TR></TBODY></TABLE><BR>积分 402<BR>发贴
75<BR>性别 男 <BR>注册 2004-9-8<BR>来自 理工学院 电子02912班<BR>状态 离线
</SPAN></TD>
<TD height="100%">
<TABLE style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word"
height="100%" cellSpacing=0 cellPadding=0 width="100%"
border=0>
<TBODY>
<TR>
<TD vAlign=top><SPAN class=bold><SPAN
class=smalltxt></SPAN></SPAN>红外遥控器软件解码原理及程序 <BR>
<BR>红外一开始发送一段13.5ms的引导码,引导码由9ms的高电平和4.5ms的低电平组成,跟着引导码是系统码,系统反码,按键码,按键反码,如果按着键不放,则遥控器则发送一段重复码,重复码由9ms的高电平,2.25ms的低电平,跟着是一个短脉冲,本程序经过试用,能解大部分遥控器的编码!<BR><BR>#include
"at89x52.h"<BR>#define NULL 0x00//数据无效<BR>#define RESET
0X01//程序复位<BR>#define REQUEST 0X02//请求信号<BR>#define ACK
0x03//应答信号,在接收数据后发送ACK信号表示数据接收正确,也位请求信号的应答信号<BR>#define
NACK 0x04//应答信号,表示接收数据错误<BR>#define BUSY
0x05//忙信号,表示正在忙<BR>#define FREE
0x06//空闲信号,表示处于空闲状态<BR>#define READ_IR
0x0b//读取红外<BR>#define STORE_IR 0x0c//保存数据<BR>#define
READ_KEY 0x0d//读取键值<BR>#define RECEIVE
0Xf400//接收缓冲开始地址<BR>#define SEND
0xfa00//发送缓冲开始地址<BR>#define IR
0x50//红外接收缓冲开始地址<BR>#define HEAD 0xaa//数据帧头<BR>#define
TAIL 0x55//数据帧尾<BR>#define SDA P1_7<BR>#define SCL
P1_6<BR><BR><BR><BR>unsigned char xdata *buf1;
//接受数据缓冲<BR>unsigned int buf1_length;
//接收到的数据实际长度<BR>unsigned char xdata *buf2;
//发送数据缓冲<BR>unsigned int buf2_length;
//要发送的数据实际长度<BR>bit buf1_flag;
//接收标志,1表示接受到一个数据帧,0表示没有接受到数据帧或数据帧为空<BR>bit buf2_flag;
//发送标志,1表示需要发送或没发送完毕,0表示没有要发送的数据或发送完毕<BR>unsigned char
state1,state2;
//用来标志接收字符的状态,state1用来表示接收状态,state2用来表示发送状态<BR>unsigned
char data *ir;<BR>union{<BR>unsigned char
a[2];<BR>unsigned int b;<BR>unsigned char data
*p1[2];<BR>unsigned int data *p2[2];<BR>unsigned char
xdata *p3; //红外缓冲的指针<BR>unsigned int xdata
*p4;<BR>}p;<BR>//union{ //<BR>// unsigned char a[2];
//<BR>// unsigned int b;<BR>// unsigned char data
*p1[2];<BR>// unsigned int data *p2[2];<BR>// unsigned
char xdata *p3;<BR>// unsigned int xdata *p4;
//地址指针<BR>//}q; //<BR><BR>union{<BR>unsigned char
a[2];<BR>unsigned int
b;<BR>}count;<BR>union{<BR>unsigned char
a[2];<BR>unsigned int b;<BR>}temp;<BR>union{<BR>unsigned
char a[4];<BR>unsigned int b[2];<BR>unsigned long
c;<BR>}ir_code;<BR><BR>union{<BR>unsigned char
a[4];<BR>unsigned int b[2];<BR>unsigned long
c;<BR>unsigned char data *p1[4];<BR>unsigned int data
*p2[4];<BR>unsigned char xdata *p3[2];<BR>unsigned int
xdata *p4[2];<BR>}i;<BR>unsigned char ir_key;<BR>bit
ir_flag; //红外接收标志,0为缓冲区空,1为接收成功,2为缓冲溢出<BR>void
sub(void);<BR>void delay(void);<BR>void
ie_0(void);<BR>void tf_0(void);<BR>void
ie_1(void);<BR>void tf_1(void);<BR>void
tf_2(void);<BR>void read_ir(void);<BR>void
ir_jiema(void);<BR>void ir_init(void);<BR>void
ir_exit(void);<BR>void store_ir(void);<BR>void
read_key(void);<BR>void reset_iic(void);<BR>unsigned
char read_byte_ack_iic(void);<BR>unsigned char
read_byte_nack_iic(void);<BR>bit write_byte_iic(unsigned
char a);<BR>void send_ack_iic(void);<BR>void
send_nack_iic(void);<BR>bit
receive_ack_iic(void);<BR>void start_iic(void);<BR>void
stop_iic(void);<BR>void write_key_data(unsigned char
a);<BR>unsigned int read_key_data(unsigned char
a);<BR>void ie0(void) interrupt 0{ie_0();}<BR>void
tf0(void) interrupt 1{tf_0();}<BR>void ie1(void)
interrupt 2{ie_1();}<BR>void tf1(void) interrupt
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -