#include<reg52.h>
#include"./uart/uart.h"
#include"./delay/delay.h"
#include"./lcd/lcd.h"
sbit IR_IN = P3^2;
sbit led1 = P1^0;
sbit led2 = P1^1;
sbit led3 = P1^2;
sbit led4 = P1^3;
sbit led5 = P1^4;
sbit led6 = P1^5;
sbit led7 = P1^6;
sbit led8 = P1^7;
unsigned int irtime;
unsigned char temp;
unsigned char IRcord[4];
unsigned char putbuf[35];
bit startflag =0;
bit irok,irpro_ok;
void timer0_init()
{
EA=1;
TMOD |= 0X02;
TH0 = 0;
ET0 = 1;
TR0 = 1;
}
void timer0_isr() interrupt 1
{
irtime++; //0.256ms 引导码 s:53 0:4 1:9
}
void int0_init()
{
IT0 = 1; //设置外部中断的触发方式
EA = 1;
EX0 = 1;
}
unsigned char irdata[33];
unsigned char bitnum = 0;
void int0_isr() interrupt 0
{
if(startflag)
{
if((irtime > 40) && (irtime < 60))
{
bitnum = 0;
}
/*if((irtime > 6) && (irtime < 12))
{
temp = 1;
}
if((irtime > 0) && (irtime < 6))
{
temp = 0;
}*/
//irdata[bitnum] = temp;
irdata[bitnum] = irtime;
bitnum++;
irtime = 0;
if(33 == bitnum)
{
bitnum = 0;
irok = 1;
startflag = 0;
}
}
else
{
irtime = 0;
startflag = 1;
}
}
void Ircordpro(void)
{
unsigned char i, j, k;
unsigned char cord,value;
k=1;
for(i=0;i<4;i++)
{
for(j=1;j<=8;j++)
{
cord=irdata[k];
if(cord>6)
value|=0x80;
if(j<8)
{
value>>=1;
}
k++;
}
IRcord[i] = value;
value=0;
}
irpro_ok=1;
}
void LED()
{
switch(IRcord[2])
{
case 0x45: led1 = ~led1; break;
case 0x46: led2 = ~led2; break;
case 0x47: led3 = ~led3; break;
case 0x44: led4 = ~led4; break;
case 0x40: led5 = ~led5; break;
case 0x43: led6 = ~led6; break;
case 0x07: led7 = ~led7; break;
case 0x15: led8 = ~led8; break;
default: break;
}
}
void LCD()
{
switch(IRcord[2])
{
case 0x45: LCD_Write_String(5,1,"01"); break;
case 0x46: LCD_Write_String(5,1,"02"); break;
case 0x47: LCD_Write_String(5,1,"03"); break;
case 0x44: LCD_Write_String(5,1,"04"); break;
case 0x40: LCD_Write_String(5,1,"05"); break;
case 0x43: LCD_Write_String(5,1,"06"); break;
case 0x07: LCD_Write_String(5,1,"07"); break;
case 0x15: LCD_Write_String(5,1,"08"); break;
case 0x09: LCD_Write_String(5,1,"09"); break;
case 0x16: LCD_Write_String(5,1,"10"); break;
case 0x19: LCD_Write_String(5,1,"11"); break;
case 0x0d: LCD_Write_String(5,1,"12"); break;
case 0x0c: LCD_Write_String(5,1,"13"); break;
case 0x18: LCD_Write_String(5,1,"14"); break;
case 0x5e: LCD_Write_String(5,1,"15"); break;
case 0x08: LCD_Write_String(5,1,"16"); break;
case 0x1c: LCD_Write_String(5,1,"17"); break;
case 0x5a: LCD_Write_String(5,1,"18"); break;
case 0x42: LCD_Write_String(5,1,"19"); break;
case 0x52: LCD_Write_String(5,1,"20"); break;
case 0x4a: LCD_Write_String(5,1,"21"); break;
default: break;
}
}
void main()
{
unsigned char i;
timer0_init();
int0_init();
uart_init();
LCD_Init();
LCD_Clear();
while(1)
{
if(irok == 1)
{
/* putbuf[0] = irdata[0] / 10+0x30;
putbuf[1] = irdata[0] % 10+0x30;
for(i = 0; i<32;i++)
{
putbuf[i+2]=irdata[i+1] +0x30;
}
putbuf[34] = '\0';
uart_send_string(putbuf);
uart_send_string("\n");*/
Ircordpro();
irok = 0;
}
if(irpro_ok)
{
for(i=0;i<4;i++)
{
uart_send_byte(IRcord[i]);
delay_ms(1);
}
LED();
LCD();
irpro_ok = 0;
}
}
}
遥控器输入,用LCD显示灯的号码
最新推荐文章于 2021-05-19 18:37:10 发布