LCD1602显示介绍及程序
LCD1602介绍
LCD1602相关引脚
LCD1602写命令、写数据相关操作图
根据上面时序图和时序参数图我们可以写出 写命令代码 和写数据代码
写命令 代码
写命令
void write_com(char command)
{
RS = 0;
RW = 0; //高读低写
LCD = command;
delay5ms(); //这里延时最低要30纳秒 我们直接给5ms
E = 1;//使能拉高
delay5ms(); //最低要求延迟150纳秒 我们直接给5ms
E = 0;
}
写数据 代码
写数据
void write_data(char data)
{
RS = 1;
RW = 0;
LCD = data;
delay5ms(); //这里延时最低要30纳秒 我们直接给5ms
E = 1;//使能拉高
delay5ms(); //最低要求延迟150纳秒 我们直接给5ms
E = 0;
}
LCD1602显示程序步骤及如何初始化
1. 初始化
2. 写命令(RS=0)
3. 写数据(RS=1)
具体需要初始化什么?
1.显示开关控制指令(功能:控制显示器开/关 光标显示/关闭 是否闪烁)
2.进入模式设置指令(功能:每写入一位数据后光标的移动 左/右 显示屏不移动/整体右移 )
3.功能设定指令(功能:设定数据总线的位数 显示的行数 字型 )
4.清屏指令(功能:清屏显示空白 光标归位 地址计数器(AC)的值为0)
5.显示位置设置(功能:指定在1602上哪个位置上显示数据)
具体指令相关介绍:
1.显示开关控制指令
write_com(0x0c); //开显示功能 无光标 不闪烁
2.进入模式设置指令
write_com(0x06); //写入数据后光标自动右移 整屏不移动。
3.功能设定指令
write_com(0x38); //数据总线8位 16X2显示 5*7点阵
4.清屏指令
write_com(0x01); //清屏 0000 0001
5.显示位置设置
如果想在1602屏幕上第一行第一个开始显示 就是0x80
如果想在1602屏幕上第二行第一个开始显示 就是0xc0
我这里就设置在第一行第三个开始显示hello word
write_com(0x83); //在1602第一行第3个开始显示
初始化代码
void init_lcd()
{
write_com(0x0c); //开显示功能 无光标 不闪烁
write_com(0x06); //写入数据后光标自动右移 整屏不移动
write_com(0x38); //数据总线8位 16X2显示 5*7点阵
write_com(0x01); //清屏 0000 0001
write_com(0x83); //在1602第一行第3个开始显示
}
原理图及显示程序
引脚定义
//引脚定义
#define LCD P0
sbit E = P2^7;
sbit RS = P2^6;
sbit RW = P2^5;
lcd1602.h
void write_com(unsigned char command); //写命令函数
void write_data(unsigned char dat); //写数据函数
void init_lcd(); //初始化LCD1602函数
void delay5ms(); //延时5ms函数
lcd1602.c
#include <reg52.h>
#include "lcd1602.h"
#define LCD P0
sbit E = P2^7; //使能
sbit RS = P2^6; //数据/命令(H/L)
sbit RW = P2^5; //读写(H/L)
/******延迟5毫秒函数********/
void delay5ms() //误差 -0.000000000001us
{
unsigned char a,b;
for(b=15;b>0;b--)
for(a=152;a>0;a--);
}
/******LCD1602写命令函数********/
void write_com(unsigned char command)
{
RS = 0;
RW = 0; //高读低写
LCD = command;
delay5ms(); //这里延时最低要30纳秒 我们直接给5ms
E = 1; //使能拉高
delay5ms(); //最低要求延迟150纳秒 我们直接给5ms
E = 0;
}
/******LCD1602写数据函数********/
void write_data(unsigned char dat)
{
RS = 1;
RW = 0;
LCD = dat;
delay5ms(); //这里延时最低要30纳秒 我们直接给5ms
E = 1; //使能拉高
delay5ms(); //最低要求延迟150纳秒 我们直接给5ms
E = 0;
}
/******初始化LCD1602********/
void init_lcd()
{
write_com(0x06); //写入数据后光标自动右移 整屏不移动。
write_com(0x0c); //开显示功能 无光标 不闪烁
write_com(0x38); //数据总线8位 16X2显示 5*7点阵
write_com(0x01); //清屏 0000 0001
write_com(0x83); //在1602第一行第3个开始显示
}
main.c
#include <reg52.h>
#include "lcd1602.h"
unsigned char array[] = {
"hello word"};
unsigned char i = 0;
void main()
{
//1.初始化lcd1602
init_lcd();
//2.写数据(hello word)到LCD1602显示
while(array[i] != '\0')
{
write_data(array[i]);
i++;
}
while(1);
}