LCD1602 (能够同时显示16x02 ,32个字符)
一、管脚功能介绍
1.GND 地线
2.VCC 电源正极
3.VL 液晶显示偏压信号(对比度清晰一点)
4.RS 数据/命令选择端
5.R/W 读/写选择端
6.EN 使能信号
7.D0~D7 P0口数据传输
8.BL+ 背光源正极
9.BL- 背光源负极
二、字符集
这是LCD1602特别值得注意的一点,我开始学习的时候,以后可以使用通用的ascii码,但是实验了很久,得不到自己想要的结果,最后才发现LCD1602有自己的字符集
(最长使用的十六进制中的A-F,可以通过 A+'7'来确定)
三、LCD1602 的基本时序
1.读状态:输入:RS = 0, RW = 1, EN = 1 , 输出:D0-D7 = 状态字 ;
2.写指令:输入:RS = 0, RW = 1, EN = 0 , EN = 1 ,(高脉冲) 输出:D0-D7 = 指令码 ;
3.读数据:输入:RS = 0, RW = 1, EN = 1 , 输出:D0-D7 = 数据 ;
4.写数据:输入:RS = 0, RW = 1, EN = 0 ,EN = 1 ,(高脉冲) 输出:D0-D7 = 数据;
四、LCD1602的状态字的说明
D7 D6 D5 D4 D3 D2 D1 D0
其中bit7是判断LCD忙状态的标志,每次读写LCD1602必须对其状态进行判断。
五、LCD1602初始化设置
1.显示模式设置
指令码 功能
0011 1000 16x2显示,5x7点阵,8位数据口
2.显示开关及光标设置
指令码 功能
0000 1DCB D=1 开显示;D=0 关显示 ;
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.数据指针清0 ;
2.所有显示清0 ;
02H 1.数据指针清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 !='