51单片机学习笔记15 LCD12864(带字库)显示屏使用

news2024/11/28 12:35:46

51单片机学习笔记15 LCD12864(带字库)显示屏使用

  • 一、LCD12864简介
  • 二、管脚定义
  • 三、命令
    • 1. 功能能设定
    • 2. 清屏指令(0x01)
    • 3. 地址归位
    • 4. 进入设定点
    • 5. 显示状态开关
    • 6. 设定CGRAM地址
    • 7. 设定DDRAM地址
    • 8. 写资料到RAM
    • 9. 读出RAM
  • 四、DDRAM地址
  • 五、点亮实验
    • 1. 硬件连接
    • 2. 代码实现
      • (1)写命令
      • (2)写数据
      • (3)初始化
      • (4)清屏
      • (5)显示字符串
      • (6)主程序

一、LCD12864简介

LCD12864是一种128x64像素的液晶显示屏,常用于电子设备中作为显示器。它通常采用ST7920或者类似的控制器,可以通过串行或并行接口与微控制器或其他设备通信。LCD12864显示屏可以显示单色图像和文本,通常用于嵌入式系统、电子仪器、3D打印机等领域。
在这里插入图片描述
在这里插入图片描述

二、管脚定义

以下是LCD12864的管脚定义:

管脚编号功能
1VSS(地)
2VDD(电源,5V)
3V0(液晶对比度调节)
4RS(寄存器选择,1:数据;2:命令寄存器)
5R/W(读/写选择,1:读;2:写)
6E(使能信号)
7-14DB0-DB7(数据位)
15CS1,片选信号,低有效,对应左半屏64x64点
16CS2,片选信号,低有效,对应右半屏64x64点
17RST(复位,低有效)
18VOUT(液晶偏压输出)
19LED-A(LED背光阳极)
20LED-K(LED背光阴极)

三、命令

1. 功能能设定

位7位6位5位4位3位2位1位0
001DLX0/RExx

初始值: 001 DL X 100
DL 位说明 : 8/4位 接口控制位,值=1:8位接口;值=0:4位接口;
RE:指令集选择控制位,值1:扩充指令集;值0:基本指令集;

需要注意的是,同一指令的动作不能同时改变DL和RE,需要先改变DL再改变RE才能确保设置正确。

2. 清屏指令(0x01)

RSRW位7位6位5位4位3位2位1位0
0000000001

冰镇 DDRAM填充 ASCII 码的0x20(空格),并且设定DRAM的地址计数器(AC)为00H,更新设置进入设定点将I/D设为1,游标右移AC加1 。

3. 地址归位

RSRW位7位6位5位4位3位2位1位0
000000001X

设定DDRAM的地址计数器(AC)到00H,并且将游标移到开头原点位置。

4. 进入设定点

初始值: 06H

RSRW位7位6位5位4位3位2位1位0
00000001I/DS

I/D:值=1: 右移(DDRAM地址计数器AC加1);值=0;左移;
S:值=1:整体左移;值=0:整体右移;

5. 显示状态开关

RSRW位7位6位5位4位3位2位1位0
0000001DCB

初始值: 08H

D:值=1:整体显示开;值=0:整体显示关;
C:值=1:游标显示开;值=0:游标显示关;
B:值=1:游标位置显示反白打开;值=0:游标位置显示正常。

6. 设定CGRAM地址

RSRW位7位6位5位4位3位2位1位0
0001AC 5AC 4AC 3AC 2AC 1AC 0

设定CGRAM地址到地址计数器AC。

7. 设定DDRAM地址

RSRW位7位6位5位4位3位2位1位0
001AC 6AC 5AC 4AC 3AC 2AC 1AC 0

设定DRAM地址到地址计数器AC。

8. 写资料到RAM

RSRW位7位6位5位4位3位2位1位0
10D7D6D5D4D3D2D1D0
写入资料到内部的RAM。

9. 读出RAM

RSRW位7位6位5位4位3位2位1位0
11D7D6D5D4D3D2D1D0
从内部RAM读取资料。

四、DDRAM地址

图形显示坐标, 水平方向 X,以字节为单位;
垂直方向 Y,以位为单位 。

在这里插入图片描述

X坐标12345678
Line180H81H82H83H84H85H86H87H
Line290H91H92H93H94H95H96H97H
Line388H89H8AH8BH8CH8DH8EH8FH
Line498H99H9AH9BH9CH9DH9EH9FH

五、点亮实验

1. 硬件连接

在这里插入图片描述
在这里插入图片描述

2. 代码实现

(1)写命令

/**
* @brief  写命令
*/
void lcd12864_write_cmd(u8 cmd){
    LCD12864_RS = 0;
    LCD12864_RW = 0;
    LCD12864_EN = 0;

    LCD12864_DATAPORT = cmd;

    delay_ms(1);
    LCD12864_EN = 1;
    delay_ms(1);
    LCD12864_EN = 0;
}

(2)写数据

/**
* @brief  写数据
*/
void lcd12864_write_data(u8 dat){
    LCD12864_RS = 1;
    LCD12864_RW = 0;
    LCD12864_EN = 0;

    LCD12864_DATAPORT = dat;

    delay_ms(1);
    LCD12864_EN = 1;
    delay_ms(1);
    LCD12864_EN = 0;
}

(3)初始化

/**
* @brief  初始化
*/
void lcd12864_init(void){
    LCD12864_PSB = 1;
    // 功能设定,基本指令集,8位
    lcd12864_write_cmd(0x30);
    // 不使用光标, 不闪烁
    lcd12864_write_cmd(0x0c);
    // 不移动光标,不滚动
    lcd12864_write_cmd(0x06);
    // 清屏
    lcd12864_write_cmd(0x01);
}

(4)清屏

/**
* @brief  清屏
*/
void lcd12864_clear(void){
    lcd12864_write_cmd(0x01);
}

(5)显示字符串

/**
* @brief  显示字符串
*/
void lcd12864_write_string(u8 x, u8 y, u8 *str){
    if(y<0)y=0;
    if(x<0)x=0;
    if(y>3)y=3;
    x &= 0x0f;

    switch(y){
        case 0:
            x |= 0x80;
            break;
        case 1:
            x |= 0x90;
            break;
        case 2:
            x |= 0x88;
            break;
        case 3:
            x |= 0x98;
            break;
    }
    lcd12864_write_cmd(x);
    while(*str!='\0'){
        lcd12864_write_data(*str);
        str++;
    }
}

(6)主程序

#include "led_utils.h"
#include "ired_utils.h"
#include "segment_display_utils.h"
#include "uart_utils.h"
#include "lcd12864_utils.h"

/**
* @brief 主函数
*/
void main()
{
	// 关闭所有led
	led_all_off();
    // 速率 9600
    uart_init(0xfa);
    lcd12864_init();
    lcd12864_clear();
    lcd12864_write_string(0, 0, "你好,中国");
	while(1)
	{
        
	}
}

本文代码开源地址:
https://gitee.com/xundh/learn51

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1581836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flink WordCount实践

目录 前提条件 基本准备 批处理API实现WordCount 流处理API实现WordCount 数据源是文件 数据源是socket文本流 打包 提交到集群运行 命令行提交作业 Web UI提交作业 上传代码到gitee 前提条件 Windows安装好jdk8、Maven3、IDEA Linux安装好Flink集群&#xff0c;可…

37-代码测试(下):Go语言其他测试类型及IAM测试介绍

。 Go中的两类测试&#xff1a;单元测试和性能测试。 我就来介绍下Go 语言中的其他测试类型&#xff1a;示例测试、TestMain函数、Mock测试、Fake测试等&#xff0c; 示例测试 示例测试以Example开头&#xff0c;没有输入和返回参数&#xff0c;通常保存在example_test.go…

Verilog实现手表计时

实现手表的计时功能&#xff1a; 1.具有start启动信号、pause暂停信号&#xff0c;可以自定义其触发机制。 2.具有时间更改接口&#xff0c;可以更改时、分、秒。 3.输出时、分、秒。 Verilog设计 模块端口定义&#xff1a; module watch1(input wire clk …

mp4转flv怎么转?电脑怎么把视频转成flv?

MP4&#xff08;MPEG-4 Part 14&#xff09;是一种多媒体容器格式&#xff0c;广泛用于包含视频、音频、字幕等多种数据流。MP4因其高度灵活性、压缩效率和兼容性成为视频领域的主流格式&#xff0c;支持范围涵盖从在线视频到移动设备的各类应用场景。 FLV文件格式的多个优点 …

Linux虚拟内存简介

Linux&#xff0c;像多数现代内核一样&#xff0c;采用了虚拟内存管理技术。该技术利用了大多数程序的一个典型特征&#xff0c;即访问局部性&#xff08;locality of reference&#xff09;&#xff0c;以求高效使用CPU和RAM&#xff08;物理内存&#xff09;资源。大多数程序…

使用MongoDB 构建AI:轻松应对从预测式AI到生成式AI

毫无疑问&#xff0c;如今从生成式AI (GenAI )中获益最大的&#xff0c;是那些早已运用预测式AI (Predictive AI )的组织。 2023年6月&#xff0c;麦肯锡在2023年6月发布的《生成式人工智能的经济潜力》研究中也得出了与此相同的结论。 原因主要有以下几点&#xff1a; 内部文…

SCI一区 | Matlab实现OOA-TCN-BiGRU-Attention鱼鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现OOA-TCN-BiGRU-Attention鱼鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现OOA-TCN-BiGRU-Attention鱼鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型描述程序…

HarmonyOS 开发-MpChart运动健康场景实践案例

介绍 MpChart是一个包含各种类型图表的图表库&#xff0c;主要用于业务数据汇总&#xff0c;例如销售数据走势图&#xff0c;股价走势图等场景中使用&#xff0c;方便开发者快速实现图表UI&#xff0c;MpChart主要包括线形图、柱状图、饼状图、蜡烛图、气泡图、雷达图、瀑布图…

218基于matlab的有限差分法求解泊松方程

基于matlab的有限差分法求解泊松方程&#xff0c;采用SOR超松弛迭代法。模型采用方形区域&#xff0c;划分网格数为100*100&#xff0c;网格数可以很方便的更改。程序已调通&#xff0c;可直接运行。 218有限差分法 泊松方程 SOR超松弛迭代法 - 小红书 (xiaohongshu.com)

react17+antd4 动态渲染导航菜单中的icon

在路由信息对照表中的icon可以有两种形式&#xff1a;一种是组件形式&#xff0c;一种是字符串形式的。 在antd4的Menu.Item和SubMenu中的icon属性的格式为&#xff1a; 1.组件形式 这种方法在渲染时很方便&#xff0c;与antd中的Menu.Item中的icon属性的形式是一致的&#…

第9章 文件和内容管理

思维导图 9.1 引言 文件和内容管理是指针对存储在关系型数据库之外的数据和信息的采集、存储、访问和使用过程的管理。它的重点在于保持文件和其他非结构化或半结构化信息的完整性&#xff0c;并使这些信息能够被访问。文件和非结构化内容也应是安全且高质量的。 确保文件和内容…

说说我理解的数据库中的Schema吧

一、SQL标准对schema如何定义&#xff1f; ISO/IEC 9075-1 SQL标准中将schema定义为描述符的持久命名集合&#xff08;a persistent, named collection of descriptors&#xff09;。 大部分的网上资料定义Schema如下&#xff1a; schema是用来组织和管理数据的一种方式。它…

【攻防世界】mfw(.git文件泄露)

首先进入题目环境&#xff0c;检查页面、页面源代码、以及URL&#xff1a; 发现页面无异常。 使用 dirsearch 扫描网站&#xff0c;检查是否存在可访问的文件或者文件泄露&#xff1a; 发现 可访问界面/templates/ 以及 .git文件泄露&#xff0c;故使用 GItHack 来查看泄露的 …

Visual Studio Code SSH 连接远程服务器

Visual Studio Code通过 SSH 连接远程服务器并实现免密登录&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. **安装插件**&#xff1a;首先&#xff0c;在 VS Code 中安装 "Remote - SSH" 插件。打开 VS Code&#xff0c;点击左侧的扩展图标&#xff0c;搜索…

springboot3整合consul实现服务注册和配置管理快速入门

服务注册&#xff1a; 配置管理&#xff1a; 注册中心的比较&#xff1a; 在微服务的世界中&#xff0c;服务注册是必不可少的。现在比较流行的也就是Consul和Nacos&#xff0c;Zookeeper没有管理界面&#xff0c;一般不建议使用&#xff0c;而Eureka已经处于停更&#xff0…

【VUE】Vue3+Element Plus动态间距处理

目录 1. 动态间距调整1.1 效果演示1.2 代码演示 2. 固定间距2.1 效果演示2.2 代码演示 其他情况 1. 动态间距调整 1.1 效果演示 并行效果 并列效果 1.2 代码演示 <template><div style"margin-bottom: 15px">direction:<el-radio v-model"d…

解析大语言模型训练三阶段

大语言模型的训练过程一般包括3个阶段&#xff1a;预训练&#xff08;Pre-training&#xff09;、SFT&#xff08;有监督的微调&#xff0c;Supervised-Finetuning&#xff09;以及RLHF&#xff08;基于人类反馈的强化学习&#xff0c;Reinforcement Learning from Human Feedb…

【Python系列】Jupyter Notebook 中执行 Shell 脚本的方法

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

PDF-XChange 10.0 下载地址及安装教程

PDF-XChange是一款功能强大的PDF阅读器和编辑工具。它提供了一系列丰富的功能&#xff0c;可用于查看、注释、编辑和转换PDF文件。 作为一个PDF阅读器&#xff0c;PDF-XChange提供了快速和高效的阅读体验。它支持多种视图模式、缩放选项和导航工具&#xff0c;使用户能够方便地…

python小游戏

这些游戏你玩过几个&#xff1f; 1.贪吃蛇2.吃豆人3.加农炮4.四子棋5. Fly Bird<font color #f3704ab>6.记忆&#xff1a;数字对拼图游戏&#xff08;欢迎挑战&#xff01;用时&#xff1a;2min&#xff09;7.乒乓球8.上课划水必备-井字游戏&#xff08;我敢说100%的人都…