近来闲来无事,便做了一个红外遥控器方案,由于手头没有屏,所以屏幕这块只做了原理说明。如果有感兴趣的,可以私聊。
这是系统框架图,整个系统主要分为两部分:红外接收与处理功能区和T5L显示功能区,
我的硬件测试电路主要有红外接收头HS003B,红外发射头,以及一个8051单片机最小系统,单片机系统的程序进行了包装,通过引出的串口自动传递红外键码,通过红外接收/发送头实现遥控功能。
如图,为MCU读取到的美的空调遥控器的键码值。
理论上来说,不仅是空调,几乎所有的红外格式设备都可以进行控制(不敢说绝对,毕竟我没有全部的设备进行测试),如电视机、风扇等,只要用遥控器读取键码即可,它支持的红外编码芯片如upd6121,6122,tc9012,pt2221等。 红外接收与处理功能区主要有红外接收头如HS0038B和红外发射头、MCU,MCU通过定时器对红外键码进行处理,之后通过串口将键码接收/上传到T5L液晶屏
T5L显示主要有遥控+新增遥控器,即用户通过红外接收头将接收到的键码在屏幕上进行读取并写入到对应的按键上,利用T5L的NOR FLASH实现记忆功能。
如上图,是我做的一个空调遥控器的遥控页面+遥控器新增页面效果图(手头没有屏,所以只有原理) T5L屏C51代码实现(由于本人手头无T5L屏,故只做原理说明): 屏代码包括串口接收与发送,nor flash的读写操作,页面显示操作 1. 串口接收与发送 voidUART2_Init(void) { ADCON=0x80; SCON0=0x50; SREL0H=0x03; //FCLK/64*(1024-SREL1) SREL0L=0xE4; ES0=1; EA=1; }
voidUART2_Sendbyte(u8 dat) { while(uart2_busy==1); uart2_busy=1; SBUF0 = dat; }
voidUART2_SendStr(u8 *pstr,u16 strlen) { if((NULL == pstr)||(0 == strlen)) { return; } while(strlen--) { UART2_Sendbyte(*pstr); pstr++; } }
voidUART2_ISR_PC(void) interrupt 4 { u8 res=0; EA=0; if(RI0==1) { res=SBUF0; Uart2_Rx[uart2_rx_count]=res; uart2_rx_count++; RI0=0; } if(TI0==1) { TI0=0; uart2_busy=0; } EA=1; } 2. nor flash的读写处理
//读写T5L片内256KW Flash,mod=0x5A 为读取,mod=0xA5为写入 //addr=DGUS变量地址,必须是偶数;addr_flash=flash读取地址,必须是偶数;len=读取字长度,必须是偶数。 void T5L_Flash(u8 mod,u16 addr,longaddr_flash,u32 len) { ADR_H=0x00; ADR_M=0x00; ADR_L=0x04; ADR_INC=0x01; RAMMODE=0x8F; while(APP_ACK==0); DATA3=mod; DATA2=(u8)(addr_flash>>16); DATA1=(u8)(addr_flash>>8); DATA0=(u8)(addr_flash&0xFE); APP_EN=1; DATA3=(u8)(addr>>8); DATA2=(u8)(addr&0xFE); DATA1=(u8)(len>>8); DATA0=(u8)(len&0xFE); APP_EN=1; RAMMODE=0x00; wait_ok(0x0004); } 帖子附上nor flash的读写函数 /
(如有机会,再附上新的内容,欢迎大家进行点评)
|