資源簡介
紅外線編碼是數據傳輸和家用電器遙控常用的一種通訊方法,其實質是一種脈寬調制的串行通訊。家電遙控
中常用的紅外線編碼電路有μPD6121G型HT622型和7461型等。
這里就以這些電路的編碼格式來仿真怎樣使用單片機的捕獲中斷功能來實現其解碼。 紅外線通訊的發送部
分主要是把待發送的數據轉換成一定格式的脈沖,然后驅動紅外發光管向外發送數據。接收部分則是完成紅外
線的接收、放大、解調,還原成同步發射格式相同(但高、低電位剛好相反的脈沖信號)。這些工作通常由一體
化的接收頭來完成,主要輸出TTL兼容電平。最后通過解碼把脈沖信號轉換成數據,從而實現數據的傳輸。
本單元就是來完成一體化接收頭接受到的紅外遙控器編碼后的輸出數據,所以只要單片機完成本單元的解碼任
務,并成功實現之后,只要將IR引腳接上紅外接收頭之后就可以實現紅外遙控的功能了。
這是我積累前人經驗和自己實踐的成果,并且已經有硬件的成功案例,并非只是理論.

代碼片段和文件信息
#include??
static?bit?OP;????????//紅外發射管的亮滅
static?unsigned?int?count;???????//延時計數器
static?unsigned?int?endcount;?//終止延時計數
static?unsigned?char?Flag;??????//紅外發送標志
char?iraddr1;??//十六位地址的第一個字節
char?iraddr2;??//十六位地址的第二個字節
void?SendIRdata(char?p_irdata);
void?delay();
char?getkey()
{
??P1=0xfe;P3_6=P3_7=1;P3_3=1;
??if(!P1_4)return?1;???//ON
??if(!P1_5)return?2;???//7
??if(!P1_6)return?3;???//8
??if(!P1_7)return?4;???//9
??if(!P3_6)return?5;???//X
??if(!P3_7)return?6;???//÷
??P1=0xfd;
??if(!P1_4)return?11;?//+-
??if(!P1_5)return?12;?//4
??if(!P1_6)return?13;?//5
??if(!P1_7)return?14;?//6
??if(!P3_6)return?15;?//-
??if(!P3_7)return?16;?//MRC
??P1=0xfb;
??if(!P1_4)return?21;?//%
??if(!P1_5)return?22;?//1
??if(!P1_6)return?23;?//2
??if(!P1_7)return?24;?//3
??if(!P3_6)return?25;?//+
??if(!P3_7)return?26;?//M-
??P1=0xf7;
??if(!P1_4)return?31;?//□
??if(!P1_5)return?32;?//0
??if(!P1_6)return?33;?//.
??if(!P1_7)return?34;?//=
??if(!P3_6)return?35;?//+
??if(!P3_7)return?36;?//M+
??P1=0xfF;P3_3=0;
??if(!P1_4)return?41;?//
??if(!P1_5)return?42;?//
??if(!P1_6)return?43;?//
??if(!P1_7)return?44;?//
??if(!P3_6)return?45;?//
??if(!P3_7)return?46;?//
??return?0;
}
void?main(void)?
{
??char?key;
??count?=?0;
??Flag?=?0;
??OP?=?0;
??P3_4?=?1;
??EA?=?1;?//允許CPU中斷?
??TMOD?=?0x11;?//設定時器0和1為16位模式1?
??ET0?=?1;?//定時器0中斷允許?
??P1=0xff;
??TH0?=?0xFF;?
??TL0?=?0xE6;?//設定時值0為38K?也就是每隔26us中斷一次??
??TR0?=?1;//開始計數
??iraddr1=0xff;
??iraddr2=0xff;
??do{
??key=getkey();
??????if(key==1)SendIRdata(0x12);//set
??????if(key==11)SendIRdata(0x0b);//exit
??????if(key==25||key==35)SendIRdata(0x1a);//+
??????if(key==15)SendIRdata(0x1e);//-
??????if(key==6)SendIRdata(0x0e);//↑?÷
??????if(key==16)SendIRdata(0x1d);//↓?MRC
??????if(key==26)SendIRdata(0x1f);//←?M-
??????if(key==36)SendIRdata(0x1b);//→?M+
??????if(key==32)SendIRdata(0x00);//0
??????if(key==22)SendIRdata(0x01);//1
??????if(key==23)SendIRdata(0x02);//2
??????if(key==24)SendIRdata(0x03);//3
??????if(key==12)SendIRdata(0x04);//4
??????if(key==13)SendIRdata(0x05);//5
??????if(key==14)SendIRdata(0x06);//6
??????if(key==2)SendIRdata(0x07);//7
??????if(key==3)SendIRdata(0x08);//8
??????if(key==4)SendIRdata(0x09);//9
??????if(key==21)SendIRdata(0x2A);//%
??????if(key==5)SendIRdata(0x2B);//X
??????if(key==33)SendIRdata(0x2C);//.
??????if(key==34)SendIRdata(0x2D);//=
??????if(key==31)SendIRdata(0x2E);//□
??????if(key==41)SendIRdata(0x2F);//
??????if(key==42)SendIRdata(0x30);//
??????if(key==43)SendIRdata(0x31);//
??????if(key==44)SendIRdata(0x32);//
??????if(key==45)SendIRdata(0x33);//
??????if(key==46)SendIRdata(0x34);//
??}while(1);
}?
//定時器0中斷處理?
void?timeint(void)?interrupt?1?
{?
??TH0=0xFF;?
??TL0=0xE6;?//設定時值為38K?也就是每隔26us中斷一次
??count++;
}?
void?SendIRdata(char?p_irdata)
{
??int?i;
??char?irdata=p_irdata;
??//發送9ms的起始碼
??endcount=223;
??Flag=1;
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????149931??2008-08-04?20:07??proteus做得紅外仿真\紅外遙控模擬\Last?Loaded?紅外遙控的仿真.DBK
?????文件???????5196??2008-08-04?22:06??proteus做得紅外仿真\紅外遙控模擬\main.c
?????文件??????10149??2008-08-04?22:06??proteus做得紅外仿真\紅外遙控模擬\main.LST
?????文件??????13217??2008-08-04?22:06??proteus做得紅外仿真\紅外遙控模擬\main.OBJ
?????文件??????10482??2007-11-01?21:52??proteus做得紅外仿真\紅外遙控模擬\紅外遙控
?????文件?????????44??2007-11-01?21:52??proteus做得紅外仿真\紅外遙控模擬\紅外遙控.lnp
?????文件??????12468??2007-11-01?21:52??proteus做得紅外仿真\紅外遙控模擬\紅外遙控.M51
?????文件???????1535??2008-08-04?22:53??proteus做得紅外仿真\紅外遙控模擬\紅外遙控.Opt
?????文件????????166??2008-01-15?12:19??proteus做得紅外仿真\紅外遙控模擬\紅外遙控.plg
?????文件???????1652??2008-08-04?22:53??proteus做得紅外仿真\紅外遙控模擬\紅外遙控.Uv2
?????文件?????149931??2008-11-21?19:17??proteus做得紅外仿真\紅外遙控模擬\紅外遙控的仿真.DSN
?????文件???????3463??2009-12-07?19:57??proteus做得紅外仿真\紅外遙控模擬\紅外遙控的仿真.PWI
?????文件??????22584??2008-08-04?22:08??proteus做得紅外仿真\紅外遙控模擬\解碼
?????文件???????3779??2008-08-04?22:06??proteus做得紅外仿真\紅外遙控模擬\解碼.c
?????文件???????7303??2008-08-04?22:08??proteus做得紅外仿真\紅外遙控模擬\解碼.hex
?????文件?????????41??2008-08-04?22:08??proteus做得紅外仿真\紅外遙控模擬\解碼.lnp
?????文件???????7575??2008-08-04?22:08??proteus做得紅外仿真\紅外遙控模擬\解碼.LST
?????文件??????24972??2008-08-04?22:08??proteus做得紅外仿真\紅外遙控模擬\解碼.M51
?????文件??????14968??2008-08-04?22:08??proteus做得紅外仿真\紅外遙控模擬\解碼.OBJ
?????文件???????1604??2008-11-21?19:25??proteus做得紅外仿真\紅外遙控模擬\解碼.Opt
?????文件????????202??2008-11-21?19:25??proteus做得紅外仿真\紅外遙控模擬\解碼.plg
?????文件???????1963??2008-11-21?19:25??proteus做得紅外仿真\紅外遙控模擬\解碼.Uv2
?????文件???????3609??2008-01-15?13:55??proteus做得紅外仿真\紅外遙控模擬\解碼LCD.c
?????文件???????6629??2008-08-04?22:08??proteus做得紅外仿真\紅外遙控模擬\解碼LCD.LST
?????文件??????10091??2008-08-04?22:08??proteus做得紅外仿真\紅外遙控模擬\解碼LCD.OBJ
?????文件???????1573??2008-08-04?22:53??proteus做得紅外仿真\紅外遙控模擬\解碼_Opt.Bak
?????文件???????1676??2008-08-04?22:53??proteus做得紅外仿真\紅外遙控模擬\解碼_Uv2.Bak
?????文件??????11166??2008-08-04?22:06??proteus做得紅外仿真\紅外遙控模擬\遙控
?????文件???????3122??2008-08-04?22:06??proteus做得紅外仿真\紅外遙控模擬\遙控.hex
?????文件?????????40??2008-08-04?22:06??proteus做得紅外仿真\紅外遙控模擬\遙控.lnp
............此處省略7個文件信息
- 上一篇:Dimens 文件生成器
- 下一篇:fastdfs-5.05.tar.gz
評論
共有 條評論