我写了一个基于51单片机的红外线解码程序,芯片是WD6122,语法没有错误,但还是不能用,高手帮忙看看,
//************************************************//***************头文件和宏定义**********#...
//************************************************
//***************头文件和宏定义**********
#include"reg51.h"
#include"intrins.h"
#define uint unsigned int
#define uchar unsigned char
//uchar hw_tab[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
sbit RS=P2^5;
sbit RW=P2^6;
sbit E=P2^7;
sbit js=P3^3;
uchar m;
uint a[4],mun[8];
uint lowtime,hightime;
uchar code tab[]={"I LOVE MCU"};
void delay(uchar i)
{
uchar j=250;
for(;i>0;i--)
{
while(--j);
j=250;
while(--j);
j=250;
}
}
void wr_com(uchar com)//写命令//
{
RS=0;
RW=0;
E=0;
P0=com;
delay(1000);
E=1;
delay(1000);
E=0;
}
void wr_dat(uchar dat)//写数据//
{
E=0;
RS=1;
RW=0;
P0=dat;
delay(1000);
E=1;
delay(1000);
E=0;
}
void initial()//lcd1602初始化//
{ uchar i;
wr_com(0x01);
delay(1000);
wr_com(0x06);
delay(1000);
wr_com(0x0c);
delay(1000);
wr_com(0x38);
delay(1000);
wr_com(0xd0);
delay(1000);
wr_com(0x80+0x50);
delay(1000);
for(i=0;i<10;i++)
{
wr_dat(tab[i]);
delay(1000);
}
for(i=0;i<16;i++)
{
wr_com(0x18);
delay(1000);
}
}
//********************遥控器传送45,显示0在液晶上*********************
void dis_tab()
{
wr_com(0x80);
delay(10);
wr_dat('0');
}
//*****************************************
void Function()
{
//mun[0]=a[0]/16;
//mun[1]=a[0]%16;
//mun[2]=a[1]/16;
//mun[3]=a[1]%16;
mun[4]=a[2]/16;
mun[5]=a[2]%16;
//mun[6]=a[3]/16;
//mun[7]=a[3]%16;
switch(mun[4]|mun[5])
{
case 0x45:dis_tab();break;
// case 0x46
// case 0x47
}
}
// ********************************************************************
//*************红外解码程序************************************
bit my()
{
uchar i,j;
uchar temp;
for(j=0;j<4;j++)
{
for(i=0;i<8;i++)
{
temp=temp>>1;
TH0=0;
TL0=0;
TR0=1;
while(js==0);
TR0=0;
lowtime=TH0*256+TL0;
TH0=0;
TL0=0;
TR0=1;
while(js==1);
TR0=0;
hightime=TH0*256+TL0;
if((lowtime<370)||(lowtime>640))
return 0;
if((hightime>420)&&(hightime<630))
temp=temp&0x7f;
if((hightime>1300)&&(hightime<1800))
temp=temp|0x80;
}
a[i]=temp;
}
if(a[2]=~a[3])
return 1;
}
//*************************外部中断0*******************
void t0() interrupt 1
{
EX0=0;
TH0=0;
TL0=0;
TR0=1;
while(js==0);
TR0=0;
lowtime=TH0*256+TL0;
TH0=0;
TL0=0;
TR0=1;
while(js==1);
TR0=0;
hightime=TH0*256+TL0;
if((lowtime>7800)&&(lowtime<8800)&&(hightime>3600)&&(hightime<4600))
{
if(my()==1)
{
{
wr_com(0x80);
Function();
}
}
}
EX0=1;//为下次中断做准备
}
//****************************主程序*************************
void main()
{
EX0=1;
TH0=0;
TL0=0;
TR0=0;
EA=1;
while(1)
{
initial();
}
} 展开
//***************头文件和宏定义**********
#include"reg51.h"
#include"intrins.h"
#define uint unsigned int
#define uchar unsigned char
//uchar hw_tab[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
sbit RS=P2^5;
sbit RW=P2^6;
sbit E=P2^7;
sbit js=P3^3;
uchar m;
uint a[4],mun[8];
uint lowtime,hightime;
uchar code tab[]={"I LOVE MCU"};
void delay(uchar i)
{
uchar j=250;
for(;i>0;i--)
{
while(--j);
j=250;
while(--j);
j=250;
}
}
void wr_com(uchar com)//写命令//
{
RS=0;
RW=0;
E=0;
P0=com;
delay(1000);
E=1;
delay(1000);
E=0;
}
void wr_dat(uchar dat)//写数据//
{
E=0;
RS=1;
RW=0;
P0=dat;
delay(1000);
E=1;
delay(1000);
E=0;
}
void initial()//lcd1602初始化//
{ uchar i;
wr_com(0x01);
delay(1000);
wr_com(0x06);
delay(1000);
wr_com(0x0c);
delay(1000);
wr_com(0x38);
delay(1000);
wr_com(0xd0);
delay(1000);
wr_com(0x80+0x50);
delay(1000);
for(i=0;i<10;i++)
{
wr_dat(tab[i]);
delay(1000);
}
for(i=0;i<16;i++)
{
wr_com(0x18);
delay(1000);
}
}
//********************遥控器传送45,显示0在液晶上*********************
void dis_tab()
{
wr_com(0x80);
delay(10);
wr_dat('0');
}
//*****************************************
void Function()
{
//mun[0]=a[0]/16;
//mun[1]=a[0]%16;
//mun[2]=a[1]/16;
//mun[3]=a[1]%16;
mun[4]=a[2]/16;
mun[5]=a[2]%16;
//mun[6]=a[3]/16;
//mun[7]=a[3]%16;
switch(mun[4]|mun[5])
{
case 0x45:dis_tab();break;
// case 0x46
// case 0x47
}
}
// ********************************************************************
//*************红外解码程序************************************
bit my()
{
uchar i,j;
uchar temp;
for(j=0;j<4;j++)
{
for(i=0;i<8;i++)
{
temp=temp>>1;
TH0=0;
TL0=0;
TR0=1;
while(js==0);
TR0=0;
lowtime=TH0*256+TL0;
TH0=0;
TL0=0;
TR0=1;
while(js==1);
TR0=0;
hightime=TH0*256+TL0;
if((lowtime<370)||(lowtime>640))
return 0;
if((hightime>420)&&(hightime<630))
temp=temp&0x7f;
if((hightime>1300)&&(hightime<1800))
temp=temp|0x80;
}
a[i]=temp;
}
if(a[2]=~a[3])
return 1;
}
//*************************外部中断0*******************
void t0() interrupt 1
{
EX0=0;
TH0=0;
TL0=0;
TR0=1;
while(js==0);
TR0=0;
lowtime=TH0*256+TL0;
TH0=0;
TL0=0;
TR0=1;
while(js==1);
TR0=0;
hightime=TH0*256+TL0;
if((lowtime>7800)&&(lowtime<8800)&&(hightime>3600)&&(hightime<4600))
{
if(my()==1)
{
{
wr_com(0x80);
Function();
}
}
}
EX0=1;//为下次中断做准备
}
//****************************主程序*************************
void main()
{
EX0=1;
TH0=0;
TL0=0;
TR0=0;
EA=1;
while(1)
{
initial();
}
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询