LCD12864顯示遙控鍵值讀取程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
/*TS12864A-3端口定義*/
#defineLCD_dataP0//數(shù)據(jù)口
sbitLCD_RS=P2^0;//寄存器選擇輸入
sbitLCD_RW=P2^1;//液晶讀/寫控制
sbitLCD_EN=P2^2;//液晶使能控制
sbitLCD_PSB=P2^3;//串/并方式控制
sbitLCD_RST=P2^5;//液晶復位端口
sbitIRIN=P3^2;//紅外遙控
sbitBEEP=P3^7;//蜂鳴器
sbitRELAY=P1^3;//繼電器
ucharcodedis1[]={"紅外遙控碼讀取器"};
ucharcodedis2[]={"----------------"};
ucharcodedis3[]={"鍵值編碼:--H"};
ucharcodedis4[]={"鍵值反碼:--H"};
#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};
ucharIRDIS[2];
ucharIRCOM[4];
voiddelay0(ucharx);//x*0.14MS
voidbeep();
voiddataconv();
voidlcd_pos(ucharX,ucharY);//確定顯示位置
/*******************************************************************/
/**/
/*延時函數(shù)*/
/**/
/*******************************************************************/
voiddelay(intms)
{
while(ms--)
{
uchari;
for(i=0;i<250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/*******************************************************************/
/**/
/*檢查LCD忙狀態(tài)*/
/*lcd_busy為1時,忙,等待。lcd-busy為0時,閑,可寫指令與數(shù)據(jù)。*/
/**/
/*******************************************************************/
bitlcd_busy()
{
bitresult;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
delayNOP();
result=(bit)(P0&0x80);
LCD_EN=0;
return(result);
}
/*******************************************************************/
/**/
/*寫指令數(shù)據(jù)到LCD*/
/*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。*/
/**/
/*******************************************************************/
voidlcd_wcmd(ucharcmd)
{
while(lcd_busy());
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
_nop_();
_nop_();
P0=cmd;
delayNOP();
LCD_EN=1;
delayNOP();
LCD_EN=0;
}
/*******************************************************************/
/**/
/*寫顯示數(shù)據(jù)到LCD*/
/*RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。*/
/**/
/*******************************************************************/
voidlcd_wdat(uchardat)
{
while(lcd_busy());
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
delayNOP();
LCD_EN=1;
delayNOP();
LCD_EN=0;
}
/*******************************************************************/
/**/
/*LCD初始化設定*/
/**/
/*******************************************************************/
voidlcd_init()
{
LCD_RST=0;//液晶復位
delay(30);
LCD_RST=1;
delay(5);
LCD_PSB=1;//并口方式
lcd_wcmd(0x34);//擴充指令操作
delay(5);
lcd_wcmd(0x30);//基本指令操作
delay(5);
lcd_wcmd(0x0C);//顯示開,關光標
delay(5);
lcd_wcmd(0x01);//清除LCD的顯示內(nèi)容
delay(5);
}
/*********************************************************/
/**/
/*主程序*/
/**/
/*********************************************************/
main()
{
uchari;
IE=0x81;//允許總中斷中斷,使能INT0外部中斷
TCON=0x01;//觸發(fā)方式為脈沖負邊沿觸發(fā)
IRIN=1;//I/O口初始化
BEEP=1;
RELAY=1;
delay(10);//延時
lcd_init();//初始化LCD
lcd_pos(0,0);//設置顯示位置為第一行的第1個字符
i=0;
while(dis1[i]!=’