|
QQ圖片20170907171904.png (48.17 KB, 下載次數(shù): 191)
下載附件
2017-9-7 17:35 上傳
QQ圖片20170907171937.png (28.85 KB, 下載次數(shù): 195)
下載附件
2017-9-7 17:35 上傳
QQ圖片20170907172225.png (52.44 KB, 下載次數(shù): 194)
下載附件
2017-9-7 17:35 上傳
0.png (15.73 KB, 下載次數(shù): 183)
下載附件
2017-9-7 17:49 上傳
全部資料51hei下載地址:
遙控解碼6#-15w204.rar
(132.27 KB, 下載次數(shù): 516)
2017-9-7 17:34 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
http://www.zg4o1577.cn/bbs/dpj-54638-1.html 單路
http://www.zg4o1577.cn/bbs/dpj-54161-1.html 四路
STC15W204S模擬315M 2272解碼程序
工作頻率:12M
說明:6路繼電器輸出,6LED指示,1LED電源指示,1微動開關(guān)K1。
按K1進(jìn)入編輯模式,LED指示燈全亮。
在編輯模式下 ,按下遙控器鈕,LED1亮>>LED2亮>>LED3亮>>LED4亮>> LED5亮>>LED6亮>>全亮(此模式存儲的遙控碼是關(guān)閉所有的LED)>>退出編輯模式。
在編輯模式下 ,按K1退出編輯模式或存儲有效的遙控碼。
在編輯模式下 ,長按K1 (10S) 刪除所有存儲的遙控碼。
在正常模式下 , 按下遙控器鈕,及相應(yīng)的LED.繼電器亮滅。
注意: 同一條遙控碼 在同一個LED上存兩條,相當(dāng)于亮了又滅,無動作。
優(yōu)點(diǎn): 能接收2262的1.2M-4.7M電阻編碼,幾乎所有的315M遙控器都兼容。
由于定時讀引腳,抗干擾能力強(qiáng) ,和硬件解碼距離無區(qū)別。
缺點(diǎn):占用單片機(jī)資源比較多。
單片機(jī)源程序如下:
- //#include <reg52.h>
- #include "stc15w204s.h"
- #include "flash.h"
- typedef unsigned int u16; //16位無符號整型數(shù)
- typedef unsigned char u8; //8位無符號整型數(shù)
- sbit IR_INPUT = P1^1;
- sbit KEY1 = P1^0;
- sbit JD1 = P3^0;
- sbit JD2 = P3^1;
- sbit JD3 = P3^2;
- sbit JD4 = P3^3;
- sbit JD5 = P3^6;
- sbit JD6 = P3^7;
- sbit led1 = P5^5;
- sbit led2 = P5^4;
- sbit led3 = P1^5;
- sbit led4 = P1^4;
- sbit led5 = P1^3;
- sbit led6 = P1^2;
- u8 T0RL = 0; //T0重載值的低字節(jié)
- u8 ms =1;
- u8 ircode_x[3]; //編輯模式解碼中間值
- u8 ircodex[3];
- u8 ircode[6];
- u16 code Tm_bz[]={ 31 ,156 ,114 ,134 ,2 ,16 ,8 };
- u8 code YaoKongSu_4 = 4; //遙控碼個數(shù)
- u8 code DaiMaTiaoSu_20 = 20; //遙控條數(shù)
- u8 code LuShu = 6; //幾路遙控
- bit WanCengBiaoJi = 0; // 讀完一組數(shù)據(jù)的標(biāo)記
- bit Bianji = 0; //進(jìn)入編輯標(biāo)記
- u8 JIBU=0; //按鍵第幾步標(biāo)記
- u8 E2BiaoJi;
- u8 Tm1[50];
- void ConfigTimer0(u8 ms);
- void ConfigTimer2(u8 ms);
- void xunhuanculi(u8 add);
- void Bian_ji();
- void Led_jia();
- void Flash_del();
- void LED_jh(u8 add,bit add1);
- void Caozuo_csh();
- void main()
- {
- EA = 1; //開總中斷
- IR_INPUT = 1; //接收引腳
- ConfigTimer2(5); //配置T2定時 ms
- ConfigTimer0(124); //配置T0定時 0-255us
- Caozuo_csh();
- P1M1= 0x02; //0000 0010
- P1M0= 0x00; //0000 0000
- while (1)
- {
-
- if(WanCengBiaoJi == 1)
- { WanCengBiaoJi = 0;
- xunhuanculi(0);
- xunhuanculi(1);
- if((ircode[0]==ircode[3]) && (ircode[1]==ircode[4]) && (ircode[2]==ircode[5]) && ms!=0)
- {
- if((ircodex[0]==ircode[0]) && (ircodex[1]==ircode[1]) && (ircodex[2]==ircode[2]) )
- { ms=1; }
- else
- {
- ircodex[0]=ircode[0];
- ircodex[1]=ircode[1];
- ircodex[2]=ircode[2];
- if(Bianji==1)
- { ms = 1; Led_jia();}
- else
- { ms=0;}
- }
- }
-
- ET0 = 1;
-
- }
-
- }
- }
- //脈沖解碼
- void xunhuanculi(u8 add)
- {
- u8 i, j, x, dat;
- u8 byt;
-
- x = add*25+1;
- for(i=0; i<3; i++)
- { dat=i*8;
- for(j=0; j<8; j++)
- { if(Tm1[dat+j+x]<=Tm_bz[6])
- { byt <<= 1; byt |= 0x01; }
- else
- { byt <<= 1; }
- }
- ircode[i+ add*3 ] = byt;
- }
- }
- void LED_jh(u8 add,bit add1)
- { bit dat;
- switch(add)
- {
- case 0: led1 = add1;led2 = add1;led3 = add1;led4 = add1;led5 = add1;led6 = add1;
- if(Bianji==0)
- {dat=!add1; JD1 = dat;JD2 = dat; JD3 = dat;JD4 = dat;JD5 = dat;JD6 = dat;}
- break;
- case 1: dat= led1;
- _nop_();
- led1=!dat;
- if(Bianji==0)
- {JD1 = dat; }
- break;
- case 2: dat= led2;
- _nop_();
- led2=!dat;
- if(Bianji==0)
- {JD2 = dat; }
- break;
- case 3: dat= led3;
- _nop_();
- led3=!dat;
- if(Bianji==0)
- {JD3 = dat; }
- break;
- case 4: dat= led4;
- _nop_();
- led4=!dat;
- if(Bianji==0)
- {JD4 = dat; }
- break;
- case 5: dat= led5;
- _nop_();
- led5=!dat;
- if(Bianji==0)
- {JD5 = dat; }
- break;
- case 6: dat= led6;
- _nop_();
- led6=!dat;
- if(Bianji==0)
- {JD6 = dat; }
- break;
- case 7: led1 = add1;led2 = add1;led3 = add1;led4 = add1;led5 = add1;led6 = add1;
- if(Bianji==0)
- {dat=!add1; JD1 = dat;JD2 = dat; JD3 = dat;JD4 = dat;JD5 = dat;JD6 = dat; }
- break;
- default:break;
- }
- }
- void Caozuo_csh()
- {
- Bianji=0;
- LED_jh(0,1);
- JIBU=0;
-
- P3M1= 0x00; //0000 0000
- P3M0= 0xcf; //1100 1111
-
- }
- //遙控碼修改
- void Flash_del()
- { if(Bianji==1)
- { eeprom_erase(0); Caozuo_csh(); }
- }
- void Bian_ji()
- { u8 i,dat;
- if(Bianji==0)
- { Bianji=1;
-
- P3M1= 0xcf; //1100 1111
- P3M0= 0xcf; //1100 1111
- LED_jh(0,0);
- E2BiaoJi=0xff;
- for(i=0; i<DaiMaTiaoSu_20; i++)
- { if(eeprom_read(i*YaoKongSu_4)==0xff)
- {E2BiaoJi=i; break;}
- }
- }
- else
- { if (E2BiaoJi!= 0xff && JIBU!=0)
- { dat= E2BiaoJi*YaoKongSu_4;
- eeprom_write(dat,JIBU); //標(biāo)記以寫入
- eeprom_write(dat+1,ircode_x[0]);
- eeprom_write(dat+2,ircode_x[1]);
- eeprom_write(dat+3,ircode_x[2]);
-
- }
- Caozuo_csh();
- }
-
- }
- void Led_jia()
- {
- JIBU++;
- if(JIBU>(LuShu+1))
- { Caozuo_csh(); }
- else
- { ircode_x[0]=ircodex[0];
- ircode_x[1]=ircodex[1];
- ircode_x[2]=ircodex[2];
- LED_jh(0,1);
- if(JIBU>LuShu)
- { LED_jh(0,0); }
- else
- { LED_jh(JIBU,0); }
- }
- }
- /* 配置并啟動T2,ms-T2定時時間 */
- void ConfigTimer2(u8 ms)
- {
- unsigned long tmp; //臨時變量
-
- tmp = 12000000 / 12; //定時器計數(shù)頻率
- tmp = (tmp * ms) / 1000; //計算所需的計數(shù)值
- tmp = 65536 - tmp; //計算定時器重載值
- tmp = tmp + 18; //補(bǔ)償中斷響應(yīng)延時造成的誤差
- T2H = (u8)(tmp>>8); //定時器重載值拆分為高低字節(jié)
- T2L = (u8)tmp;
-
- AUXR &= 0xEF; // 啟動T2定時器 方式 :16位重裝模式計數(shù)器
- AUXR |= 0x10; // 啟動T2定時器
- IE2 &= 0xFB; // 使能T2中斷
- IE2 |= 0x04; // 使能T2中斷
-
- //ET2 = 1; //使能T2中斷
- //T2R = 1; //啟動T2定時器
- }
- /* 配置并啟動T0,us-T0定時時間 */
- void ConfigTimer0(u8 ms)
- {
- u8 tmp; //臨時變量
- tmp = 256 -ms ; //計算定時器重載值
- TMOD &= 0xF0; // 定時器工作方式 方式 :8位重裝模式計數(shù)器
- TMOD |= 0x02; //配置T0為模式2
- T0RL = tmp;
- TH0 = tmp; //加載T0重載值
- ET0 = 1; //使能T0中斷
- TR0 = 1; //啟動T0
- PT0 = 1; //配置T0中斷為高優(yōu)先級
- }
- void EXINT1_ISR() interrupt 1
- { static bit a1,a2,a3;
- static u8 Tm_zz=0;
- static u8 Tm_js=0;
- static u8 Tm=0;
- a3=a2;
- a2=a1;
- a1=IR_INPUT;
- if(a1==a3)
- {a2=a1;}
- if(a3)
- {
- switch(Tm_zz)
- {
- case 0: if(Tm==0)
- {
- if((Tm_js<Tm_bz[0] )|| Tm_js>Tm_bz[1])
- { Tm_zz=0; Tm=0; Tm_js=0; TH0 = T0RL; }
- else
- { Tm++; Tm_zz=2; TH0 = 256- Tm_js; TL0=TH0;}
- }
- else
- { if((Tm_js<Tm_bz[2] )|| Tm_js>Tm_bz[3] )
- { Tm_zz=0; Tm=0; Tm_js=0; TH0 = T0RL; }
- else
- { Tm1[Tm]=256-TH0; Tm++; Tm_zz=2;}
- }
-
- break;
- case 1: if((Tm_js<Tm_bz[4] )|| Tm_js>Tm_bz[5])
- { Tm_zz=0; Tm=0; Tm_js=0; TH0 = T0RL; }
- else
- { Tm1[Tm]=Tm_js; Tm++; Tm_zz=2;}
- break;
- case 2: if( Tm==25)
- {Tm_zz=3;}
- if( Tm>=50)
- { ET0 = 0; WanCengBiaoJi =1; Tm_zz=0; Tm=0; Tm_js=0; TH0 = T0RL; }
- break;
- default:break;
- }
- }
- else
- {
- switch(Tm_zz)
- {
- case 0: Tm_js++; break;
- case 1: Tm_js++; break;
- case 2: Tm_js=1; Tm_zz=1; break;
- case 3: Tm_js=1; Tm_zz=0; break;
- default:break;
- }
-
- }
-
- }
- void chamiao()
- { u8 i,x,dat;
- ms++;
- if(ms == 1)
- {
- EA=0 ;
-
- for(i=0; i<DaiMaTiaoSu_20; i++)
- { dat= i*YaoKongSu_4;
- x = eeprom_read(dat);
- if(x != 0xff)
- { if(eeprom_read(dat+1)==ircodex[0])
- { if(eeprom_read(dat+2)==ircodex[1])
- { if(eeprom_read(dat+3)==ircodex[2])
- { LED_jh(x,1); }
- }
- }
- }
- else
- {break;}
-
- }
- EA=1 ;
- }
- if(ms > 150 )
- {ircodex[0]=0x00;
- ircodex[1]=0x00;
- ircodex[2]=0x00;
- ms = 1;
- }
-
- ……………………
- …………限于本文篇幅 余下代碼請從51黑帖子頂部下載附件…………
復(fù)制代碼
|
評分
-
查看全部評分
|