標(biāo)題:
PIC16F877A單片機(jī)接收BA5104紅外線遙控解碼程序
[打印本頁(yè)]
作者:
xiaos
時(shí)間:
2015-4-2 23:18
標(biāo)題:
PIC16F877A單片機(jī)接收BA5104紅外線遙控解碼程序
//熟悉使用單片機(jī)進(jìn)行紅外線遙控解碼
//1、首先根據(jù)BA5104遙控IC的編碼形式進(jìn)行解碼
//2、把解碼出來的按鍵用LED指示
//**************************************************
//**************************************************
//硬件設(shè)置:
//1、SW1開關(guān)2閉合,其他斷開
//2、SW2開關(guān)1閉合,其他斷開
//3、SW4開關(guān)全部閉合
//**************************************************
//**************************************************
//*****************定義頭文件**********************
//**************************************************
#include<PIC.h>
#include"delay.h"
//**************************************************
//******************定義配置位*********************
//**************************************************
__CONFIG(0x3545);
//FLASH代碼不保護(hù),RB6和RB7為調(diào)試模式,F(xiàn)LASH不寫保護(hù),數(shù)據(jù)代碼不保護(hù)
//RB3為數(shù)字IO口,低電壓復(fù)位使能,上電延時(shí)開,看門狗開,4M晶體XT振蕩器
//**************************************************
//******************定義常量***********************
//**************************************************
#define uchar unsigned char
#define uint unsigned int
#define IR RE2
//**************************************************
//******************定義變量***********************
//**************************************************
uint rdata1,data;
//***********************************************
//函 數(shù) 名:port_init();
//入口參數(shù):無
//出口參數(shù):無
//函數(shù)作用:端口初始化
//說 明:
//***********************************************
void port_init(void)
{
PORTA=0X00; //設(shè)置RA口輸出低電平
PORTD=0X00; //設(shè)置RD口輸出低電平
PORTE=0X00; //設(shè)置RE口輸出低電平
ADCON1=0X07; //設(shè)置RA口,RE口為普通IO口
TRISA=0X00; //設(shè)置RA口為輸出口
TRISD=0X00; //設(shè)置RD口為輸出口
TRISE=0X04; //設(shè)置RE2口為輸入口,其他為輸出口
OPTION=0X8F; //分頻給WDT,分頻比為128
}
//***********************************************
//函 數(shù) 名:scan();
//入口參數(shù):無
//出口參數(shù):無
//函數(shù)作用:遙控接收掃描函數(shù)
//說 明:
//***********************************************
void scan(void)
{
uchar i,count=0;
rdata1=0; //變量清零
IR=0; //先輸入低電平
if(IR) //判斷是否有遙控信號(hào),高電平為有遙控信號(hào)
{
while(IR){CLRWDT();;} //等待32ms延時(shí)
for(i=0;i<12;i++) //依次接收12位數(shù)據(jù)
{
while(!IR) //等待低電平信號(hào)結(jié)束
{
DelayUs(20); //延時(shí)50us, 20*2.5us=50us
count++;
if(count>25){break;} //延時(shí)大于1.25ms,跳出
}
if(count<7){return;} //延時(shí)小于300us,為干擾跳出
else if((count>6)&&(count<11)){rdata1|=0x00;} //延時(shí)在350-500us,判定為0
else if(count>20){rdata1|=0x01;} //延時(shí)在1ms,判定為1
rdata1=rdata1<<1; //移位準(zhǔn)備接收下一位數(shù)據(jù)
count=0; //變量清零
while(IR){CLRWDT();} //等待高電平結(jié)束,接收下一位
}
}
}
//***********************************************
//函 數(shù) 名:delayms(uchar time);
//入口參數(shù):time
//出口參數(shù):無
//函數(shù)作用:延時(shí)
//說 明:
//***********************************************
void delayms(uchar time)
{
uint i;
while(time--)
{
for(i=93;i>0;i--){;}
}
}
//***********************************************
//函 數(shù) 名:buzzer();
//入口參數(shù):無
//出口參數(shù):無
//函數(shù)作用:產(chǎn)生警報(bào)聲
//說 明:
//***********************************************
void buzzer(void)
{
RA5=1; //RE1輸出高電平
delayms(200);
RA5=0; //RE1輸出低電平
}
//***********************************************
//函 數(shù) 名:display();
//入口參數(shù):無
//出口參數(shù):無
//函數(shù)作用:顯示函數(shù)
//說 明:
//***********************************************
void display(void)
{
switch(data)
{
case 0x0D81:RD0=!RD0;buzzer();break;
case 0x0D82:RD1=!RD1;buzzer();break;
case 0x0D84:RD2=!RD2;buzzer();break;
case 0x0D88:RD3=!RD3;buzzer();break;
case 0x0D90:RD4=!RD4;buzzer();break;
case 0x0DA0:RD5=!RD5;buzzer();break;
case 0x0DC3:RD6=!RD6;buzzer();break;
case 0x0DC6:RD7=!RD7;buzzer();
}
}
//***********************************************
//函 數(shù) 名:main();
//入口參數(shù):無
//出口參數(shù):無
//函數(shù)作用:MAIN函數(shù)
//說 明:
//***********************************************
void main(void)
{
port_init(); //調(diào)用端口初始化函數(shù)
while(1)
{
scan(); //調(diào)用遙控掃描函數(shù)
if(data!=rdata1)
{
data=rdata1&0x0fff; //保留接收數(shù)據(jù)的低12位
display(); //調(diào)用遙控按鍵顯示函數(shù)
}
}
}
復(fù)制代碼
作者:
401342539
時(shí)間:
2019-11-25 10:52
我正在學(xué)習(xí)
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1