//128*64帶字庫液晶并口模式下顯示C程序
//*********************************************************************
//變量定義區(qū)
//*********************************************************************
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitLCD_RS=P2^6;//數(shù)據(jù)/命令選擇
sbitLCD_RW=P2^7;//讀寫控制
sbitLCD_EN=P2^0;//片選信號
#defineLCD_DATAP0//8bit數(shù)據(jù)線
#defineLOW0
#defineHIGH1
//初始化指令
#defineCLEAR_SCREEN0x01//清屏指令:清屏且AC值為00H
#defineAC_INIT0x02//將AC設置為00H。且游標移到原點位置
#defineCURSE_ADD0x06//設定游標移到方向及圖像整體移動方向(默認游標右移,圖像整體不動)
#defineFUN_MODE0x30//工作模式:8位基本指令集
#defineDISPLAY_ON0x0c//顯示開,顯示游標,且游標位置反白
#defineDISPLAY_OFF0x08//顯示關
#defineCURSE_DIR0x14//游標向右移動:AC=AC+1
#defineSET_CG_AC0x40//設置AC,范圍為:00H~3FH
#defineSET_DD_AC0x80
//*****************************************************************
//函數(shù)名稱:delay(uintt)延時函數(shù)。對于12M晶振大約延時1ms
//入口參數(shù):t
//出口參數(shù):無
//*****************************************************************
voiddelay(uintt)
{
uinti;
while(t--)
{
for(i=0;i<125;i++)
;
}
}
//*****************************************************************
//函數(shù)名稱:write_cmd(uintlcd_cmd)寫指令
//入口參數(shù):lcd_cmd
//返回參數(shù):無
//*****************************************************************
voidWriteCmd12864(ucharlcd_cmd)
{
LCD_RS=LOW;
LCD_RW=LOW;
LCD_EN=HIGH;
LCD_DATA=lcd_cmd;
LCD_EN=LOW;
}
//****************************************************************
//函數(shù)名稱:write_data(uintlcd_data)寫數(shù)據(jù)
//入口參數(shù):current_data
//返回參數(shù):無
//****************************************************************
voidWritEDAta12864(ucharlcd_data)
{
LCD_RS=HIGH;
LCD_RW=LOW;
LCD_EN=HIGH;
LCD_DATA=lcd_data;
LCD_EN=LOW;
}
/****************************************************************
函數(shù)名稱:Write12864(uint)寫數(shù)據(jù)
入口參數(shù):cmd,data
返回參數(shù):無
****************************************************************/
voidWrite12864(ucharlcd_cmd,ucharlcd_data)
{
WriteCmd12864(lcd_cmd);
WriteData12864(lcd_data);
}
//****************************************************************
//函數(shù)名稱:ReadBusy()判忙
//入口參數(shù):無
//返回參數(shù):"1"忙;"0"不忙
//****************************************************************
voidReadBusy(void)
{
uchari=5;
while(i--);
}
/****************************************************************
函數(shù)名稱:LcdInit()初始化
入口參數(shù):無
返回參數(shù):無
****************************************************************/
voidLcdInit()
{
delay(50);
WriteCmd12864(FUN_MODE);
delay(1);
WriteCmd12864(FUN_MODE);
delay(1);
WriteCmd12864(DISPLAY_ON);
delay(1);
WriteCmd12864(CLEAR_SCREEN);
delay(20);
//WriteCmd12864(CURSE_ADD);
}
/****************************************************************
函數(shù)名稱:LcdClear()清屏
入口參數(shù):無
返回參數(shù):無
****************************************************************/
voidLcdClear(void)
{
ReadBusy();
WriteCmd12864(CLEAR_SCREEN);
delay(3);
}
/****************************************************************
函數(shù)名稱:DisplayCgrom(ucharHz)顯示CGROM里的漢字
入口參數(shù):無
返回參數(shù):無
****************************************************************/
voidDisplayCgrom(ucharaddr,uchar*hz)
{
ReadBusy();
WriteCmd12864(addr);
ReadBusy();
while(*hz!=’