LCD1602的学习和实验(基于蓝桥杯单片机)
创作时间:
作者:
@小白创作中心
LCD1602的学习和实验(基于蓝桥杯单片机)
引用
CSDN
1.
https://blog.csdn.net/m0_46245333/article/details/112551557
本文将详细介绍LCD1602液晶显示屏的工作原理、控制指令和使用方法,并通过一个具体的实验案例,帮助读者掌握如何在蓝桥杯单片机平台上使用LCD1602进行显示操作。
1602液晶屏(LCD)
1602液晶屏可以同时显示16*2即32个字符(16列2行)。所使用的1602基于HD44870,其内部集成了DDRAM、CGROM和CGRAM:
- DDRAM(Display Data RAM):显示数据存放RAM单元,用于寄存待显示的字符代码,共80个字节;
- CGROM(Character Generator ROM):字符产生器单元,存储常用字符;
- CGRAM(Character Generator RAM):自定义字符产生器单元,用于存储自定义符号。
引脚说明
所使用的1602为16脚版本,其中第三脚为液晶显示器对比度调整端,可通过一个10K的电位器调整对比度。
控制指令
1602液晶显示屏内部的控制器共有11条控制指令,其读写操作基于时序图进行。由于51单片机的操作都是us级的,而1602时序图中时间都是ns级的,因此在一些高速的单片机上需要注意加延时。
使用步骤
使用1602的基本步骤包括:
- 初始化液晶屏
- 指定显示的位置
- 在指定位置显示
初始化液晶屏
初始化液晶屏的代码如下:
void Lcd_Init()//初始化
{
LcdWrCmd(0X38);//0011 1000
//指令置功能,DL=1用八位数据总线DB7-DB0;N=1设置为两行显示模式;F=0,5*7点阵+游标显示
LcdWrCmd(0X0C);//0000 1100
//指令为开/关控制,D=1 开显示;C=0 游标不显示
LcdWrCmd(0X06);//0000 0011
//指令为游标或显示移位,S/C=0,R/L=1,游标向左移动,AC自动加1
LcdWrCmd(0X01);//0000 0001清显示操作
}
指定显示位置
指定显示位置的代码如下:
void Lcd_show(uchar x,uchar y)
//显示函数 指定显示的位置
{
uchar addr;
//X表示第几个开始显示,Y表示第几行开始显示
if(0 == y)//和y == 0是一样的,但0 =y会报错
addr = 0x00+x;
else
addr = 0x40+x;
LcdWrCmd(addr|0x80);//地址设置
}
写命令和数据函数
写命令和数据的函数代码如下:
void LcdWrCmd(uchar cmd)//写命令程序 根据时序图
{
LcdBusy();//判断是否忙
LcdRS = 0;//选择指令寄存器
LcdRW =0;//选择写
LcdDB = cmd;//把命令字送入P0
LcdEN =1;//使能线电平变化,命令送入1602的8位数据口
LcdEN =0;
}
void LcdWrDat(uchar Dat)//写数据程序
{
LcdBusy();
LcdRS = 1;
LcdRW = 0;
LcdDB = Dat;//把要显示的数据送入P0
LcdEN = 1;
LcdEN = 0;
}
判断忙函数
液晶显示模块是一个慢显示器件,需要在执行每条指令之前确认模块的忙标志为低电平。判断忙的函数代码如下:
void LcdBusy()//判断忙函数
{
LcdDB = 0XFF;
LcdRS = 0;//读命令
LcdRW = 1;
LcdEN = 1;
while(LcdDB&0x80);//1:表示忙;0:表示闲
LcdEN = 0;
}
显示内容
在指定位置显示内容的代码如下:
Lcd_show(2,0);//定位
while(*str1 !='\0')//判断str1取出的值是否为\0,*为取值符
{
LcdWrDat(*str1++);//依次取值直到\0
}
Lcd_show(0,1);//定位
while(*str2 !='\0')//判断str2取出的值是否为\0
{
LcdWrDat(*str2++);//依次将数值取出,会显示出字符串
}
实验部分
将LCD1602接到蓝桥杯开发板上,把代码中的RS、R/W、E对应着原理图定义为相应的管脚。需要注意以下几点:
- 注意自己的芯片时钟周期是否需要加延时;
- 注意自己的接线有无错误;
- 实验过程中可能出现无法下载的情况,应该是串口被占用了,LCD接着VCC上电了,LCD数据传输会占用资源的;
- 如果发现没有显示,扭动控制第三脚VL的电位器,可以调节对比度;
- 如果出现蜂鸣器无法关闭,数码管和LED灯不对现象,改动锁存器的代码。
完整代码
完整代码如下:
//显示两行字符串
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
#define LcdDB P0
sbit LcdRS = P2^0;
sbit LcdRW = P2^1;
sbit LcdEN = P1^2;//看原理图
sbit buzz=P0^6;
sbit A1=P2^5;
sbit B1=P2^6;
sbit C1=P2^7;
uchar code table1[] = "I LOVE MCU";
uchar code table2[] = "I LOVE shanwei";
uchar *str1 = table1;
uchar *str2 = table2;
void Lcd_Init();
void LcdWrCmd(uchar cmd);
void LcdWrDat(uchar Dat);
void LcdBusy();
void Lcd_show(uchar X,uchar Y);
void buzzoff()
{
A1=1;
B1=0;
C1=1;
buzz=0;
}
void Delay(uint t)
{
while(t--);
}
void main()
{
buzzoff();
A1=0;
B1=0;
C1=0;
Lcd_Init();//初始化
Lcd_show(2,0);//定位
while(*str1 !='\0')//判断str1取出的值是否为\0,*为取值符
{
LcdWrDat(*str1++);//依次取值直到\0
}
Lcd_show(0,1);//定位
while(*str2 !='\0')//判断str2取出的值是否为\0
{
LcdWrDat(*str2++);//依次将数值取出,会显示出字符串
}
while(1)
{
}
}
void Lcd_Init()//初始化
{
LcdWrCmd(0X38);//0011 1000
//指令置功能,DL=1用八位数据总线DB7-DB0;N=1设置为两行显示模式;F=0,5*7点阵+游标显示
LcdWrCmd(0X0C);//0000 1100
//指令为开/关控制,D=1 开显示;C=0 游标不显示
LcdWrCmd(0X06);//0000 0011
//指令为游标或显示移位,S/C=0,R/L=1,游标向左移动,AC自动加1
LcdWrCmd(0X01);//0000 0001清显示操作
}
void LcdWrCmd(uchar cmd)//写命令程序 根据时序图
{
LcdBusy();//判断是否忙
LcdRS = 0;//选择指令寄存器
LcdRW =0;//选择写
LcdDB = cmd;//把命令字送入P0
LcdEN =1;//使能线电平变化,命令送入1602的8位数据口
LcdEN =0;
}
void LcdWrDat(uchar Dat)//写数据程序
{
LcdBusy();
LcdRS = 1;
LcdRW = 0;
LcdDB = Dat;//把要显示的数据送入P0
LcdEN = 1;
LcdEN = 0;
}
void LcdBusy()//判断忙函数
{
LcdDB = 0XFF;
LcdRS = 0;//读命令
LcdRW = 1;
LcdEN = 1;
while(LcdDB&0x80);//1:表示忙;0:表示闲
LcdEN = 0;
}
void Lcd_show(uchar x,uchar y)//显示函数 指定显示的位置
{
uchar addr;
//X表示第几个开始显示,Y表示第几行开始显示
if(0 == y)//和y == 0是一样的,但0 =y会报错
addr = 0x00+x;
else
addr = 0x40+x;
LcdWrCmd(addr|0x80);//地址设置
}
热门推荐
老车狂吼|初代极致运动保时捷 911(964)
《八角笼中》:一个真实改变命运的故事
王宝强慈善承诺风波:从《八角笼中》看公众人物的慈善之道
王宝强携《唐探1900》再创佳绩,百亿票房背后的成功密码
你的腰椎间盘突出需要手术吗?
《全民超神》欧克兽人1V1对战攻略:技能装备与实战技巧详解
战锤40K中的欧克兽人:独特魅力与强大实力的完美融合
《战锤40K》:欧克兽人的角色设计大揭秘!
如何养成每天排便
不要误解便秘为正常情况。
研究发现:每天排便1-2次更健康,这些异常要警惕!
男性消化系统疾病的饮酒与生活方式的关联
饭店级脆爽拌黄瓜制作秘诀
中证数据面试秘籍:如何打动HR?
梅兰芳版《洛神赋》:古典与现代的完美融合
《洛神赋图》:穿越千年的爱情绝唱
盘活闲置资源助力农村集体经济发展
冬季打卡!大宫出发的新干线沿线美景
东海道新干线:重塑大阪至东京经济带的钢铁巨龙
日本新干线N700A:自动驾驶技术引领智能运维新阶段
新干线最新行程:大阪到东京只需2小时14分钟!
他设计的阿布扎比豪宅,用曲线立面变身地标表皮
2024年最新工伤赔偿标准全解析:企业必知要点
科技助力渔业资源保护:最新策略大揭秘
《艾森斯坦号的逃亡》:战锤40K必读新作!
《战锤40K:星际战士2》最新战术攻略大揭秘!
帝皇视角:战锤40K历史脉络解析
洛克斯之战:战锤40K中最经典的攻城战役
夏日清爽必备:半根黄瓜变凉拌神菜!
对付恶性肿瘤 中西医“并肩打好健康保卫战”