1、檢查硬件是否短路/短路,用數(shù)字萬用表的紅黑表筆分別點到LCD1602的電源和地引腳,也就是如圖所示的VCC和GND引腳。

2、上電測量供電電壓是否正常,上電后用數(shù)字萬用表紅黑表筆分別點到LCD1602的VCC和GND兩個引腳,觀察數(shù)字萬用表的讀數(shù)是否為5V(常用5V電壓供電)測量如圖所示兩點位置。

3、檢查單片機最小系統(tǒng)是否正常工作,用示波器測量單片機的晶振電路是否起振,單片機、晶振等元件是否焊接良好。
4、檢查LCD1602連接的排線是否有斷開的線或者接觸不良的接口,也有可能是排線損壞引起的原因,用數(shù)字萬用表的導(dǎo)通測量檔位測量排線以及接線是否正常導(dǎo)通.
5、以上硬件都檢查正常沒有問題的就檢查下驅(qū)動程序,檢查驅(qū)動程序是否正確,如圖所示。

lcd1602簡單顯示程序
lcd1602液晶手冊提供了一個初始化過程,由于不檢測“忙”位,所以程序比較復(fù)雜,而我們總結(jié)了一個更加簡易方便的過程提供給大家,手冊上描述的那個,大家僅僅作為了解就可以了,下面我把程序?qū)懗鰜泶蠹铱聪?,我們的初始化只用? 4 條語句,沒有像手冊介紹的那么繁瑣。
#include 《reg52.h》
#define LCD1602_DB P0
sbit LCD1602_RS = P1^0;
sbit LCD1602_RW = P1^1;
sbit LCD1602_E = P1^5;
void InitLcd1602();
void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
void main(){
unsigned char str[] = “Kingst Studio”;
InitLcd1602();
LcdShowStr(2, 0, str);
LcdShowStr(0, 1, “Welcome to KST51”);
while (1);
}
/* 等待液晶準備好 */
void LcdWaitReady(){
unsigned char sta;
LCD1602_DB = 0xFF;
LCD1602_RS = 0;
LCD1602_RW = 1;
do {
LCD1602_E = 1;
sta = LCD1602_DB; //讀取狀態(tài)字
LCD1602_E = 0;
}while (sta & 0x80); //bit7 等于 1 表示液晶正忙,重復(fù)檢測直到其等于 0 為止
}
/* 向 LCD1602 液晶寫入一字節(jié)命令,cmd-待寫入命令值 */
void LcdWriteCmd(unsigned char cmd){
LcdWaitReady();
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_DB = cmd;
LCD1602_E = 1;
LCD1602_E = 0;
}
/* 向 LCD1602 液晶寫入一字節(jié)數(shù)據(jù),dat-待寫入數(shù)據(jù)值 */
void LcdWriteDat(unsigned char dat){
LcdWaitReady();
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_DB = dat;
LCD1602_E = 1;
LCD1602_E = 0;
}
/* 設(shè)置顯示 RAM 起始地址,亦即光標位置,(x,y)-對應(yīng)屏幕上的字符坐標 */
void LcdSetCursor(unsigned char x, unsigned char y){
unsigned char addr;
if (y == 0){ //由輸入的屏幕坐標計算顯示 RAM 的地址
addr = 0x00 + x; //第一行字符地址從 0x00 起始
}else{
addr = 0x40 + x; //第二行字符地址從 0x40 起始
}
LcdWriteCmd(addr | 0x80); //設(shè)置 RAM 地址
}
/* 在液晶上顯示字符串,(x,y)-對應(yīng)屏幕上的起始坐標,str-字符串指針 */
void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str){
LcdSetCursor(x, y); //設(shè)置起始地址
while (*str != ‘\0’){ //連續(xù)寫入字符串數(shù)據(jù),直到檢測到結(jié)束符
LcdWriteDat(*str++); //先取 str 指向的數(shù)據(jù),然后 str 自加 1
}
}
/* 初始化 1602 液晶 */
void InitLcd1602(){
LcdWriteCmd(0x38); //16*2 顯示,5*7 點陣,8 位數(shù)據(jù)接口
LcdWriteCmd(0x0C); //顯示器開,光標關(guān)閉
LcdWriteCmd(0x06); //文字不動,地址自動+1
LcdWriteCmd(0x01); //清屏
}
程序中有詳細的注釋,結(jié)合本節(jié)前面的講解,大家自己分析下,掌握 1602 液晶的基本操作函數(shù)。LcdWriteDat(*str++)這行語句中對指針 str 的操作大家一定要理解透徹,先把 str指向的數(shù)據(jù)取出來用,然后 str 再加 1 以指向下一個數(shù)據(jù),這是非常常用的一種簡寫方式。另外關(guān)于本程序還有幾點值得提一下:
首先,我們把程序所有的功能都使用函數(shù)模塊化了,這樣非常有利于程序的維護,不管要寫一個什么樣的功能,只要調(diào)用相應(yīng)的函數(shù)就可以了,大家注意學習這種編程方法。
其次,我們使用液晶的習慣,也是用數(shù)學上的(x,y)坐標來進行屏幕定位,但與數(shù)學坐標系不同的是,液晶的左上角的坐標是 x=0,y=0,往右邊是 x+偏移,下邊是 y+偏移。
第三,第一次接觸多個參數(shù)傳遞的函數(shù),而且還帶了指針類型的參數(shù),所以多留心熟悉一下。
第四,讀寫數(shù)據(jù)和指令程序,每次都必須進行“忙”判斷。
第五,領(lǐng)略一下指針在這個地方的巧妙用法,你可以嘗試不用指針改寫程序試試,感受一下指針的優(yōu)勢。