×
模拟电路设计 > 详情

最简单的51单片机红外遥控解码程序

发布时间:2020-07-01 发布时间:
|

用单片机进行红外遥控解码,对大多数初学者来说是很麻烦的一个问题。下面介绍本人自编的红外遥控解码的C51程序,自认为是可能是史上最简的。此程序是针对uPD6121系列的遥控器的取码程序,解码值在Im[2]中,当IrOK=1时解码有效。

/* 51单片机红外遥控解码程序 */

/* 适用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时的取值,

#define Imin 8000 //如用其它频率的晶振时,

#define Inum 1450 //要改变相应的取值。

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; //提取中断时间间隔时长

TH0=0; TL0=0; //定时中断重新置零

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++; //准备读下一码

}

/*演示主程序*/





『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
什么叫一体化温度变送器