標(biāo)題: 基于STC15F104單片機(jī)解碼PT2262 EV1527軟件解碼 2272學(xué)習(xí)遙控器芯片 [打印本頁(yè)]
作者: yuanyuananfang0 時(shí)間: 2024-5-7 09:41
標(biāo)題: 基于STC15F104單片機(jī)解碼PT2262 EV1527軟件解碼 2272學(xué)習(xí)遙控器芯片
STC15F104W解碼原理圖.jpg (76.48 KB, 下載次數(shù): 28)
下載附件
2024-5-7 09:31 上傳
1.png (18.78 KB, 下載次數(shù): 35)
下載附件
2024-5-7 09:33 上傳
315-433MHZ學(xué)習(xí)遙控器芯片支持1527 2264 2260 2262 SC5211 HS2240等解碼,自動(dòng)適應(yīng)振蕩電阻
2260 2262 2264 如果不進(jìn)行人工地址編碼,好多個(gè)遙控器地址編碼一樣的,只要學(xué)習(xí)一個(gè)遙控器,所有的遙控器都能同時(shí)用
一:如何設(shè)置自鎖,互鎖,點(diǎn)動(dòng)輸出1:斷電。按住學(xué)習(xí)鍵然后上電保持1-2秒鐘后松開(kāi),學(xué)習(xí)燈閃3次,設(shè)置為自鎖輸出。
2:斷電。按住學(xué)習(xí)鍵然后上電保持1-2秒鐘后松開(kāi),學(xué)習(xí)燈閃1次,設(shè)置為互鎖輸出。
3:斷電。按住學(xué)習(xí)鍵然后上電保持1-2秒鐘后松開(kāi),學(xué)習(xí)燈閃2次,設(shè)置為點(diǎn)動(dòng)輸出。
二:遙控器學(xué)習(xí):以上輸出模式設(shè)置后斷開(kāi)電源,然后上電,按一下學(xué)習(xí)鍵,學(xué)習(xí)燈保持亮,再按遙控器上的任意一鍵,學(xué)習(xí)燈熄滅,遙控器學(xué)習(xí)成功。重復(fù)上述操作可以學(xué)習(xí)多達(dá)20個(gè)遙控器。1527 2260 2262 2264等的遙控器可以混合學(xué)習(xí)使用。
三:如何清空已學(xué)習(xí)過(guò)的遙控器:斷電,按住學(xué)習(xí)鍵然后上電保持4秒以上再松開(kāi)按鍵,學(xué)習(xí)燈閃爍4次,說(shuō)明已學(xué)習(xí)過(guò)的遙控器已被清空。
單片機(jī)源程序如下:
//內(nèi)部晶振:11.0592M
//測(cè)試芯片:STC15F104E/STC11F04W
//硬件最簡(jiǎn)版
//實(shí)現(xiàn)2262、1527解碼輸出,學(xué)習(xí)、自適應(yīng)多阻值,片內(nèi)EEPROM存儲(chǔ)相關(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; //用于接收過(guò)程存放遙控編碼,編碼比較兩次,這是第一次
uchar idata mmb1,mmb2,mmb3; // 用于接收過(guò)程存放遙控編碼,第二次
uchar key_data;
uchar short_k;
uchar mma1,mma2,mma3; //用于解碼過(guò)程
uchar L_M_select;
uchar xplx;
uint s,s1;
bit old_rc5; //保存上一次查詢(xún)到的電平狀態(tài)
bit tb_ok; //接收到同步的馬時(shí)置1
bit rf_ok1,rf_ok2; //解碼過(guò)程中的臨時(shí)接收成功標(biāo)志
bit rf_ok; //接收到一個(gè)完整的遙控命令后置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毫秒延時(shí)
{
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讀寫(xiě)驅(qū)動(dòng)程序///////////////////////////
//====================================================
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; //清命令寄存器,使命令寄存器無(wú)命令,此句可不用
IAP_TRIG = 0; //清命令觸發(fā)寄存器,使命令觸發(fā)寄存器無(wú)觸發(fā),此句可不用
IAP_ADDRH = 0;
IAP_ADDRL = 0;
}//
//讀一字節(jié),調(diào)用前需打開(kāi)IAP 功能,入口:DPTR = 字節(jié)地址,返回:A = 讀出字節(jié)
uchar read_add(uint addr) //讀EEPROM
{
IAP_DATA = 0x00;
IAP_CONTR = 0x84; //打開(kāi)IAP 功能, 設(shè)置Flash 操作等待時(shí)間
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ā)起動(dòng)
_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)用前需打開(kāi)IAP 功能,入口:DPTR = 字節(jié)地址, A= 須編程字節(jié)的數(shù)據(jù)
void write_add(uint addr,uchar ch) //直接寫(xiě)EEPROM
{
IAP_CONTR = 0x84; //打開(kāi) IAP 功能, 設(shè)置Flash 操作等待時(shí)間
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ā)起動(dòng)
_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; //打開(kāi)IAP 功能, 設(shè)置Flash 操作等待時(shí)間
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ā)起動(dòng)
_nop_();
EA = 1;
下載燒錄說(shuō)明
IRC頻率選11.0592M
如果已燒錄過(guò)的單片機(jī),燒錄前必須下載后恢復(fù)下出廠(chǎng)設(shè)置。才能再燒錄,新單片機(jī)不用恢復(fù)
操作:按住學(xué)習(xí)鍵,上電保持10秒以上松開(kāi)即可。
Protel99格式的PCB和源程序燒寫(xiě)文件等資料下載:
資料.7z
(435.33 KB, 下載次數(shù): 71)
2024-5-7 15:26 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
-
IO口設(shè)置.png
(177.4 KB, 下載次數(shù): 56)
下載附件
2024-5-7 09:32 上傳
-
STC15F104W解碼原理圖.jpg
(76.48 KB, 下載次數(shù): 45)
下載附件
2024-5-7 09:37 上傳
電路原理圖
作者: yuanyuananfang0 時(shí)間: 2024-5-7 09:43
保證能用哦
作者: fhl323225577 時(shí)間: 2024-5-9 22:13
能接收多少距離?和用硬解碼差距大嗎?
作者: yuanyuananfang0 時(shí)間: 2024-5-13 20:52
同等功率遙控距離一樣
作者: 紫色的云 時(shí)間: 2024-5-14 08:36
學(xué)習(xí)了,謝謝樓主的資料
作者: yuanyuananfang0 時(shí)間: 2024-5-17 10:01
客氣了
作者: 我是栗子 時(shí)間: 2024-9-9 10:46

感謝樓主
作者: hxszrb 時(shí)間: 2024-10-3 22:53
好東西,學(xué)習(xí)了
作者: wenwu2013 時(shí)間: 2024-10-12 15:05
感謝分享,已下載。請(qǐng)問(wèn)設(shè)置與外圍電路P3.0-P3.3起什么作用,可以忽略嗎
作者: wkman 時(shí)間: 2024-10-17 16:00
資料.7z 里面只有 hex ???
| 歡迎光臨 (http://www.denmoz.com/bbs/) |
Powered by Discuz! X3.1 |