|
使用于藍橋杯金塞板
紅外遙控(T2EX).zip
(54.31 KB, 下載次數: 53)
2016-3-25 13:45 上傳
點擊文件名下載附件
stc15系列單片機紅外解碼程序 下載積分: 黑幣 -5
stc15單片機紅外解碼部分程序預覽:
- #include "Ir_Process.h"
- uchar Ir_Time, Start_Flag, Bit_Num, Ir_Ok, Ir_ProsOk;
- uchar Ir_Data[33], Ir_Code[4], Disp_Num[8];
- void ULN2003(void)
- {
- Relay = BUZZ = 0; //關閉繼電器和蜂鳴器
- HC138(3);
- P0 = 0xFF; HC138(0); //熄滅LED
- }
- void Init_INT0(void) //INT0初始化
- {
- IT0 = 1; //INT0下降沿觸發
- EX0 = 1; //INT0允許
- EA = 1;
- }
- void Init_T2(void) //T2初始化
- {
- AUXR &= ~0x04; //定時器2為12T模式
- T2H = (65536 - 236)/256; //初始化計時值
- T2L = (65536 - 236)%256;
- AUXR |= 0x10; //定時器2開始計時
- IE2 |= 0x04; //開定時器2中斷
- EA = 1;
- }
- void Ir_Pros(void) //紅外處理
- {
- uchar Num, i, j, k = 1;
- for(j = 0; j < 4; j++) //用戶碼16位、數據碼8位、數據反碼8位
- {
- for(i = 0; i < 8; i++) //一個數據八位
- {
- Num = Num >> 1;
- if(Ir_Data[k] > 6) //0碼:0.56ms高電平+0.56ms低電平;1碼:0.56ms高電平+1.685ms低電平
- { //0.56/0.256=4.4; 2.245/0.256=8.8。所以大于6為1碼
- Num = Num | 0x80; //低位在前,提取4個數據
- }
- k++;
- }
- Ir_Code[j] = Num; //為十六位二進制數
- }
- Ir_ProsOk = 1;
- }
- void Ir_Disp(void) //紅外碼轉換,準備送數碼管顯示
- {
- Disp_Num[0] = Ir_Code[0]/16;
- Disp_Num[1] = Ir_Code[0]%16;
- Disp_Num[2] = Ir_Code[1]/16;
- Disp_Num[3] = Ir_Code[1]%16;
- Disp_Num[4] = Ir_Code[2]/16;
- Disp_Num[5] = Ir_Code[2]%16;
- Disp_Num[6] = Ir_Code[3]/16;
- Disp_Num[7] = Ir_Code[3]%16;
- }
- void INT0_ISR(void) interrupt 0
- {
- if(Start_Flag)
- {
- if(Ir_Time > 32 && Ir_Time < 63) //在8~16ms之間,為引導碼
- Bit_Num = 0;
- Ir_Data[Bit_Num] = Ir_Time;
- Ir_Time = 0;
- Bit_Num++;
- if(Bit_Num == 33)
- {
- Bit_Num = 0;
- Ir_Ok = 1;
- }
- }
- else
- {
- Ir_Time = 0;
- Start_Flag = 1;
- }
- }
- void T2_ISR(void) interrupt 12
- {
- IE2 &= ~0x04; //若需要手動清除中斷標志,可先關閉中斷,此時系統會自動清除內部的中斷標志
- Ir_Time++;
- IE2 |= 0x04; //然后再開中斷即可
- }
復制代碼
|
評分
-
查看全部評分
|