欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
EV1527學(xué)習(xí)碼無(wú)線遙控汽車防盜器單片機(jī)程序資料
[打印本頁(yè)]
作者:
z637300
時(shí)間:
2024-7-30 08:45
標(biāo)題:
EV1527學(xué)習(xí)碼無(wú)線遙控汽車防盜器單片機(jī)程序資料
EV1527是一片由CMOS設(shè)計(jì)制造的可預(yù)
燒內(nèi)碼的學(xué)習(xí)碼編碼芯片,由軟件解碼。內(nèi)碼共有2O位
元可預(yù)燒100萬(wàn)組內(nèi)碼組合,大大降低了使用編碼上重復(fù)
的機(jī)率。更重要的是其不可復(fù)制性,并且由于可以自學(xué)
習(xí),當(dāng)發(fā)射模塊丟了,只要對(duì)接收模塊進(jìn)行自學(xué)習(xí)就可以
使原先的發(fā)射模塊失效,大大提高了安全性
單片機(jī)源程序如下:
/*
;======================硬件結(jié)構(gòu)======================
;
; __________
;
;
*/
//8路控制程序
//
#include <pic.h>
__CONFIG( WDTDIS & PWRTEN &INTOSCIO & MCLRDIS & BOREN & CPD & CPROTECT);
#define uchar unsigned char
#define uint unsigned int
#define rfin RA0
#define learnkey RA5
#define LED RA4
#define VT RA1
#define OUT1 RC2
#define OUT2 RC1
#define OUT3 RC0
#define OUT4 RA2
#define L_M RC5
#define max_how 15
//學(xué)習(xí)變量
uchar learnbuf0;
uchar learnbuf1;
uchar learnbuf2;
//===================//
bit learnf;
bit fun_out;
bit learn_ok;
bit fun_ok;
//========================//
//記時(shí)間變量
uchar temp0;
uchar temp1;
uchar temp2;
uchar out_temp0;
uchar out_temp1;
//=========================//
//RF接收變量
uchar rec_count;
uchar lo_buf;
uchar hi_buf;
uchar cs2;
uchar cs1;
uchar cs0;
//RF接收標(biāo)志
bit rfstart1;
bit rfstart;
bit rfok;
bit rf_er;//接收失敗
//===============================//
//定時(shí)中斷
void interrupt all ()
{
CLRWDT();
temp0++;
out_temp0++;
if(T0IF==1)
{
T0IF=0;
TMR0=0;
}
if(TMR1IF==1)
{
TMR1IF=0;//清中斷標(biāo)志位
TMR1L=180;
TMR1H=255;
}
if(out_temp0>200)
{
out_temp0=0;
out_temp1++;
if(out_temp1>20)
{
out_temp1=0;
VT=0;
if(L_M==0)
{
OUT1=0;
OUT2=0;
OUT3=0;
OUT4=0;
}
}
/*
if(out_temp1>30)
{
out_temp1=0;
if(L_M==0)
{
OUT1=0;
OUT2=0;
OUT3=0;
OUT4=0;
}
}
*/
}
//時(shí)間程序
if(temp0>200)//2MS
{
CLRWDT();
temp0=0;
temp1++;
if(temp1>10)
{
fun_ok=0;
}
if(temp1>50)
{
}
if(temp1>8)
{
learn_ok=0;//400ms
}
if(temp1>200)
{
CLRWDT();
temp1=0;
temp2++;
if(temp2>6)
{
learnf=0;//學(xué)習(xí)時(shí)間為20秒
}
}
}
//RF接受程序
if(rfin==1)
{
if(rfstart1==1)//由低到高開始接收
{
if(lo_buf>hi_buf)//判斷是否低電平
{
if(lo_buf>5&&lo_buf<19&&hi_buf>2&&hi_buf<9)
{
rec_count++;//是低電平
cs0<<=1;//移動(dòng)一位
}
else
{//接收失敗
rf_er=1;
}
}
else if(lo_buf<hi_buf)//判斷是否低高電平
{
if(lo_buf>2&&lo_buf<9&&hi_buf>5&&hi_buf<19)//判斷高電平是否大于900US和低電平大于200US
{
rec_count++;//是高電平
cs0<<=1;//移動(dòng)一位
cs0++;
}
else
{
rf_er=1;
}
}
else if(lo_buf==hi_buf)
{
rf_er=1;
}
if(rf_er==1)
{
rfstart=0;//接收失敗
rec_count=0;
rfok=0;
}
else
{
if(rec_count==8){cs2=cs0;}
else if(rec_count==16){cs1=cs0;}
}
if(rec_count==24)
{
rfok=1;//接收成功
}
hi_buf=0;//rfstart1==1函數(shù)
}
else if(lo_buf>30&&lo_buf<180)//判斷同步頭
{
rfstart=1;//檢測(cè)到正確的同步頭
rec_count=0;//接收位數(shù),清除0
}
hi_buf++;
lo_buf=0;
rfstart1=0;
rf_er=0;//接收失敗標(biāo)志
}
//===================================//
else
{ //輸入端口為低電
lo_buf++;
if(rfstart==1)//開始接收標(biāo)志
{
rfstart1=1;
}
else
{
hi_buf=0;
}
}
}//TMR1IF==1函數(shù)內(nèi)
//==============================//
void learnkeypr(void)
{
if(learn_ok==0)//正在學(xué)習(xí)
{
uchar i,b;
uint j;
LED=0;
CLRWDT();
CLRWDT();
CLRWDT();
if(learnkey==0)
{
//LED=1;
for(j=0;j<=50000;j++){}
if(learnkey==0)
{
PORTC=0;
PORTA=0;
LED=1;
temp0=0;
temp1=0;
temp2=0;
while((temp2<2)&&learnkey==0)//6==20S
{
LED=1;
CLRWDT();
}//長(zhǎng)按25秒擦除EE
if(learnkey==0)
{
LED=1;
b=0x0ff;
for(i=0;i<=127;i++){EEPROM_WRITE(i=i,b);}
LED=0;
CLRWDT();
while(learnkey==0){}
}
else
{
CLRWDT();
temp0=0;
temp1=0;
temp2=0;
LED=0;
learnf=1;//進(jìn)入學(xué)習(xí)
}
}
}
}
}
//===============================================//
void init(void){ //初始化函數(shù)
CLRWDT();
OSCCAL=_READ_OSCCAL_DATA();
CMCON=0X07; //關(guān)閉比較器
//MOVLW TRISAV ; 0111B
//MOVWF TRISA
//MOVLW TRISBV
//MOVWF TRISC
TRISA=0b11101001;
TRISC=0b11111000;
GIE=1;//開總中斷
PEIE=1;
TMR1IE=1; //開啟定時(shí)中斷1
T0IE=0; //關(guān)閉定時(shí)器1中斷
OPTION=0X00; //開內(nèi)部上拉
T1CON=0X01;//使用定時(shí)器1
TMR1L=180;
TMR1H=255; //定義100US中斷一次
WPUA=0X0;//關(guān)閉上拉
PORTA=0;
PORTC=0;
}
void learnok(void)
{
LED=1;//學(xué)習(xí)成功
learn_ok=1;//學(xué)習(xí)成功
learnf=0;
temp0=0;
temp1=0;
temp2=0;
}
void save_learn(void)
{
EEPROM_WRITE(127,learnbuf0);//存入指針
learnbuf0=learnbuf0*3;
EEPROM_WRITE(learnbuf0=learnbuf0,cs0);
learnbuf0++;
EEPROM_WRITE(learnbuf0=learnbuf0,cs1);
learnbuf0++;
EEPROM_WRITE(learnbuf0=learnbuf0,cs2);
learnok();
}
復(fù)制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1