关于51单片机红外线控制解码的问题 10
#include"reg52.h"#defineucharunsignedchar#defineuintunsignedintsbitirin=P3^2;//红外接收器数...
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit irin = P3 ^ 2; //红外接收器数据线
sbit wela=P2^7;
sbit dula=P2^6;
uchar bitnum,irtime,startflag,irreceok;
uchar irdata[33];
uchar ircode[4];
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void display()
{
dula=1;
P0=table[ircode[0]/16];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(1);
dula=1;
P0=table[ircode[0]%16];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(1);
dula=1;
P0=table[ircode[1]/16];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(1);
dula=1;
P0=table[ircode[1]%16];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay(1);
dula=1;
P0=table[ircode[2]/16];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(1);
dula=1;
P0=table[ircode[2]%16];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay(1);
}
void proce()
{
uchar i,k,j,value;
k=1;
for(j=0;j<4;j++)
{
for(i=0;i<8;i++)
{
value=value>>1;
if(irdata[k]>5)
{
value=value|0x80;
}
k++;
}
ircode[j]=value;
}
}
void int0_init()
{
EA=1;
IT0=1;
EX0=1;
}
void timer0_init()//定时器0工作方式2
{
TMOD=0x02;
TL0=0x00;
TH0=0x00;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
int0_init();
timer0_init();
while(1)
{
if(irreceok)
{
irreceok=0;
proce(); EX0=1;
}
display();
}
}
void timer0() interrupt 1
{
irtime++;
}
void int0() interrupt 0
{
//EX0=0;
//delay(15);
if(startflag)
{
if(irtime>53)
{
bitnum=0;
}
irdata[bitnum]=irtime;
irtime=0;
bitnum++;
if(bitnum==33)
{
bitnum=0;
irreceok=1;
EX0=0;
delay(100);
}
}
else
{
startflag=1;
irtime=0;
}
// EX0=1;
}
每一次按键 第一次数码管上出现的是真确的字符 但再按一下就会出现乱码 按其他按键也是乱码 展开
#define uchar unsigned char
#define uint unsigned int
sbit irin = P3 ^ 2; //红外接收器数据线
sbit wela=P2^7;
sbit dula=P2^6;
uchar bitnum,irtime,startflag,irreceok;
uchar irdata[33];
uchar ircode[4];
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void display()
{
dula=1;
P0=table[ircode[0]/16];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(1);
dula=1;
P0=table[ircode[0]%16];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(1);
dula=1;
P0=table[ircode[1]/16];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(1);
dula=1;
P0=table[ircode[1]%16];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay(1);
dula=1;
P0=table[ircode[2]/16];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(1);
dula=1;
P0=table[ircode[2]%16];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay(1);
}
void proce()
{
uchar i,k,j,value;
k=1;
for(j=0;j<4;j++)
{
for(i=0;i<8;i++)
{
value=value>>1;
if(irdata[k]>5)
{
value=value|0x80;
}
k++;
}
ircode[j]=value;
}
}
void int0_init()
{
EA=1;
IT0=1;
EX0=1;
}
void timer0_init()//定时器0工作方式2
{
TMOD=0x02;
TL0=0x00;
TH0=0x00;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
int0_init();
timer0_init();
while(1)
{
if(irreceok)
{
irreceok=0;
proce(); EX0=1;
}
display();
}
}
void timer0() interrupt 1
{
irtime++;
}
void int0() interrupt 0
{
//EX0=0;
//delay(15);
if(startflag)
{
if(irtime>53)
{
bitnum=0;
}
irdata[bitnum]=irtime;
irtime=0;
bitnum++;
if(bitnum==33)
{
bitnum=0;
irreceok=1;
EX0=0;
delay(100);
}
}
else
{
startflag=1;
irtime=0;
}
// EX0=1;
}
每一次按键 第一次数码管上出现的是真确的字符 但再按一下就会出现乱码 按其他按键也是乱码 展开
2个回答
展开全部
不用按键 直接用程序切换 看下字摸是不是去错了
追问
我刚入手单片机 不太懂 可不可以详细一点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
希卓
2024-10-17 广告
2024-10-17 广告
分布式光纤声音传感(DAS)技术是一种先进的光纤传感解决方案,它利用光纤的瑞利散射特性来连续监测沿光纤长度的声音或振动信号。这一技术通过高精度测量声波引起的光纤相位变化,实现了对外界物理量的定量测量。DAS技术因其高灵敏度、长距离监测以及抗...
点击进入详情页
本回答由希卓提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询