【51单片机系列】proteus中的LCD12864液晶屏

文章来源:《单片机C语言编程与Proteus仿真技术》。

点阵字符型LCD显示模块只能显示英文字符和简单的汉字,要想显示较为复杂的汉字或图形,就必须采用点阵图型LCD显示模块,比如12864点阵图型LCD显示模块。

文章目录

  • 一、 LCD12864点阵图型显示模块
  • 二、12864的指令
  • 三、 12864 LCD接口应用使用示例

一、 LCD12864点阵图型显示模块

12864点阵图型LCD显示模块内部控制器采用KS0108或HD61202。其引脚排列如下图所示:

12864点阵图型LCD显示模块引脚排列

各引脚功能功能如下表:

引脚符号功能引脚符号功能
1/CS11=选择左边64x64点7RW1=数据读取,0=数据写入
2/CS21=选择右边64x64点8E使能信号,负跳变有效
3GND9~16DB0~DB7数据信号
4VCC+5V电源17/RST复位,低电平有效
5V0显示驱动电源0~5V18-VoutLCD驱动负电源
6RS1=数据输入,0=命令输入有些模块19、20引脚为空脚

12864点阵图型LCD内部存储器DDRAM与显示屏上的显示内容具有对应关系,使用时只需要将显示内容写入到1286412864内部显示存储器DDRAM中,就能正确显示。

12864点阵图型LCD屏横向有128个点,纵向有64个点,分为左半屏和右半屏。

DDRAM与显示屏的对应关系如下表:

/CS1=1(左半屏)/CS2=1(右半屏)
Y=01...626301...6263行号
X=0DB0

DB7
DB0

DB7
DB0

DB7
DB0

DB7
DB0

DB7
DB0

DB7
DB0

DB7
DB0

DB7
DB0

DB7
DB0

DB7
0

7
X=1DB0

DB7
DB0

DB7
DB0

DB7
DB0

DB7
DB0

DB7
DB0

DB7
DB0

DB7
DB0

DB7
DB0

DB7
DB0

DB7
8

15
....................................
X=7DB0

DB7
DB0

DB7
DB0

DB7
DB0

DB7
DB0

DB7
DB0

DB7
DB0

DB7
DB0

DB7
DB0

DB7
DB0

DB7
56

63

在12864点阵图型LCD屏上显示图形或汉字时,可以利用字模提取软件获得图形或汉字的点阵代码。

二、12864的指令

12864点阵图型LCD显示模块的指令功能比较简单,共有8条指令。

  1. 读忙标志

编码格式为:

RSR/WED7D6D5D4D3D2D1D0
011BUSY0ON/OFFRESET0000

BUSY=1表示显示模块内部控制器忙,不能进行操作,只有BUSY=0时才允许操作。

ON/OFF=1表示显示关闭,ON/OFF=0表示显示打开。

RESET=1表示复位状态,RESET=0表示正常状态。

在BUSY和RESET状态下,除读忙标志指令外,其它指令均不对液晶显示模块产生作用。

  1. 写指令

编码格式为:

RSR/WED7D6D5D4D3D2D1D0
00下降沿指令
  1. 写数据

编码格式为:

RSR/WED7D6D5D4D3D2D1D0
10下降沿显示数据
  1. 显示开/关

编码格式为:

RSR/WD7D6D5D4D3D2D1D0
000011111D3E/3F

D=1表示显示RAM中的内容,D=0表示关闭显示。

  1. 显示起始行

编码格式为:

RSR/WD7D6D5D4D3D2D1D0
0011显示起始行(0~63)

该指令规定显示屏上起始行对应DDRAM的行地址,有规律地改变现实起始行,可以实现现实滚屏的效果。

  1. 页面地址

编码格式为:

RSR/WD7D6D5D4D3D2D1D0
0010111页面(0~7)

DDRAM共64行,分8页,每页8行。

  1. 列地址

编码格式为:

RSR/WD7D6D5D4D3D2D1D0
0001显示列地址(0~63)

列地址计数器在每一次读/写数据后自动加1,每次操作后明确起始列的地址。设置了页面地址和列地址,就唯一确定了DDRAM中的一个单元。这样单片机就可以用读/写指令读出该单元中的内容或向该单元写进一个字节数据。

  1. 读数据

编码格式为:

RSR/WD7D6D5D4D3D2D1D0
11显示数据

该指令将DDRAM对应单元中的内容读出,然后列地址计数器自动加1.需要注意的是,进行读操作之前,必须有一次空读操作,紧接着再读才会读出所要求单元中的数据。

三、 12864 LCD接口应用使用示例

单片机与12864图型LCD模块之间可以采用直接方式接口,也可以采用间接方式接口。

如下图,在proteus仿真电路图中采用间接方式实现51单片机与12864图型LCD模块的接口电路。LCD模块的/CS1、/CS2、RS、R/W和E信号分别由单片机的P2.0、P2.1、P2.2、P2.3和P2.4来控制,数据信号连接到单片机的P0口。由于间接控制方式需要通过单片机的端口引脚来操作液晶模块,在编写驱动程序时要特别注意时序的配合。

实现51单片机与12864图型LCD模块的接口电路

软件设计,判断12864是否忙,根据读忙标志指令判断,代码如下:

// 判断是否忙
void IsBusy()
{do{EN=0; RW=1;  // 读操作RS=0;  // 0表示命令输入EN=1;  // 产生一个负跳变EN=0;}while(BUSY);  // BUSY=1时表示显示模块内部控制器忙
}

其中定义全局变量:

#define PORT	P0
sbit CS1=P2^0;
sbit CS2=P2^1;
sbit RS=P2^2;
sbit RW=P2^3;
sbit EN=P2^4;
sbit BUSY=P0^7;  // 忙标志

其它指令按照类似的方式编写。编写清屏函数,为显示做准备,首先清左半屏,打开显示;清右半屏,关闭显示。设置每个点不显示字符,即写显示数据为0x00。代码如下:

// 清屏,为显示做准备
void Ready()
{uint i,j;ClearLeft();  // 清左半屏WriteCom(0x3F);  // 显示开ClearRight();  // 清右半屏WriteCom(0x3F);  // 显示开ClearLeft();for(i=0;i<8;i++){SetPage(i);  // 设置显示起始页SetCol(0x00);  // 设置显示起始列为第一列for(j=0;j<64;j++){WriteDat(0x00);  // 设置每行的数据为00}}ClearRight();for(i=0;i<8;i++){SetPage(i);SetCol(0x00);for(j=0;j<64;j++){WriteDat(0x00);  // 设置每行的数据为00}}
}

每个汉字设置为16*16点阵大小,代码如下:

// 显示16*16的汉字,纵向取模,字节倒序
void Display(uchar *s, uchar page, uchar line)
{uchar i;SetPage(page);SetCol(line);for(i=0;i<16;i++){WriteDat(*s);s++;}SetPage(page+1);SetCol(line);for(i=0;i<16;i++){WriteDat(*s);s++;}
}

主函数中声明字符点阵数据,比如汉字“单片机”,点阵数据如下:

// 字符点阵数据
uchar code Disp[]=
{//单(0) 片(1) 机(2)
0x00,0x00,0xF8,0x49,0x4A,0x4C,0x48,0xF8,0x48,0x4C,0x4A,0x49,0xF8,0x00,0x00,0x00,
0x10,0x10,0x13,0x12,0x12,0x12,0x12,0xFF,0x12,0x12,0x12,0x12,0x13,0x10,0x10,0x00,/*"单",0*/0x00,0x00,0x00,0xFE,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x00,0x00,
0x00,0x80,0x60,0x1F,0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x00,/*"片",1*/0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,
0x04,0x03,0x00,0xFF,0x00,0x83,0x60,0x1F,0x00,0x00,0x00,0x3F,0x40,0x40,0x78,0x00/*"机",2*/
};

主函数中调用函数Display,如下:

void main()
{uchar page=0x03;Ready();ClearLeft();Display(Disp, page, 0);Display(Disp+32, page, 16);Display(Disp+32*2, page, 16*2);while(1);
}

仿真结果:

LCD12864显示汉字仿真结果

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用可视化案例讲Rust编程4. 用泛型和特性实现自适配shapefile的读取

本节已经涉及Rust学习曲线上的一个大坑&#xff1a;泛型和特性了&#xff0c;属于语言的深水区&#xff0c;如果初学者&#xff0c;建议看一眼知道有这个功能即可。 如果我们立足于功能实现&#xff0c;那么做到像上一节那样就可以了&#xff0c;从原理上来说&#xff0c;每个…

2023 工业 AR 关键词:纵深和开拓

2023 年&#xff0c;以虚实融合、工业元宇宙为代表的“新数字化”升级在工业制造领域达成共识。 ▲五部委联合印发元宇宙行动计划 通过发展元宇宙赋能新型工业化 而相对过去几年的行业渗透广、落地场景多样的 AR 业务拓展与合作&#xff0c;#纵深和#开拓&#xff0c;成为 2023…

在WIN从零开始在QMUE上添加一块自己的开发板(一)

文章目录 一、前言二、源码编译&#xff08;一&#xff09;安装Msys2&#xff08;二&#xff09;配置GCC工具链&#xff08;三&#xff09;安装QEMU构建依赖&#xff08;四&#xff09;下载编译QEMU源码 二、QUME编程基础&#xff08;一&#xff09;QOM机制&#xff08;二&…

【计算机网络】【练习题】【新加坡南洋理工大学】【Computer Control Network】

说明&#xff1a; 仅供学习使用。 一、题目描述 该题目描述一个网络中传播时延&#xff08;Transmission Delay&#xff09;的例子。题目如下&#xff1a; 二、问题解答&#xff08;个人&#xff09; 笔者第3问采用均值不等式求解。标答中采用求导数的方法求极值。似乎均值…

Sqlite真空命令VACUUM

之前在项目中使用了sqlite数据库&#xff0c;当日志变大时&#xff0c;执行CRUD操作就会变慢 后来尝试删除7天前的记录进行优化 delete from XX_CollectData where CreateTime<2024-01-24 发现sqlite文件的大小就没有变化&#xff0c;delete命令只是逻辑删除&#xff0c;…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-热门标签推荐显示实现

锋哥原创的SpringbootLayui python222网站实战&#xff1a; python222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火…

k8s的图形化工具--rancher

什么是rancher&#xff1f; rancher是一个开源的企业级多集群的k8s管理平台 rancher和k8s的区别 都是为了容器的调度和编排系统&#xff0c;但是rancher不仅能够调度&#xff0c;还能管理k8s集群&#xff0c;自带监控&#xff08;普罗米修斯&#xff09; 实验部署 实验架构…

Biotin-PEG4-TSA,生物素-PEG4-酪胺,用于标记蛋白质、核酸等生物分子

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;Biotin-PEG4-Tyramide&#xff0c;Biotin-PEG4-TSA&#xff0c;生物素-PEG4-酪胺&#xff0c;Biotin PEG4 Tyramide&#xff0c;Biotin PEG4 TSA 一、基本信息 产品简介&#xff1a;Biotin PEG4 Tyramide is compos…

.git 文件夹结构解析

.git 文件夹结构解析 在这篇文章就让我们来看看这个 Git 仓库里的文件分别都是用来干什么的&#xff0c;以及在执行了相关的 Git 命令后这些文件会如何响应。 hooks&#xff08;钩&#xff09;&#xff1a;存放一些shell脚本info&#xff1a;存放仓库的一些信息logs&#xff…

Adobe Media Encoder 2023下载安装教程,ME 2023安装教程,附安装包和工具,无套路,轻松搞的安装

前言 Adobe Media Encoder是一个视频和音频编码应用程序&#xff0c;可让针对不同应用程序和观众&#xff0c;以各种分发格式对音频和视频文件进行编码。包括专门设计的预设设置&#xff0c;以便导出与特定交付媒体兼容的文件&#xff0c;可以按适合多种设备的格式导出视频&am…

【进入游戏行业选游戏特效还是技术美术?】

进入游戏行业选游戏特效还是技术美术&#xff1f; 游戏行业正处于蓬勃发展的黄金时期&#xff0c;科技的进步推动了游戏技术和视觉艺术的飞速革新。在这个创意和技术挑战交织的领域里&#xff0c;游戏特效和技术美术岗位成为了许多人追求的职业目标。 这两个岗位虽然紧密关联…

Linux编辑器vim(含vim的配置)

文章目录 前言vim的基本概念vim基本操作进入vim模式切换退出vim vim指令vim命令模式指令vim底行模式命令 简单vim配置 前言 本篇文章&#xff0c;小编将介绍Linux编辑器–>vim以及vim的配置。 vim的基本概念 正常/普通/命令模式(Normal mode) 控制屏幕光标的移动&#xf…

正则表达式第三四个作用:替换、切割

目录 方法二 replaceAll&#xff1a; 方法三&#xff1a;spilt&#xff1a; 方法一之前已经见过了&#xff1a; 方法二 replaceAll&#xff1a; 形参中&#xff1a; 参数regex表示一个正则表达式。可以将当前字符串中匹配regex正则表达式的字符串替换为newStr。 代码演示 S…

06.Elasticsearch应用(六)

Elasticsearch应用&#xff08;六&#xff09; 1.什么是分词器 ES文档的数据拆分成一个个有完整含义的关键词&#xff0c;并将关键词与文档对应&#xff0c;这样就可以通过关键词查询文档。要想正确的分词&#xff0c;需要选择合适的分词器 2.ES中的默认分词器 fingerprint…

《机器学习》客户流失判断-python实现

客户流失判断 题目赛题描述数据说明赛题来源-DataCastle 问题描述解题思路Python实现读取数据并初步了解导入宏包读取数据查看数据类型检查缺失值描述性统计分析 可视化分析用户流失分析特征分析任期年数与客户流失的关系&#xff1a;服务类属性分析特征相关性分析 数据预处理类…

重生之我是学神,小小c语言题目可笑可笑

#include<stdio.h> int main(void) { float score[10]{0}; int i 0; for(i0;i<10;i) { printf("请输入%d学生成绩",i1); scanf("%f",&score[i]); } float sum0; int m…

【轮式平衡机器人】——TMS320F28069片内外设之GPIO

引入 接下来的几期博客会介绍轮式平衡机器人TMS320F28069片内外设&#xff0c;了解片内外设的基本原理&#xff0c;内容较为基础&#xff0c;都是些简单的simulink模型&#xff0c;旨在将复杂的原理过渡到simulink软件应用。足够了解的博友可跳过。 后续还将会结合MATLAB/Sim…

分类预测 | Matlab实现GRU-Attention-Adaboost基于门控循环单元融合注意力机制的Adaboost数据分类预测/故障识别

分类预测 | Matlab实现GRU-Attention-Adaboost基于门控循环单元融合注意力机制的Adaboost数据分类预测/故障识别 目录 分类预测 | Matlab实现GRU-Attention-Adaboost基于门控循环单元融合注意力机制的Adaboost数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类效果 …

JVM/GC复习1---更新中

JVM/GC JVMGC垃圾回收算法1.引用计数法2.标记清除发3.标记压缩算法4.复制算法5.分代算法 收集器1.串行垃圾收集器2.并行垃圾收集器2.CMS垃圾收集器 3.G1垃圾收集器(重点)jdk1.7开始1.9默认的回收器Young GC模式Mixed GC 可视化的GC日志分析工具 JVM 待更新中ing GC 垃圾回收:…

【并发编程】ReentrantLock

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;并发编程 ⛺️稳重求进&#xff0c;晒太阳 相对于synchronized 它具备如下特点&#xff1a; 可中断可以设置超时时间可以设置公平锁支持多个条件变量 与synchronized一样&#xff0c;都支…