單片機·LCD1602
一、管腳功能介紹
1.GND 地線
2.VCC 電源正極
3.VL 液晶顯示偏壓信號(對比度清晰一點)
4.RS 數(shù)據(jù)/命令選擇端
5.R/W 讀/寫選擇端
6.EN 使能信號
7.D0~D7 P0口數(shù)據(jù)傳輸
8.BL+ 背光源正極
9.BL- 背光源負極
二、字符集
這是LCD1602特別值得注意的一點,我開始學習的時候,以后可以使用通用的ascii碼,但是實驗了很久,得不到自己想要的結(jié)果,最后才發(fā)現(xiàn)LCD1602有自己的字符集
(最長使用的十六進制中的A-F,可以通過 A+7來確定)
三、LCD1602 的基本時序
1.讀狀態(tài):輸入:RS = 0, RW = 1, EN = 1 , 輸出:D0-D7 = 狀態(tài)字 ;
2.寫指令:輸入:RS = 0, RW = 1, EN = 0 , EN = 1 ,(高脈沖) 輸出:D0-D7 = 指令碼 ;
3.讀數(shù)據(jù):輸入:RS = 0, RW = 1, EN = 1 , 輸出:D0-D7 = 數(shù)據(jù) ;
4.寫數(shù)據(jù):輸入:RS = 0, RW = 1, EN = 0 ,EN = 1 ,(高脈沖) 輸出:D0-D7 = 數(shù)據(jù);
四、LCD1602的狀態(tài)字的說明
D7 D6 D5 D4 D3 D2 D1 D0
其中bit7是判斷LCD忙狀態(tài)的標志,每次讀寫LCD1602必須對其狀態(tài)進行判斷。
五、LCD1602初始化設置
1.顯示模式設置
指令碼 功能
0011 1000 16x2顯示,5x7點陣,8位數(shù)據(jù)口
2.顯示開關(guān)及光標設置
指令碼 功能
0000 1DCB D=1 開顯示;D=0 關(guān)顯示 ;
C=1 顯示光標;C=0 不顯示光標 ;
B=1 光標閃爍;B=0 光標不閃爍 ;
0000 01NS N=1 讀寫一位,指針+1,光標+1 ;
N=0 讀寫一位,指針 -1,光標 -1 ;
S =1 讀寫一位,屏幕左移(N=1)或者右移(N=0);
S =0 屏幕不移動 ;
3.指令碼 01H 1.數(shù)據(jù)指針清0 ;
2.所有顯示清0 ;
02H 1.數(shù)據(jù)指針清0 ;
六、實驗
實驗1:通過LCD1602顯示簡單的字符串
程序:
main.h
#ifndef _1602_H_
#define _1602_H_
typedef unsigned char uint8 ;
sbit RS = P1^0 ;
sbit RW = P1^1 ;
sbit EN = P1^5 ;
sbit BUSY = P0^7 ;
unsigned char code word1[] = {"yang zhou"} ;
unsigned char code word2[] = {"I love you"} ;
#endif
main.c
#include
#include
#include"1602.h"
void wait()
{
P0 = 0xFF ;
while(BUSY)
{
RS = 0 ;
RW = 1 ;
EN = 0 ;
EN = 1 ;
}
EN = 0 ;
}
void W_cmd(uint8 cmd)
{
wait() ;
EN = 0 ;
P0 = cmd ;
RS = 0 ;
RW = 0 ;
EN = 1 ;
EN = 0 ;
}
void Init_LCD1602()
{
W_cmd(0x38) ;
W_cmd(0x0C) ;
W_cmd(0x06) ;
W_cmd(0x01) ;
}
void W_dat(uint8 dat)
{
EN = 0 ;
P0 = dat ;
RS = 1 ;
RW = 0 ;
EN = 1 ;
EN = 0 ;
}
void W_string(uint8 *p)
{
while(*p !=