LCD1602液晶显示屏在51单片机上的使用

LCD1602液晶显示屏在51单片机上的使用

以下是我在学习使用51单片机时的心得体会,在这里记录我的学习历程,本文使用的教程的代码,如果有侵权的可能,请告知。

​ LCD1602液晶屏是我购买的普中51单片机自带的外设之一,学习这一款液晶屏的使用不仅仅在于学习这块液晶屏,更是学习一种连接外设的方式。
​ 这一款液 晶屏的屏幕有两行,每一行都有一定的格子去装写入的字符,这个格子的大小可以选择,有5X7和5X10两个选择。
​ 以下是1602的引脚说明摘录:
在这里插入图片描述

​ 在以后的程序中,BLA和BLK这两个东西没有接触到,VL这个东西是拿来调整1602的亮度的,VSS和VDD不用多说,是不需要用软件来操作的,剩下的部分就是变成要注意的地方。

首先介绍1602的几个关键性指令:

  1. 清屏
    在这里插入图片描述
    如图所示,开头两位都是0,这显示了,这是一个命令选择端,并且为写选择端。

即将 DDRAM 的内容全部填入"空白"的 ASCII码 01H; 并且光标归位,将地址计数器AC的值设为0.

  1. 进入模式设置指令

在这里插入图片描述
功能 : 设定每次定入 1 位数据后光标的移位方向 , 并且设定每次写入的一个字符是否移动。参数设定的情况如下所示:

位名 设置
I/D 0=写入新数据后光标左移 1=写入新数据后光标右移
S 0=写入新数据后显示屏不移动 1=写入新数据后显示屏整体右移 1 个字符
(至于显示屏右移,下文会详细说明)

  1. 显示开关控制指令

在这里插入图片描述

​ 功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。参数设定的情况如下:

位名 设置
D 0=显示功能关 1=显示功能开
C 0=无光标 1=有光标
B 0=光标闪烁 1=光标不闪烁

  1. 功能设定指令

在这里插入图片描述

功能:设定数据总线位数、显示的行数及字型。参数设定的情况如下:

位名 设置
DL 0=数据总线为 4 位 1=数据总线为 8 位 (我用的普中51单片机是默认8位的)
N 0=显示 1 行 1=显示 2 行
F 0=5×7 点阵/每字符 1=5×10 点阵/每字符

​ 在设置完成之后我们就要明白具体是在哪显示,在哪个位置显示?在对液晶模块的初始化中要先设置其显示模式, 在液晶模块显示字符时光标是自动右移的, 无需人工干预。 每次输入指令前都要判断液晶模块是否处于忙的状态。DDRAM 就是显示数据 RAM ,用来寄存待显示的字符代码。共 80 个字节,其地址和屏幕的对应关系如下表:

在这里插入图片描述

这里要注意一下,80个字节,不是每一个都可以出现在屏幕上的,一般来说,出现的只有8*2行,即16个字节,其余的字节是存在的,而且可以存储数据,让他们出来,需要用到显示屏移动的指令。

要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,例如第二行第一个字符的地址是 40H, 那么是否直接写入 40H 就可以将光标定位
在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位 D7
恒定为高电平 1 所以实际写入的数据应该是 01000000B(40H)
+10000000B(80H)=11000000B(C0H)。

(总之全部地址都加上80H就对了)

前面16个字节的地址如下:

在这里插入图片描述

以下是操作步骤:

1602的基本操作

①读状态:RS=0,RW=1,E=高脉冲。输出:D0~D7为状态字。

②读数据:RS=1,RW=1,E=高脉冲。输出:D0~D7为数据。

③写指令:RS=0,RW=0,E=高脉冲。输出:无

④写数据:RS=1,RW=0,E=高脉冲。输出:无。

初始化:根据硬件约定对1602进行启动设置。
写命令(RS=L)设置显示坐标
写数据(RS=H)

操作的具体步骤(代码怎么写):

首先用一个h文件写下所有的函数定义和变量如下:

#ifndef __LCD_H_
#define __LCD_H_
/**********************************
当使用的是4位数据传输的时候定义,
使用8位取消这个定义
**********************************/
//#define LCD1602_4PINS

/**********************************
包含头文件
**********************************/
#include<reg51.h>

//---重定义关键词---//
#ifndef uchar
#define uchar unsigned char
#endif

#ifndef uint 
#define uint unsigned int
#endif

/**********************************
PIN口定义
**********************************/
  • 14
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在51单片机使用LCD1602显示时钟,可以按照以下步骤进行: 1. 配置时钟:使用定时器来产生1秒钟的中断,然后在中断服务函数中更新时钟数据。 2. 初始化LCD1602:设置LCD1602的工作模式、显示模式、光标模式等参数,并初始化显示内容。 3. 实现时钟显示:在主循环中不断更新LCD1602上的显示内容,包括时、分、秒等。 以下是代码示例: ```c #include <reg51.h> #define LCD1602_DB P1 sbit LCD1602_RS = P2^6; sbit LCD1602_RW = P2^5; sbit LCD1602_E = P2^7; unsigned char hour, minute, second; void initLCD1602(); void writeCommand(unsigned char command); void writeData(unsigned char data); void delay(unsigned int msec); void updateTime(); void main() { TMOD = 0x01; // 使用定时器0模式1 TH0 = 0xFC; // 定时1秒钟 TL0 = 0x66; TR0 = 1; // 开始计时 ET0 = 1; // 允许定时器0中断 EA = 1; // 允许总中断 initLCD1602(); while(1) { updateTime(); // 更新时钟数据 writeCommand(0x80); // 设置光标位置为第一行第一列 writeData(hour/10 + '0'); // 显示时 writeData(hour%10 + '0'); writeData(':'); writeData(minute/10 + '0'); // 显示分 writeData(minute%10 + '0'); writeData(':'); writeData(second/10 + '0'); // 显示秒 writeData(second%10 + '0'); } } void initLCD1602() { delay(15); // 上电后等待15ms writeCommand(0x38); // 设置工作模式为8位数据接口,双行显示,5x7点阵字符 writeCommand(0x0C); // 设置显示模式为开,关光标,不闪烁 writeCommand(0x06); // 设置光标移动方向为右,字符不移动 writeCommand(0x01); // 清屏 } void writeCommand(unsigned char command) { LCD1602_RS = 0; // 选择命令寄存器 LCD1602_RW = 0; // 写数据 LCD1602_DB = command; // 写入命令 LCD1602_E = 1; // 使能时序 delay(1); // 延时1us LCD1602_E = 0; // 禁能时序 } void writeData(unsigned char data) { LCD1602_RS = 1; // 选择数据寄存器 LCD1602_RW = 0; // 写数据 LCD1602_DB = data; // 写入数据 LCD1602_E = 1; // 使能时序 delay(1); // 延时1us LCD1602_E = 0; // 禁能时序 } void delay(unsigned int msec) { unsigned int i, j; for(i=0; i<msec; i++) { for(j=0; j<125; j++); } } void updateTime() { static unsigned int count = 0; if(count++ >= 1000) // 1秒钟到了 { count = 0; second++; if(second >= 60) { second = 0; minute++; if(minute >= 60) { minute = 0; hour++; if(hour >= 24) { hour = 0; } } } } } ``` 这段代码实现了在LCD1602上显示时钟,使用定时器0产生1秒钟的中断,然后在中断服务函数中更新时钟数据。在主循环中不断更新LCD1602上的显示内容,使用writeCommand和writeData函数向LCD1602写入命令和数据。同时,还需要实现延时函数delay和更新时钟数据的函数updateTime。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值