當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] //128*64帶字庫液晶并口模式下顯示C程序//*********************************************************************//變量定義區(qū)//*****************************************************************

//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設(shè)置為00H。且游標(biāo)移到原點(diǎn)位置
#defineCURSE_ADD0x06//設(shè)定游標(biāo)移到方向及圖像整體移動(dòng)方向(默認(rèn)游標(biāo)右移,圖像整體不動(dòng))
#defineFUN_MODE0x30//工作模式:8位基本指令集
#defineDISPLAY_ON0x0c//顯示開,顯示游標(biāo),且游標(biāo)位置反白
#defineDISPLAY_OFF0x08//顯示關(guān)
#defineCURSE_DIR0x14//游標(biāo)向右移動(dòng):AC=AC+1
#defineSET_CG_AC0x40//設(shè)置AC,范圍為:00H~3FH
#defineSET_DD_AC0x80


//*****************************************************************
//函數(shù)名稱:delay(uintt)延時(shí)函數(shù)。對于12M晶振大約延時(shí)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!=’