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

2024-01-19 18:36

本文主要是介绍【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显示汉字仿真结果

这篇关于【51单片机系列】proteus中的LCD12864液晶屏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/623313

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

GPT系列之:GPT-1,GPT-2,GPT-3详细解读

一、GPT1 论文:Improving Language Understanding by Generative Pre-Training 链接:https://cdn.openai.com/research-covers/languageunsupervised/language_understanding_paper.pdf 启发点:生成loss和微调loss同时作用,让下游任务来适应预训

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订

Java基础回顾系列-第七天-高级编程之IO

Java基础回顾系列-第七天-高级编程之IO 文件操作字节流与字符流OutputStream字节输出流FileOutputStream InputStream字节输入流FileInputStream Writer字符输出流FileWriter Reader字符输入流字节流与字符流的区别转换流InputStreamReaderOutputStreamWriter 文件复制 字符编码内存操作流(

Java基础回顾系列-第五天-高级编程之API类库

Java基础回顾系列-第五天-高级编程之API类库 Java基础类库StringBufferStringBuilderStringCharSequence接口AutoCloseable接口RuntimeSystemCleaner对象克隆 数字操作类Math数学计算类Random随机数生成类BigInteger/BigDecimal大数字操作类 日期操作类DateSimpleDateForma