資源簡介
單片機對TC9012芯片進行解碼,并在數(shù)碼管上顯示出鍵值;程序的思路清晰易懂,很容易經(jīng)過修改移植到其他的芯片上;超值

代碼片段和文件信息
/*copyright?2007ShangHai??HaoTun?Electronic?Technology?co.Ltd
?*
?*This?sample?is?used?for?control?light?by?infrared?.
?*
?*write?by?Shifang
?*
?*V1.1
?*/
?//使用12M晶振?適用于TC9012芯片,其他芯片請自行更改解碼時序
#include
#include
#include
////////////////////////////////////////////////
#define?TURE?1
#define?FALSE?0
////////////////////////////////////////////////
sbit?IR=P3^2;//紅外接口標志
////////////////////////////////////////////
unsigned?char??irtime;//紅外用全局變量
bit?irpro_okirok;
unsigned?char?IRcord[4];
unsigned?char???irdata[33];
//////////////////////////////////////////////
void?Delay(unsigned?char?mS);
void?Ir_work(void);
void?Ircordpro(void);
//////////////////////////////////////////////////////////////////??
void?tim0_isr?(void)?interrupt?1?using?1//定時器0中斷服務函數(shù)
{
??irtime++;
}
///////////////////////////////////////////////////////////////////////
void?ex0_isr?(void)?interrupt?0?using?0//外部中斷0服務函數(shù)
{
??static?unsigned?char??i;
??static?bit?startflag;
?if(startflag)
?{
???
????if(irtime<42&&irtime>=33)//引導碼?TC9012的頭碼
????????????i=0;
?????
???? irdata[i]=irtime;//一次存儲32位電平寬度
???? irtime=0;
???? i++;
??? ?if(i==33)
?????? {
?? ?irok=1;
?i=0;
?? }
??????????}
?
?? ?else
{irtime=0;startflag=1;}
}
////////////////////////////////////////////////////////////////////
void?TIM0init(void)//定時器0初始化
{
??TMOD=0x02;//定時器0工作方式2,TH0是重裝值,TL0是初值
??TH0=0x00;//reload?value
??TL0=0x00;//initial?value
??ET0=1;//開中斷
??TR0=1;
}
///////////////////////////////////////////////////////////////////
void?EX0init(void)
{
?IT0?=?1;???//?Configure?interrupt?0?for?falling?edge?on?/INT0?(P3.2)
?EX0?=?1;???//?Enable?EX0?Interrupt
?EA?=?1;??
}
/****************************************************************/
/******************************************************************/
??void?Ir_work(void)//紅外鍵值散轉程序
??{
???????switch(IRcord[2])//判斷第三個數(shù)碼值
?????????{
?case?0:P0=0xf9;break;//1?顯示相應的按鍵值
?case?1:P0=0xa4;break;//2
?case?2:P0=0xb0;break;//3
?case?3:P0=0x99;break;//4
?case?4:P0=0x92;break;//5
?case?5:P0=0x82;break;//6
?case?6:P0=0xf8;break;//7
?case?7:P0=0x80;break;//8
?case?8:P0=0x90;break;//9
?}
???
??irpro_ok=0;//處理完成標志
??}
/*****************************************************************/
void?Ircordpro(void)//紅外碼值處理函數(shù)
{?
??unsigned?char?i?j?k;
??unsigned?char?cordvalue;
??k=1;
??for(i=0;i<4;i++)//處理4個字節(jié)
?????{
??????for(j=1;j<=8;j++)?//處理1個字節(jié)8位
?????????{
??????????cord=irdata[k];
??????????if(cord>7)//大于某值為1
????{
?????????????value=value|0x80;
}
??????????else?
????{
?????????????value=value;
}
??????????if(j<8)
????{
?value=value>>1;
}
???????????k++;
?????????}
?????IRcord[i]=value;
?????value=0;?????
?????}?irpro_ok=1;//處理完畢標志位置1
????
}
/////////////////////////////////////////////////////////////////
vo
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????887??2008-08-18?07:13??18-紅外解碼數(shù)碼管顯示\紅外解碼.hex
?????文件???????8271??2008-08-18?07:13??18-紅外解碼數(shù)碼管顯示\紅外解碼.M51
????.......??????1188??2008-08-18?07:13??18-紅外解碼數(shù)碼管顯示\紅外解碼_Opt.Bak
?????文件??????????0??2008-12-05?15:08??18-紅外解碼數(shù)碼管顯示\紅外解碼.plg
????.......??????1994??2008-08-18?07:13??18-紅外解碼數(shù)碼管顯示\紅外解碼_Uv2.Bak
?????文件???????5338??2008-08-18?07:13??18-紅外解碼數(shù)碼管顯示\紅外解碼
?????文件???????3468??2008-08-18?07:13??18-紅外解碼數(shù)碼管顯示\解碼.c
?????文件???????7537??2008-08-18?07:13??18-紅外解碼數(shù)碼管顯示\解碼.LST
?????文件???????6205??2008-08-18?07:13??18-紅外解碼數(shù)碼管顯示\解碼.OBJ
?????文件???????1664??2008-12-05?15:09??18-紅外解碼數(shù)碼管顯示\紅外解碼.Uv2
?????文件????????979??2008-12-05?15:09??18-紅外解碼數(shù)碼管顯示\紅外解碼.Opt
?????目錄??????????0??2008-12-05?14:59??18-紅外解碼數(shù)碼管顯示
-----------?---------??----------?-----??----
????????????????37531????????????????????12
評論
共有 條評論