文档介绍:红外摇控 HS5104 解码程序( 合泰 C) 红外摇控 HS5104 解码程序( 合泰 C) 现在市面上,风扇摇控器都用 HS5104 作编码芯片,关键是以低格占据市场。用过 HS5104 的朋友都知道,它的工作电压比较高,在低电压 3V 以下工作时, 经常会出错, 很多朋友都说 HS5104 的接收程序不稳定。其实,大多数是 HS5104 工作不稳定引起的,只要你接收程序合理, 多接收几次作比较, 码宽的变动变化率允许大一点( 我的程序允许码宽变动在百分之三十) ,然后再保证 HS5104 的工作电压在 3V 以上,那肯定是没问题的。下面一段程序,之所以接收程序会那么复杂,是针对 HS5104 不稳定而设计的。它放在中断里进行, 希望能给使用合泰 C 开发的朋友提供参考,或者下载后稍作修改便可实现功能调试。//*********** 红外摇控 ht48r05A-1 & HS5104 //***********Make in QUSUN at 2008-01-18 //**********LCSOME********************** #include <HT48R06A-> #pragma vector isr_4 @ 0x4 #pragma vector isr_8 @ 0x8 #define uchar unsigned char #define ulint unsigned long int #pragma rambank0 unsigned char rf_addr1; unsigned char rf_addr2;//12 位地址码 unsigned char rf_addr1_old;// unsigned char rf_addr2_old; unsigned char rf_cont;// 接收次数,判断长按 unsigned char rf_bitsum;// 接收到的数据位的计数器 unsigned char rf_0_sum;// 接收到 0 的个数计数器 unsigned char rf_mksum;// 码宽计数器 uchar time_s;// 秒计数器 uchar time_ms;// 毫秒计数器 uchar time_us;// 微秒计数器//* bit rf_sta;// 起始位有效标志 1=有效 bit rf_bdata;// 前一个接收检测电平 bit rf_ture;// 接收成功标志 1=有效 bit rf_6ms ;//6 毫秒低电平指示, 1 有效#define rf_in _pc1 // 接收数据输入端#define rf_1_sum rf_0_sum #define SPEAKER _pb2 //*********************************************** void isr_4() {// 外部中断子程序........................ }// 外部中断子程序//********************************************** void isr_8(){// 计数器 0 中断子程序 if(!rf_sta)// 如果起始位无效{//00 rf_1_sum++; if(rf_1_sum>100)rf_cont