遥控器输入,用LCD显示灯的号码

#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;
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值