感谢楼主无私奉献的分享。
原程序只有LCD屏幕显示遥控器键值,发光二极管没有点亮。
在楼主的基础上增加了点灯功能,分享给大家。
#include "At89x51.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
sbit RELAY1= P1^0;
sbit RELAY2= P1^1;
sbit RELAY3= P1^2;
sbit RELAY4= P1^3;
sbit RELAY5= P1^4;
sbit RELAY6= P1^5;
sbit RELAY7= P1^6;
sbit RELAY8= P1^7;
#define JINGZHEN 48
#define TIME0TH ((65536-100*JINGZHEN/12)&0xff00)>>8
#define TIME0TL ((65536-100*JINGZHEN/12)&0xff)
#define TIME1TH ((65536-5000*JINGZHEN/12)&0xff00)>>8
#define TIME1TL ((65536-5000*JINGZHEN/12)&0xff)
#define uchar unsigned char
#define uint unsigned int
code uchar BitMsk[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,};
uint IrCount=0,Show=0,Cont=0;
uchar IRDATBUF[32],s[20];
uchar IrDat[5]={0,0,0,0,0};
uchar IrStart=0,IrDatCount=0;
extern void initLCM( void);
extern void DisplayListChar(uchar X,uchar Y, unsigned char *DData);
void timer1int (void) interrupt 3 using 3{
EA=0;
TH1 = TIME1TH;
TL1 = TIME1TL;
Cont++;
if(Cont>10)Show=1;
EA=1;
}
void timer0int (void) interrupt 1 using 1{
uchar i,a,b,c,d;
EA=0;
TH0 = TIME0TH;
TL0 = TIME0TL;
if(IrCount>500)IrCount=0;
if(IrCount>300&&IrStart>0){IrStart=0;IrDatCount=0;IrDat[0]=IrDat[1]=IrDat[2]=IrDat[3]=0;IrCount=0;}
if(IrStart==2)
{
IrStart=3;
for(i=0;i<IrDatCount;i++)
{
if(i<32)
{
a=i/8;
b=IRDATBUF[i];
c=IrDat[a];
d=BitMsk[i%8];
if(b>5&&b<14)c|=d;
if(b>16&&b<25)c&=~d;
IrDat[a]=c;
}
}
if(IrDat[2]!=~IrDat[3])
{
IrStart=0;IrDatCount=0;IrDat[0]=IrDat[1]=IrDat[2]=IrDat[3]=0;IrCount=0;
}
EA=1;
return;
}
IrCount++;
EA=1;
}
void int0() interrupt 0 using 0 {
EA=0;
if(IrStart==0)
{
IrStart=1;IrCount=0;TH0 = TIME0TH;TL0 = TIME0TL;
IrDatCount=0;EA=1;
return;
}
if(IrStart==1)
{
if(IrDatCount>0&&IrDatCount<33)
IRDATBUF[IrDatCount-1]=IrCount;
if(IrDatCount>31)
{IrStart=2;TH0 = TIME0TH;TL0 = TIME0TL;EA=1;return;}
if(IrCount>114&&IrCount<133&&IrDatCount==0)
{IrDatCount=1;}else if(IrDatCount>0)IrDatCount++;
}
IrCount=0;TH0 = TIME0TH;TL0 = TIME0TL;
EA=1;
}
main()
{
uchar *a,n;
TMOD |= 0x011;
TH0 = TIME0TH;
TL0 = TIME0TL;
ET0=1;
TR0=1;
ET1=1;
TR1=1;
IT0 = 1;
EX0 = 1;
initLCM();
EA=1;
for(;;)
{
if(Show==1)
{
Show=0;
Cont=0;
DisplayListChar(0,1,"Please keys");
a="";
switch (IrDat[3])
{
case 0x12:
a="ON/C";
break;
case 0x0b:
a="+/-";
break;
case 0x1a:
a="+";
break;
case 0x1e:
a="-";
break;
case 0x0e:
a="/";
break;
case 0x1d:
a="MRC";
break;
case 0x1f:
a="M-";
break;
case 0x1b:
a="M+";
break;
case 0x00:
if(IrDat[2]==0xff)a="0";
break;
case 0x01:
a="1";
RELAY1=!RELAY1;
break;
case 0x02:
a="2";
RELAY2=!RELAY2;
break;
case 0x03:
a="3";
RELAY3=!RELAY3;
break;
case 0x04:
a="4";
RELAY4=!RELAY4;
break;
case 0x05:
a="5";
RELAY5=!RELAY5;
break;
case 0x06:
a="6";
RELAY6=!RELAY6;
break;
case 0x07:
a="7";
RELAY7=!RELAY7;
break;
case 0x08:
a="8";
RELAY8=!RELAY8;
break;
case 0x09:
a="9";
break;
case 0x2A:
a="%";
break;
case 0x2B:
a="X";
break;
case 0x2C:
a=".";
break;
case 0x2D:
a="=";
break;
case 0x2E:
a=" ";
break;
}
n=strlen(a);
if(n>0)sprintf(s,"Key is [%s]",a);else sprintf(s,"Not Key ",a);
DisplayListChar(0,0,s);
}
}
}
|