新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 紅外解碼程序換種寫法

紅外解碼程序換種寫法

作者: 時間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
#include

#define uint unsigned int
#define uchar unsigned char
sbit IR=P3^2; //紅外接口標(biāo)志
sbit RS = P1^0;
sbit RW = P1^1;
sbit E = P1^2;
sbit beep = P1^7;
uint hour,minute,second,count;
char code Tab[16]={0,1,2,3,4,5,
6,7,8,9,A,B,C,D,E,F};
//char code Tab[16]="0123456789abcdef";//兩種定義方法都可以
chardataTimeNum[]=" ";//data:固定指前面0x00-0x7f的
//128個RAM,可以用acc直接讀寫的,速度最快,生成的代碼也最小。
char data Test1[]=" ";
void DelayMs(uchar z);
/******************************************************************/
/* 變量聲明 */
/******************************************************************/
uchar irtime;//紅外用全局變量
bitirpro_ok,irok;
uchar IRcord[4]; //處理后的紅外碼,分別是 客戶碼,客戶碼,數(shù)據(jù)碼,數(shù)據(jù)碼反碼
uchar irdata[33]; //33個高低電平的時間數(shù)據(jù)
/******************************************************************/
/* 函數(shù)聲明 */
/******************************************************************/
void Ir_work(void);
void Ircordpro(void);
void ShowString (unsigned charline,char *ptr);
/******************************************************************/
/* 定時器0中斷服務(wù)函數(shù) */
/******************************************************************/

void beep1()
{
uchar i;
for (i=0;i<4;i++)
{beep=0;
DelayMs(400);
beep=1;
DelayMs(400);
}
}
void beep2()
{
uchar i;
for (i=0;i<5;i++)
{beep=0;
DelayMs(300);
beep=1;
DelayMs(300);
}
}
void beep3()
{
uchar i;
for (i=0;i<2;i++)
{beep=0;
DelayMs(500);
beep=1;
DelayMs(500);
}
}
void shan()
{
uchar i;
for (i=0;i<3;i++)
{P0=0x55;
DelayMs(1000);
P0=0xff;
DelayMs(1000);
}
}
void tim0_isr (void) interrupt 1 using 1//定時器0中斷服務(wù)函數(shù)
{
irtime++; //用于計數(shù)2個下降沿之間的時間
}
/******************************************************************/
/* 外部中斷0函數(shù) */
/******************************************************************/
void ex0_isr (void) interrupt 0 using 0//外部中斷0服務(wù)函數(shù)
{
uchar i; //接收紅外信號處理
bitstartflag; //是否開始處理標(biāo)志位
if(startflag)
{

if(irtime<63&&irtime>=33)//引導(dǎo)碼 TC9012的頭碼,9ms+4.5ms
i=0;

irdata[i]=irtime;//存儲每個電平的持續(xù)時間,用于以后判斷是0還是1
irtime=0;
i++;
if(i==33)
{
irok=1;
i=0;
}
}

else
{
irtime=0;
startflag=1;
}
}
/******************************************************************/
/* 定時器0初始化 */
/******************************************************************/
void TIM0init(void)//定時器0初始化
{
TMOD=0x02;//定時器0工作方式2,TH0是重裝值,TL0是初值
TH0=0x00; //重載值
TL0=0x00; //初始化值
ET0=1; //開中斷
TR0=1;
}


上一頁 1 2 下一頁

關(guān)鍵詞: 紅外解碼1602顯示碼

評論


技術(shù)專區(qū)

關(guān)閉