标题:
关于stc15单片机 为什么红外遥控按了没反应,8位数码管就都显示0
[打印本页]
作者:
lxb
时间:
2017-12-26 15:44
标题:
关于stc15单片机 为什么红外遥控按了没反应,8位数码管就都显示0
求助各为大神,帮忙分析下这个程序,为什么红外遥控按了没反应,8位数码管就都显示0
#include <stc15.h>
#define uchar unsigned char
#define uint unsigned int
uchar code led_xs[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8E};
uchar code led_wei[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
uchar t;
sbit IR=P3^2;
bit irok;//红外接收完标志位
bit ieok;//红外处理完标志位
uchar Ir_cd[4];
uchar Ir_data[33];
void iint();//设置准双向口
void init();//外部中断0初始化
void intt();//定时器0初始化
void hwjmcl(); //红外解码处理
void hwmzzh();//红外码值转换处理显示
void delay(uint t);
void main()
{
intt();//设置准双向口
iint();//外部中断0初始化
init();//定时器0初始化
while(1)
{
if(irok)
{
irok=0;
ET0=0; //禁止定时器0中断
hwjmcl();//红外解码处理
}
if(ieok)
{
ieok=0;
}
hwmzzh(); //红外码值转换处理显示
}
}
void hwjmcl() //红外解码处理
{
uchar i,j,k=1,value=0;
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
value>>=1;
if(Ir_data[k]>6)
{
value|=0x80;
}
k++;
}
Ir_cd[i]=value;
}
ieok=1;
}
void hwmzzh() //红外码值转换处理显示
{
P2=led_xs[Ir_cd[0]/16];
P0=led_wei[0];delay(1);P0=0xFF;
P2=led_xs[Ir_cd[0]%16];
P0=led_wei[1];delay(1);P0=0xFF;
P2=led_xs[Ir_cd[1]/16];
P0=led_wei[2];delay(1);P0=0xFF;
P2=led_xs[Ir_cd[1]%16];
P0=led_wei[3];delay(1);P0=0xFF;
P2=led_xs[Ir_cd[2]/16];
P0=led_wei[4];delay(1);P0=0xFF;
P2=led_xs[Ir_cd[2]%16];
P0=led_wei[5];delay(1);P0=0xFF;
P2=led_xs[Ir_cd[3]/16];
P0=led_wei[6];delay(1);P0=0xFF;
P2=led_xs[Ir_cd[3]%16];
P0=led_wei[7];delay(1);P0=0xFF;
}
void time_0(void) interrupt 1 //定时器0中断服务函数
{
t++;
}
void INT_0(void) interrupt 0 //外部中断0服务函数
{
static uchar i;
static bit flag;
ET0=1;
if(t>35)
{
flag=1;
i=0;
}
if(flag)
{
Ir_data[i]=t;
i++;
t=0;
if(i>=33)
{
i=0;
flag=0;
irok=1;
}
}
}
void delay(uint t)
{
uint i,j;
for(i=t;i<50;i++)
for(j=25;j>0;j--);
}
void init()
{
TMOD&=0xF0;
TMOD|=0x02;
TH0=0;
TL0=0;
TR0=1;
}
void iint()
{
IT0=1;
EX0=1;
EA=1;
}
void intt()
{
P0M0=0;P0M1=0;
P1M0=0;P1M1=0;
P2M0=0;P2M1=0;
P3M0=0;P3M1=0;
P4M0=0;P4M1=0;
P5M0=0;P5M1=0;
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1