1.概念:LCD1602(Liquid Crystal Display)是一种工业字符型液晶,能够同时显示 16×02 即 32 字符(16列两行)
2.引脚定义
具体说明
(1)VSS:模块供电电源地
(2)VDD:模块供电电源的正极
(3)RS:数据/命令选择,当处于高电平时选择数据寄存器,当处于低电平时选择指令寄存器。
RS 为低电平 R/W 为高电平时可以读忙信号,当RS 为高电平 R/W 为低电平时可以写入数据。
(4)R/W:读写选择,当处于高电平时进行读 *** 作,当处于低电平时进行写 *** 作
(4)E:使能信号,当电平由高电平变成低电平时,开始执行指令
(5)D:数据,D0-D7是数据位
3.显示方法
由图可以知道,如果要第二行第一列显示,则只需要写入40H,但是这样是不行的,因为写入显示地址时要求最高位 D7 恒定为高电平 1,所以需要加上80H,则最后的结果为40H+80H=C0H
4.显示内容与对应的位数
5.时序图
(1)读时序
(2)写时序
(3)时序时间
二.LCD1602的时序分析
1.写指令
由条件可以知道RS = 0;由时序图可以看到R/W = 0处于低电平,同时E = 0,并延时TR的时间长度,过后进行数据建立连接,然后将E端电平拉高,同时延迟Tpw的时间,之后E端电平被拉低,并延迟THD1的时间
2.写数据
由条件可以知道RS = 1;由时序图可以看到R/W = 0处于低电平,同时E = 0,并延时TR的时间长度,过后进行数据建立连接,然后将E端电平拉高,同时延迟Tpw的时间,之后E端电平被拉低,并延迟THD1的时间
三.LCD1602程序代码实现编程实现要求,要求实现写数据,写指令与读忙碌
#include
#include "intrins.h"
sbit RS = P1^0;
sbit RW = P1^1;
sbit E = P1^2;
#define data_buffer P0
/*
用于读取LCD1602的忙碌状态
*/
void check_lcd_busy()
{
char tep = 0x80;
data_buffer = 0x80;
while(tep & 0x80)
{
RS = 0;
RW = 1;
E = 0;
_nop_();
E = 1;
_nop_();
tep = data_buffer;
}
}
void lcd_write_cmd(char cmd)
{
check_lcd_busy();
RS = 0;
RW = 0;
E = 0;
data_buffer = cmd;
_nop_();
E = 1;
_nop_();
E = 0;
_nop_();
}
void lcd_write_data(char datashow)
{
check_lcd_busy();
RS = 1;
RW = 0;
E = 0;
data_buffer = datashow;
_nop_();
E = 1;
_nop_();
E = 0;
_nop_();
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)