程序問題的,我給妳分享壹個測試可以用的吧!顯示字符串:
#include?<reg52.h>//51單片機相關庫
typedef?unsigned?int?uint;//數據類型重新定義
typedef?unsigned?char?uchar;
sbit?LCD_RS=P2^0;//數據/命令選擇位
sbit?LCD_RW=P2^1;//讀/寫選擇位
sbit?LCD_EN=P2^2;//使能信號
uchar?lcd_tab[]={"89S52"};//第壹行顯示的字符串
uchar?lcd_tab1[]={"I?LOVE?MCU"};//第二行顯示的字符串
/**********************************************************************?
*函數名稱:_delay_ms
*輸?入:uint?x
*輸?出:無?
*功?能:延時函數?
**********************************************************************/?
void?_delay_ms(uint?x)
{
uchar?i; while(x--) { for(i=0;i<120;i++); }}
/**********************************************************************?
*函數名稱:LCD_Write_Command
*輸?入:uchar?cmd
*輸?出:無?
*功?能:向LCD1602寫指令?
**********************************************************************/?
void?LCD_Write_Command(uchar?cmd)
{
LCD_RS=0;//根據規定,RS和R/W同時為低電平時,可以寫入指令 LCD_RW=0; LCD_EN=0;//EN置低電平 P0=cmd;//將數據送入P2口,即寫入指令或地址 LCD_EN=1;//EN置高電平 _delay_ms(1);//稍延時,給硬件反應時間 LCD_EN=0;//當EN由高電平跳變成低電平時,液晶模塊開始執行命令}
/**********************************************************************?
*函數名稱:LCD_Write_Data
*輸?入:uchar?dat
*輸?出:無?
*功?能:向LCD1602寫數據?
**********************************************************************/?
void?LCD_Write_Data(uchar?dat)
{
LCD_RS=1;//RS為高電平,RW為低電平時,可以寫入數據 LCD_RW=0; LCD_EN=0;//EN置低電平 P0=dat;//將數據送入P0口,即將數據寫入液晶模塊 LCD_EN=1;//EN置高電平 _delay_ms(1);//稍延時,給硬件反應時間 LCD_EN=0;//當EN由高電平跳變成低電平時,液晶模塊開始執行命令}
/**********************************************************************?
*函數名稱:Init_LCD?
*輸?入:無?
*輸?出:無?
*功?能:初始化LCD1602?
**********************************************************************/?
void?Init_LCD(void)
{
LCD_Write_Command(0x38);//顯示模式設置:16×2顯示,5×7點陣,8位數據接口 _delay_ms(1); LCD_Write_Command(0x06);//顯示模式設置:光標右移,字符不移 _delay_ms(1); LCD_Write_Command(0x0c);//顯示模式設置:顯示開,無光標,光標不閃爍 _delay_ms(1); LCD_Write_Command(0x01);//清屏幕指令,將以前的顯示內容清除 _delay_ms(1);}
/**********************************************************************?
*函數名稱:LCD_POS
*輸?入:uchar?pos?
*輸?出:無?
*功?能:字符顯示位置
**********************************************************************/?
void?LCD_POS(uchar?pos)
{
LCD_Write_Command(0x80|pos);//顯示位置的確定方法規定為"80H+地址碼x"}
/**********************************************************************?
*函數名稱:Show_String
*輸?入:uchar?*str?
*輸?出:無?
*功?能:LCD1602顯示字符串處理函數
**********************************************************************/?
void?Show_String(uchar?*str)
{
while(*str!='\0')//只要沒有寫到結束標誌,就繼續寫 LCD_Write_Data(*str++);//將字符常量寫入LCD,並指向下壹個字符}
/**********************************************************************?
*函數名稱:main
*輸?入:無?
*輸?出:無?
*功?能:函數主體
**********************************************************************/?
void?main(void)
{
Init_LCD(); while(1) { LCD_POS(0);//第壹行第壹列開始顯示 Show_String(lcd_tab);//將lcd_tab數組字符串寫入LCD顯示出 LCD_POS(0x40);//第二行第壹列開始顯示 Show_String(lcd_tab1);//將lcd_tab1數組字符串寫入LCD顯示 }}