?? 紅外遙控接收.c
字號:
/*****************************************************************************
程 序 名:51AVR實驗板配套程序 - TC9012紅外接收顯示程序
開發環境:Keil
編 寫 者:www.01mcu.net
功能簡述:接收TC9012紅外線發射信號,將收到的數據以HEX方式顯示到數碼管上
硬件說明:紅外接收輸出腳已經接到INT0(P3.2)上了,直接使用就是了
晶體為12MHz
其它說明:關于TC9012詳情,請參閱實驗目錄下的器件手冊
完成日期:2008.06.23
參考資料:
TC-9012型遙控器實測數據
key code (hex)
1 0x00
2 0x01
3 0x02
4 0x03
5 0x04
6 0x05
7 0x06
8 0x07
9 0x08
0 0x09
--/- 0x0a
頻道+ 0x10
頻道- 0x11
音量+ 0x12(對于RM-F2型萬能遙控器的“快搜”鍵相當于“音量+”)
音量- 0x13
POWER 0x14
MUTE 0x15
菜單 0x17
睡眠 0x18
往復 0x1a
******************************************************************************/
#include <reg51.h>
unsigned char rdata=0x00;
sbit remin=P3^2;
sbit ls1=P0^2; //個位公共極
sbit ls2=P0^3; //十位公共極
#define Out P1 //數據輸出端
unsigned char tab[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xa0,0x83,0xa7,0xa1,0x84,0x8e}; //共陽
//0 1 2 3 4 5 6 7 8 9 a b c d e f
//延時----------------------------
Delay(unsigned int t)
{
while(t--);
}
//顯示----------------------------
void Display(unsigned char mun)
{
unsigned char i1,i2,j;
i1=(mun & 0xf0)>>4; //提取高位
i2=mun & 0x0f;
for(j=0;j<50;j++)
{
Out=tab[i2];
ls1=0;
Delay(100);
ls1=1;
Out=tab[i1];
ls2=0;
Delay(100);
ls2=1;
}
}
//--主程序---------------------------------------------------------
main()
{
EA=EX0=1;
while(1)
{
Display(rdata);
}
}
//----TC9012遙控芯片解碼程序----------------------------------------
//關于以下程序原理,請先閱讀TC9012芯片的編碼規則
REM()interrupt 0 using 1
{
unsigned int x;
unsigned char a,b,c,remdata1[4];
for(x=0;!remin&&x<0x180;x++); //引導碼
if(x<0x100||x>0x160) goto remout;
for(x=0;remin&&x<0x180;x++);
if(x<0x100||x>0x160) goto remout;
TF0=TH0=TL0=a=b=c=0,TMOD|=1,TR0=1;
do
{while(b<8)
{while(!TF0&&!remin);if(TF0)goto remout;
while(remin);if(TF0)goto remout;
a>>=1;if(TH0>6)a|=0x80;TH0=TL0=0;b++;
}b=0;remdata1[c]=a;a=0;
}
while(c++<3); // 地址嗎效驗
if(remdata1[0]==remdata1[1]){if(remdata1[2]==~remdata1[3])rdata=remdata1[2];}// 指令校驗
remout:
;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -