//红外解码,实验板测试正常,8位数码管显示遥控编码(用户码,用户反码,右边3位数码管显示PWM值),
//两片74hc573驱动8位共阴数码管
//CH-键短按开关灯,+键长按调光,数码管显示键值;长按调光的解码程序目前网上很难找到,我琢磨了很久才把程序调通//压缩包里有完整的程序代码,有逻辑分析仪测试的连发码的波形
单片机源程序如下:
- #include "INC\STC89C52RC.H"
- #include "INC\MY_SET.H"
- #include "INC\IR_NEC.H" //调用NEC解码头文件
- #define DIGI_PORT P0 // 宏定义数码管端口,如果端口改变,只需修改这一句即可
- #define DIGI_NUM 8 // 宏定义数码管个数
- unsigned char digiBuf[DIGI_NUM]; //数码管缓冲区
- sfr SE = 0x80; //数码管段选 P0:0x80 P1:0x90
- sbit wela = P2^7; //位选
- sbit dula = P2^6; //段选
- sbit led = P1^2;
- uint8 PWM_Val=200; //占空比 变量
- uint8 flag; //开关灯标志
- uint8 flag1;//调光方向标志
- uint8 count;
- uint8 flag2; //
- uint8 num,pwm;
- // 0 1 2 3 4 5 6 7 8 9 A B C D E F 不显 -
- uint8 code d[]={ 0x3F,0x06,0x5B,0x4F,0x66, 0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00,0x40}; //数码管段码 共阴不带小数点段码
- void KZ0(); //短按处理
- //void KZ1(); //长按处理
- /***************** 主函数 ********************/
- void main(void)
- {
- IR_Init(); //红外线解码初始化
- while(1)
- {
- //遥控检测
- if(IR_BT==2)
- {
- KZ0(); //短按处理
- IR_BT =0; //清有效标志
- //更新显示
- digiBuf[0] = NEC[0]/16; //用户码
- digiBuf[1] = NEC[0]%16;
- digiBuf[2] = NEC[1]/16; //用户反码
- digiBuf[3] = NEC[1]%16;
- // digiBuf[4] = NEC[2]/16; //数据码
- // digiBuf[5] = NEC[2]%16;
- // digiBuf[6] = NEC[3]/16; //数据反码
- // digiBuf[7] = NEC[3]%16;
- }
- digiBuf[4] = 16; //不显
- digiBuf[5] = PWM_Val/100; //显示pwm值
- digiBuf[6] = PWM_Val%100/10;
- digiBuf[7] = PWM_Val%10;
-
- if(IR_BT==3 && KeyUpDownFlag==0 ) //长按调光,松手停止调光
- {
-
- switch(NEC[2])
- { //长按接收的是连发码,97.11ms高电平,10.15ms低电平
- case 0x15: if(IR==1) //if(IR==0)
- {
- KeyUpDownFlag=1; //如果按键抬起,松手标志置1
- }
-
- if(flag1==1 && flag==0) // 开灯状态 +键 长按连加 亮度加
- {
- if(PWM_Val<200)
- {
-
- PWM_Val++; // if(IR==1)用这句
- // PWM_Val += 5; //if(IR==0)用这句 加5 灯亮度变化才明显
- if(PWM_Val==200)
-
- flag1=0;
-
- }
- }
-
- if(flag1==0 && flag==0) //开灯状态 +键 长按连减 亮度 减
- {
- if(PWM_Val>0)
- {
- // PWM_Val -= 5;
- PWM_Val--;
- if(PWM_Val==0)
-
- flag1=1;
-
- }
- } break;
-
-
- case 0x07:break;
- default:break;
- }
-
- }
-
- ///////////////////////////////////////////
-
- if(flag==0) //开灯
- {
- for(pwm=200;pwm>0;pwm--)
- {
- if(PWM_Val<pwm)
- {
- led=1;
-
- }
- else
- {
- led=0;
-
- }
- }
- }
- else
- {
- led=1; //关灯
- }
-
- }
- }
复制代码
全部资料51hei下载地址:
红外线NEC解码(任意脚接收,短按开关,长按调光).rar
(329.78 KB, 下载次数: 191)
|