//紅外解碼,實驗板測試正常,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)
2020-9-2 15:32 上傳
點擊文件名下載附件
|