單片機(jī)·LCD1602
一、管腳功能介紹
1.GND 地線
2.VCC 電源正極
3.VL 液晶顯示偏壓信號(hào)(對(duì)比度清晰一點(diǎn))
4.RS 數(shù)據(jù)/命令選擇端
5.R/W 讀/寫選擇端
6.EN 使能信號(hào)
7.D0~D7 P0口數(shù)據(jù)傳輸
8.BL+ 背光源正極
9.BL- 背光源負(fù)極
二、字符集
這是LCD1602特別值得注意的一點(diǎn),我開(kāi)始學(xué)習(xí)的時(shí)候,以后可以使用通用的ascii碼,但是實(shí)驗(yàn)了很久,得不到自己想要的結(jié)果,最后才發(fā)現(xiàn)LCD1602有自己的字符集
(最長(zhǎng)使用的十六進(jìn)制中的A-F,可以通過(guò) A+7來(lái)確定)
三、LCD1602 的基本時(shí)序
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)字的說(shuō)明
D7 D6 D5 D4 D3 D2 D1 D0
其中bit7是判斷LCD忙狀態(tài)的標(biāo)志,每次讀寫LCD1602必須對(duì)其狀態(tài)進(jìn)行判斷。
五、LCD1602初始化設(shè)置
1.顯示模式設(shè)置
指令碼 功能
0011 1000 16x2顯示,5x7點(diǎn)陣,8位數(shù)據(jù)口
2.顯示開(kāi)關(guān)及光標(biāo)設(shè)置
指令碼 功能
0000 1DCB D=1 開(kāi)顯示;D=0 關(guān)顯示 ;
C=1 顯示光標(biāo);C=0 不顯示光標(biāo) ;
B=1 光標(biāo)閃爍;B=0 光標(biāo)不閃爍 ;
0000 01NS N=1 讀寫一位,指針+1,光標(biāo)+1 ;
N=0 讀寫一位,指針 -1,光標(biāo) -1 ;
S =1 讀寫一位,屏幕左移(N=1)或者右移(N=0);
S =0 屏幕不移動(dòng) ;
3.指令碼 01H 1.數(shù)據(jù)指針清0 ;
2.所有顯示清0 ;
02H 1.數(shù)據(jù)指針清0 ;
六、實(shí)驗(yàn)
實(shí)驗(yàn)1:通過(guò)LCD1602顯示簡(jiǎn)單的字符串
程序:
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 !=