调试了好几天了,都没有成功,还请高手帮忙看一下程序是否有问题.谢谢
一体红外接收头接到P3^2脚上,
#include <at89x52.h>
#include <1602LCD.h>
#define uchar unsigned char
sbit IR=P3^2; //接收头
sbit sp=P2^1; //蜂鸣器
bit ok; //解码成功标志
static unsigned int a,d;
extern display_long_char(uchar x,uchar y,uchar *pa);
void display_char (uchar x,uchar y,uchar temp);
extern void INIT_LCD (void);
unsigned char code tab1[16]={" LCD REMOTE TSET"};
void beep (void) //蜂鸣器程序
{
unsigned int t;
t=50000;
sp=0;
while (t)
{t--;}
sp=1;
}
void delay840ns (void) //延时0.84ms
{
unsigned int t=860;
while (t--);
}
void delay9ms (void) //延时9ms
{
unsigned int t=50000;
unsigned int a;
while (t--)
{
for (a=60;a<=0;a--);
}
}
void starting (void) //初始化中断
{
IT0=1;
EX0=1;
EA=1;
}
void hex_bin (unsigned int r,unsigned int t) //转换程序
{
unsigned char a1,a2,d1,d2;
a1=(char)r&0xff;
a2=(char)r>>8;
d1=(char)t&0xff;
d2=(char)t>>8;
display_char (2,2,a1+0x30);
display_char (2,3,'A');
}
main ()
{
beep ();
INIT_LCD ();
display_long_char (1,1,tab1);
starting (); //初始化
while (1)
{
display_long_char (1,1,tab1);
if (ok) hex_bin (a,d);
}
}
void remote (void) interrupt 0
{
unsigned char i;
a=0;
d=0;
EA=1;
return;
delay9ms ();
if (IR) while (IR) if (!IR) {EA=1;ok=0;return;} //等等4.5MS结果码
else {EA=1;ok=0;return;} //出错返回
while (IR==0);
for (i=0;i<16;i++)
{
delay840ns ();
if (IR==1) {a=(a>>1)|0x80;while (IR==1);} //取0
else a=(a>>1); //取1
while (IR==0);
}
for (i=0;i<16;i++)
{
delay840ns ();
if (IR==1) {d=(d<<1)|1;while (IR==1);} //取0
else d=(d<<1); //取1
while (IR==0);
}
beep ();
ok=1;
EA=1;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>