最簡單的51單片機(jī)紅外遙控解碼程序
用單片機(jī)進(jìn)行紅外遙控解碼,對大多數(shù)初學(xué)者來說是很麻煩的一個(gè)問題。下面介紹本人自編的紅外遙控解碼的C51程序,自認(rèn)為是可能是史上最簡的。此程序是針對uPD6121系列的遙控器的取碼程序,解碼值在Im[2]中,當(dāng)IrOK=1時(shí)解碼有效。
/* 適用uPD6121系列 */
#include
#define DIGPORT P2
#define WORDPORT P0
unsigned char code LED_num[]={0x3f,0x18,0x76,0x7c,0x59,0x6d,0x6f,0x38,0x7f,0x7d};
#define Imax 14000 //此處為晶振為11.0592時(shí)的取值,
#define Imin 8000 //如用其它頻率的晶振時(shí),
#define Inum 1450 //要改變相應(yīng)的取值。
unsigned char Im[]={0x00,0x00,0x00,0x00};
unsigned long m,Tc;
unsigned char i,IrOK;
void DelayMy(unsigned int t){
while(--t);
}
void Display_LED(unsigned long num)
{
unsigned int ii;
unsigned int jj=0;
unsigned long aa,bb;
unsigned int xx[8]={0,0,0,0,0,0,0,0};
do {
bb=num/10;
aa=num-bb*10;
xx[jj]=aa;
num=bb;jj++;
}
while(num>0);
DIGPORT=0x80;
for(ii=0;ii8;ii++) {
WORDPORT=LED_num[xx[ii]];
DelayMy(60);
DIGPORT=DIGPORT>>1;
};
WORDPORT=0;
}
//外部中斷解碼程序
void intersvr1(void) interrupt 2 using 1
{
Tc=TH0*256+TL0; //提取中斷時(shí)間間隔時(shí)長
TH0=0; TL0=0; //定時(shí)中斷重新置零
if((Tc>Imin)(Tc
if(Tc>Inum) Im[m/8]=Im[m/8]>>1|0x80; else Im[m/8]=Im[m/8]>>1; //取碼
if(m==32) if((Im[2]|0x01)==~Im[3]) IrOK=1; else IrOK=0; //取碼完成后判斷讀碼是否正確
m++; //準(zhǔn)備讀下一碼
}
/*演示主程序*/
void
萬能遙控器相關(guān)文章:萬能遙控器代碼
51單片機(jī)相關(guān)文章:51單片機(jī)教程
單片機(jī)相關(guān)文章:單片機(jī)教程
單片機(jī)相關(guān)文章:單片機(jī)視頻教程
單片機(jī)相關(guān)文章:單片機(jī)工作原理
晶振相關(guān)文章:晶振原理
評論