LCD1602驱动编写(基于51单片机)
目录
1. LCD1602基本介绍 2. LCD1602原理图 3. 引脚说明 4. 基本时序操作 5. 状态字说明 6. 1602地址映射 7. 指令说明 8. 程序及仿真
OK,这当然是和大家开个玩笑,你们的肯定就是对我最大的支持与鼓励,在接触我们的1602之前先来放松一下神经,接下来,我们就来了解LCD1602不能说的秘密。
管他三七二十一,我用液晶显示器————我国著名诗人1602。
LCD1602基本介绍:
从他的名言中我们可以定性的知道,LCD1602是一款液晶显示器。 LCD是 Liquid Crystal Display也就是液晶显示器的英文缩写。 1602是由于他可显示的区域是由16列2行的小黑块构成,如下图:
LCD1602原理图:
引脚说明:
基本时序操作:
(高脉冲就是一个信号由0到1再到0一个非常短暂而迅速的过程)
状态字说明:
在每次进行读写操作时,要进行读写检测,确保STA7(D7)为0。 STA0~STA6(D0-D6)为最开始写入的指针地址。
1602地址映射图:
每一行有40个字节,但是只能显示前16个字节,后面的地址主要是为了显示移动字幕而设置。
指令说明:
具体程序:
#include <reg52.h> #define DB P3 sbit RS = P2^5; sbit RW = P2^6; sbit E = P2^7; void read_sta(); //读状态 void write_data(unsigned char dat); //写数据 void write_cmd(unsigned char cmd); //写指令 void set_cursor(unsigned int x,unsigned int y); //设置初始显示位置 void show_str(unsigned int x,unsigned int y,unsigned char *str); //显示字符 void lcd_init(); //初始化LCD1602 void main() { lcd_init(); show_str(0,0,"LQJ_LCD1206"); show_str(0,1,"HELLO_WORLD"); while(1); } void read_sta() { unsigned char sta; DB = 0XFF; RS = 0; RW = 1; do { E = 1; sta = DB; E = 0; } while(sta & 0x80); //检测到STA7=0,即可开始读写操作 } void write_data(unsigned char dat) { read_sta(); //对照写数据的时序来看 RS = 1; RW = 0; DB = dat; E = 1; E = 0; } void write_cmd(unsigned char cmd) { read_sta(); RS = 0; //写指令的时序来看 RW = 0; DB = cmd; E = 1; E = 0; } void set_cursor(unsigned int x,unsigned int y) { unsigned char address; if(y == 0) address = 0x00 + x; //第一行,第x-1列 else address = 0x40 +x; //第二行,第x-1列 write_cmd(address | 0x80); //地址或上1000 0000,写入STA0~STA6地址值 } void show_str(unsigned int x,unsigned int y,unsigned char *str) { set_cursor(x,y); //设置起始位置 while(*str != ) //不等于结束符就继续写入数据 { write_data(*str++); } } void lcd_init() { write_cmd(0x38); //0011 1000,设置16X2显示,5X7点阵,8位数据接口 write_cmd(0x0c); //0000 1100,开显示,不显示光标 write_cmd(0x06); //0000 0110,读一个字符后地址指针加一 write_cmd(0x01); //0000 0001,显示清屏 }