315-433MHZ學(xué)習(xí)遙控器芯片支持1527 2264 2260 2262 SC5211 HS2240等解碼,自動適應(yīng)振蕩電阻 2260 2262 2264 如果不進(jìn)行人工地址編碼,好多個遙控器地址編碼一樣的,只要學(xué)習(xí)一個遙控器,所有的遙控器都能同時用
一:如何設(shè)置自鎖,互鎖,點(diǎn)動輸出1:斷電。按住學(xué)習(xí)鍵然后上電保持1-2秒鐘后松開,學(xué)習(xí)燈閃3次,設(shè)置為自鎖輸出。 2:斷電。按住學(xué)習(xí)鍵然后上電保持1-2秒鐘后松開,學(xué)習(xí)燈閃1次,設(shè)置為互鎖輸出。 3:斷電。按住學(xué)習(xí)鍵然后上電保持1-2秒鐘后松開,學(xué)習(xí)燈閃2次,設(shè)置為點(diǎn)動輸出。 二:遙控器學(xué)習(xí):以上輸出模式設(shè)置后斷開電源,然后上電,按一下學(xué)習(xí)鍵,學(xué)習(xí)燈保持亮,再按遙控器上的任意一鍵,學(xué)習(xí)燈熄滅,遙控器學(xué)習(xí)成功。重復(fù)上述操作可以學(xué)習(xí)多達(dá)20個遙控器。1527 2260 2262 2264等的遙控器可以混合學(xué)習(xí)使用。 三:如何清空已學(xué)習(xí)過的遙控器:斷電,按住學(xué)習(xí)鍵然后上電保持4秒以上再松開按鍵,學(xué)習(xí)燈閃爍4次,說明已學(xué)習(xí)過的遙控器已被清空。
單片機(jī)源程序如下:
//內(nèi)部晶振:11.0592M //測試芯片:STC15F104E/STC11F04W //硬件最簡版 //實現(xiàn)2262、1527解碼輸出,學(xué)習(xí)、自適應(yīng)多阻值,片內(nèi)EEPROM存儲相關(guān)信息
#include <reg52.h> #include <intrins.h>
sfr AUXR=0x8e;
sfr IAP_DATA = 0xC2; //片內(nèi)EEPROM資源聲明 sfr IAP_ADDRH = 0xC3; sfr IAP_ADDRL = 0xC4; sfr IAP_CMD = 0xC5; sfr IAP_TRIG = 0xC6; sfr IAP_CONTR = 0xC7;
sfr P3M0 =0xb2; sfr P3M1 =0xb1;
#define uchar unsigned char #define uint unsigned int
sbit RF = P3^4; //射頻引腳定義 sbit set = P3^3; //設(shè)置鍵定義
sbit keya = P3^0; //第一路 sbit keyb = P3^1; //第二路 sbit keyc = P3^2; //第三路 sbit keyd = P3^5; //第四路
uint ll_w; uchar hh_w; //高,低電平寬度 uchar ma_x; //接收到第幾位編碼了 uchar idata bma1,bma2,bma3; //用于接收過程存放遙控編碼,編碼比較兩次,這是第一次 uchar idata mmb1,mmb2,mmb3; // 用于接收過程存放遙控編碼,第二次 uchar key_data; uchar short_k; uchar mma1,mma2,mma3; //用于解碼過程 uchar L_M_select; uchar xplx; uint s,s1;
bit old_rc5; //保存上一次查詢到的電平狀態(tài) bit tb_ok; //接收到同步的馬時置1 bit rf_ok1,rf_ok2; //解碼過程中的臨時接收成功標(biāo)志 bit rf_ok; //接收到一個完整的遙控命令后置1,通知解碼程序可以解碼了 bit study; //進(jìn)入學(xué)習(xí)狀態(tài)標(biāo)志 bit system_int; //系統(tǒng)清零標(biāo)志 bit m1,m2,m3,m4; bit flag_zs; bit decode_ok; //解碼成功
uchar idata key_number[61];
void delay_1ms(uint x) //1毫秒延時 { uchar b,c; for(x;x>0;x--) { for(b=5;b>0;b--) { for(c=150;c>0;c--); } } }
void BB(uint size,uchar Number) {
if(Number) { for(Number;Number>0;Number--) { set=0; delay_1ms(size); set=1; delay_1ms(size); } } else { set=0; delay_1ms(size); set=1; } }
void chick1527(uchar d) { uchar u; for(u=0;u<4;u++) { if(((d>>(u*2)) & 3)==2) { xplx=0x55; } } }
//==================================================== /////////片內(nèi)EEPROM讀寫驅(qū)動程序/////////////////////////// //====================================================
void IAP_Disable() //關(guān)閉IAP { //關(guān)閉IAP 功能, 清相關(guān)的特殊功能寄存器,使CPU 處于安全狀態(tài), //一次連續(xù)的IAP 操作完成之后建議關(guān)閉IAP 功能,不需要每次都關(guān) IAP_CONTR = 0; //關(guān)閉IAP 功能 IAP_CMD = 0; //清命令寄存器,使命令寄存器無命令,此句可不用 IAP_TRIG = 0; //清命令觸發(fā)寄存器,使命令觸發(fā)寄存器無觸發(fā),此句可不用 IAP_ADDRH = 0; IAP_ADDRL = 0; }//
//讀一字節(jié),調(diào)用前需打開IAP 功能,入口:DPTR = 字節(jié)地址,返回:A = 讀出字節(jié) uchar read_add(uint addr) //讀EEPROM { IAP_DATA = 0x00; IAP_CONTR = 0x84; //打開IAP 功能, 設(shè)置Flash 操作等待時間 IAP_CMD = 0x01; //IAP/ISP/EEPROM 字節(jié)讀命令
IAP_ADDRH = addr>>8; //設(shè)置目標(biāo)單元地址的高8 位地址 IAP_ADDRL = addr&0xff; //設(shè)置目標(biāo)單元地址的低8 位地址
EA = 0; IAP_TRIG = 0x5a; //先送 46h,再送B9h 到ISP/IAP 觸發(fā)寄存器,每次都需如此 IAP_TRIG = 0xa5; //送完 B9h 后,ISP/IAP 命令立即被觸發(fā)起動 _nop_(); EA = 1; IAP_Disable(); //關(guān)閉IAP 功能, 清相關(guān)的特殊功能寄存器,使CPU 處于安全狀態(tài), //一次連續(xù)的IAP 操作完成之后建議關(guān)閉IAP 功能,不需要每次都關(guān) return (IAP_DATA); }//------------------------------------------------------------------------------
//字節(jié)編程,調(diào)用前需打開IAP 功能,入口:DPTR = 字節(jié)地址, A= 須編程字節(jié)的數(shù)據(jù) void write_add(uint addr,uchar ch) //直接寫EEPROM { IAP_CONTR = 0x84; //打開 IAP 功能, 設(shè)置Flash 操作等待時間 IAP_CMD = 0x02; //IAP/ISP/EEPROM 字節(jié)編程命令
IAP_ADDRH = addr>>8; //設(shè)置目標(biāo)單元地址的高8 位地址 IAP_ADDRL = addr&0xff; //設(shè)置目標(biāo)單元地址的低8 位地址
IAP_DATA = ch; //要編程的數(shù)據(jù)先送進(jìn)IAP_DATA 寄存器 EA = 0; IAP_TRIG = 0x5a; //先送 46h,再送B9h 到ISP/IAP 觸發(fā)寄存器,每次都需如此 IAP_TRIG = 0xa5; //送完 B9h 后,ISP/IAP 命令立即被觸發(fā)起動 _nop_(); EA = 1; IAP_Disable(); //關(guān)閉IAP 功能, 清相關(guān)的特殊功能寄存器,使CPU 處于安全狀態(tài), //一次連續(xù)的IAP 操作完成之后建議關(guān)閉IAP 功能,不需要每次都關(guān) }//------------------------------------------------------------------------------ //擦除扇區(qū), 入口:DPTR = 扇區(qū)地址
void Sector_Erase(uint addr) //扇區(qū)擦除 { IAP_CONTR = 0x84; //打開IAP 功能, 設(shè)置Flash 操作等待時間 IAP_CMD = 0x03; //IAP/ISP/EEPROM 扇區(qū)擦除命令
IAP_ADDRH =addr>>8; //設(shè)置目標(biāo)單元地址的高8 位地址 IAP_ADDRL =addr&0xff; //設(shè)置目標(biāo)單元地址的低8 位地址
EA = 0; IAP_TRIG = 0x5a; //先送 46h,再送B9h 到ISP/IAP 觸發(fā)寄存器,每次都需如此 IAP_TRIG = 0xa5; //送完 B9h 后,ISP/IAP 命令立即被觸發(fā)起動 _nop_();
EA = 1; 下載燒錄說明 IRC頻率選11.0592M 如果已燒錄過的單片機(jī),燒錄前必須下載后恢復(fù)下出廠設(shè)置。才能再燒錄,新單片機(jī)不用恢復(fù) 操作:按住學(xué)習(xí)鍵,上電保持10秒以上松開即可。
Protel99格式的PCB和源程序燒寫文件等資料下載:
資料.7z
(435.33 KB, 下載次數(shù): 71)
2024-5-7 15:26 上傳
點(diǎn)擊文件名下載附件
|