找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 674|回复: 6
打印 上一主题 下一主题
收起左侧

51单片机初学之手工玩转12864显示屏

[复制链接]
跳转到指定楼层
楼主
本帖最后由 慢慢思考 于 2025-12-1 11:36 编辑

什么叫做手工玩转?就是不要单片机,只要几个拨码开关一个按钮开关加几个电阻,就能在12864屏上显示出你想要显示的东西。
看下图,这个就是已完成的实物,就这点东西哦:
12864屏能干什么?它能显示字符包括汉字,也能显示图形。
显示屏嘛,目前为止,都是点阵式的,靠亮灭一个个的点来显示字符或图形。12864,就是说它的点阵,是横向128个点纵向64个点,形成一个矩阵。
这个12864屏属于单色屏,于是每个点的状态参数只有两个即亮与不亮,可以标记为10,所以,对每个点的控制只需一位就够了,也就是说你输入一比特即8位数据就可以控制8个点。
在它本身的功能设计上,它有两种工作模式,一种是字符显示模式,一个是图形显示模式。
所谓字符显示模式,就是你想让它显示一个什么字符,你直接输入这个字符的编码就行了,比如你要输入2”这个数字,你查表,它的编码是十六进制数0x32,你把这个0x3212864屏的操作规定输入进去就可以显示出来了。这个屏在字符显示模式下,它是被设计成8*4个小方块的,也就是说它被分成了4行,每行分成8个小方块,则每个小方块就是横向16个点纵向16个点。每个小方块又被分成了左右两块,每块都可以显示一个8*16点阵的字符,每个8*16点阵字符由一个8位二进制数作为这个字符的编码来控制它的显示,比如上面说的你要显示数字2,则0x32(二进制数00110010)就是它的完整的编码值。
所谓图形显示模式,就是说若是你要想在屏在显示什么东西,包括字符,你得先把这个你要显示的东西变成由许多点组成的图形,然后你得一个点一个点地去操作点亮它们以在屏幕上显示出来。
这两个显示模式是可以切换的,向显示屏输入相关指令就行了。很重要的一点,这个屏上电复位后,它的显示模式是字符模式,也就是说,它上电后你就可以直接使用字符模式了。
好了,我们先来实验它的字符显示功能,我们来让它显示数字2”。
想要使用一种电路模块,当然先得看看它的使用说明书,说明书先看什么?接口啊,看了它,才好先把电路图搭建起来。

这个电路这样搭建:为了增强对它的功能和实现方法的体验感,也为了让实验更加简单,我们不走寻常路,不用单片机来控制它,而是用拨码开关和按钮开关来控制。具体电路图如下:
此电路中,开关KRW的作用是用于告诉该屏我现在是要向你写入数据还是读取你内部的数据,本电路中开关的ON位置为写入;KRS的作用是确定放在数据端口的数据是命令类数据还是即将要显示的内容,开关ON的位置为命令;KEN的作用是给屏发信号要求它读取数据口的数据,拨动开关放置好数据之后,按一下就行了;KDB0~KDB7的作用是改变数据端口电位的高低来实现向这个端口上放置我们想要输入的数据的目的,开关ON位置为置0
搭建好的电路实物图已经在前面给出了。
电路搭建完成并通电后,首先要调节可调电阻R1以调节其对比度到能显示内容,这个要是没调节到位,那是显示不出内容的,那接下来的实验必然失败。调节的方法是边调节边肉眼观察屏幕,如果全屏是均匀一色,那不对,应该是可以看到一个个的小方格,它应该是128*64个小方格,如下图就算调节到位了:

好了,下面我们就开始做实验了,先试试输入它的命令,试哪一条呢?这时自然是要查它的指令表了,先看字符模式下的命令表,也就是手册上说的基本指令表:

我们先前不是说要显示数字2么?它的二进制编码我们已经知道是00110010,接下来,我们把拨码开关拨到这个状态,然后KRS开关为OFFKRW开关为ON,完毕,按一下KEN,没显示?怎么回事?是我们这个手工实验的思路不成立么?不慌,再查上述指令表,发现里面有一个“显示状态开/关”指令,是不是因为这个指令没有设置而导致其不显示呢?管它呢,试试不就知道了。
这个指令的二进制,已经在上述表中写得很清楚了,全开就是00001111,我们把这个拨码开关拨到这个状态,然后我们看到这个属于命令类、输入式,那自然得将KRS改拨到ON位置,再按KEN,好,我们就看到了一个闪烁的白色的方块,看来我们的思路是没有问题的。
关于这个按按钮输入数据的方法,前面一篇已经讲过实验了,在这里能用到这个屏的身上,说明这个屏内部应该也有个中央控制单元。
接下来,我们再让数据端口处于00110010的状态,KRSOFF,再按KEN2就出来了不是?再按,再按,我们发现,屏幕上会从左到右显示出一个一个的“2”,然后,一行满了之后,它跑到第三行去了,然后是才是第二行,然后是第四行。这个,谁的问题?屏幕本身的问题,它的设计就是这样的,有点伤脑筋,我们在以后的应用中得注意处理这个问题,不然的话,你知道的。
还有,我们在按按钮时,我们有可能发现按一下按钮会出现两个及以上的2”,这个问题,就是按钮的问题了,它可能接触不良,正宗的说法叫“抖动”,这个抖动,在我们以后的按键应用程序中,是有相应的处理方法的。在这里,我们可以思考一下,在我们进行命令输入时,这个抖动会不会有什么影响?为什么?然后做实验来验证你的判断。
想试试它能不能输入汉字么?简单,查中文字型表(显示屏手册后附),随便查一个字,比如“北”字,编码十六进制数是B1B1,换算成二进制数就是10110001 10110001,然后我们把拨码开关调成10110001状态,KRS为数据状态,KRW为输入状态,完成后按两下KEN,看,“北”字出来了。
好了,手工控制12864屏算是成功了,接下来,看你的兴趣,试一试对“显示状态开/关”指令改变DB0~DB2的电位状态再进行输入,看看会出现什么现象。其它的指令,你也可以按这个方法一一试试,这个方法,比用单片机去操作,简单直观快捷得多。
这里补充一点知识,手册上没说清楚的:这个12864屏的设计,怎么说呢,你把它当作一个256*32的点阵屏,然后它被竖向划了一刀,分成了左右两个屏,然后设计者把右边的那半个屏放在了左半边屏的下方,组成了一个128*64的屏,所以,我们看到连续输入时,它是从第一行跑到了第三行,再去的第二行。这个理解很重要,它不仅关系到在字符模式下的应用,也关系到其在图形模式下的应用,它直接关系到要显示的内容的定位问题,也就是在屏幕上的显示位置问题。
在应用这个屏时,我们想在自己设想的位置上显示一个内容,就得先知道这个屏在设计上的定位方式,在字符显示模式下,我们前面已经说了,它是被分成了横向8纵向432个方块的,也就是说,给它32个地址就可以全部定位了,于是,在设计上,它采用了一维定位方式,也就是把这32个方块按排成一行的方式来编排地址,这个字符地址指令的标志位是DB7位,也即这DB7位为1时,即表示这条指令后面DB6~DB0([DB6:DB0])为字符的坐标值(地址值),显示屏上左上角的第一个方块为首个显示方块,其地址值为0,加上DB7标志位的1值,就是十六进制的80,所以,我们在表上看到在字符模式下,定位首个方块时,要求输入的是0x80,而最后一个字符的坐标则是0x9F
这个屏的设计是很奇特的,前面我们已经说过了,它的每个方块在字符模式下是可以显示两个8*16点阵字符的,也就是说每一行它可以显示168*16点阵字符,但它的定位方式在横向上又只有8个值,那每一块的第二个字符的定位是怎么确定的呢?首先定位这一个方块,然后前后两个字符的编码连续输入,真是有点伤脑筋。
这个在屏的字符模式下的手工控制看来是成功的,做到这里,是不是有那种本来觉得很高大上很神秘的单片机,原来却是如此的简单?接下来,你是不是应该很有把握地连上单片机去操控它了?在这里提醒一下,连上单片机之后你不一定能一次成功,你得先把这个屏的手册看仔细想明白,这个看手册的习惯应该养好。如果你手工过了却过不了程序,那你可得好好查查手册。
图形模式就是手册里说的扩充指令模式。关于图形模式下的手工控制,我就不讲了,有兴趣的可以自己试试。这里要提示的是,在图形模式下,定位不再是一维的,而是二维的,X方向是256个点,每16个点增量一个坐标值,也就是说X向的每一个坐标值,它管着16个点,所以,X向的坐标值是0~15Y方向是32个点,每1个点增量一个坐标值,也就是说它的32行点的每一行都有一个Y坐标值,范围是从0~31。为什么会是这个值?前面说过了,你可以把它看成是256*32的屏给分成两半后再拼起来的,这个屏的设计反正就是这么奇怪。
图形模式下坐标的输入方式也很奇特,它是同样表达方式的指令,即标志位同样是DB7,后面跟的才是坐标值,区分的方式就是输入的先后顺序,先输入的数据为X坐标,后输入的数据为Y坐标,说是必须两个紧跟着输入。然后要显示的内容数据也是两个8位数据紧跟着输入,控制该坐标下的16个点的亮灭。
小贴士:拨码开关的操作,用镊子比较合适,徒手操作有点麻烦的。
想在字符模式下显示汉字的话,该屏必须自带中文字库,否则,你只能在图形模式下自己编制汉字显示数据包。
请诸君批评指正,先谢了。


基本指令集.png (1.09 MB, 下载次数: 0)

基本指令集.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123917 发表于 2025-12-1 10:01 | 只看该作者
非常好的资料,太感谢了
回复

使用道具 举报

板凳
ID:266429 发表于 2025-12-1 11:43 | 只看该作者
本帖最后由 慢慢思考 于 2025-12-1 21:23 编辑

补充说明一下,电路图中的KEN按钮开关其实还是应该用常开开关,这个可以看它的时序图,它是平时为低电位,放置数据之前先拉高电位,放置数据之后保持一定时间待数据端口电位稳定之后,再拉低KENT处电位,此屏在此时读取数据,也就是说,这个屏是下降沿读取数据。当然,在这个实验中,常闭开关也同样会产生下降沿,所以也是可以用的,但是不规范。这个可以在这个实验中来验证。
回复

使用道具 举报

地板
ID:266429 发表于 2025-12-1 22:43 | 只看该作者
还是想给大家提个醒,手册上时序图很清楚,写入数据时,规范的做法是要先拉高EN后再放置数据,然后再拉低EN;读忙信号时,一定要先交出DB7端口的电位控制权,也就是单片机要向这个端口输出高电平,不然的话,你前面输入的数据若是把这个端口的电位给拉低了,那你什么时候检测它都是个低电位。如果你要读出屏的其它数据,则这一组端口的控制权都要先交出去。
我所看过的卖家提供的这个屏的例程,很难看到写得很规范的,有的甚至不交出忙检测端口的电位控制权就去做检测。
天下文章一大抄,如果不了解清楚模块的一些具体规定,抄对抄错都不知道。
程序上机能通过,不等于程序没毛病。
回复

使用道具 举报

5#
ID:584814 发表于 2025-12-2 11:35 | 只看该作者
初始化的命令也是这么搞上去的么
回复

使用道具 举报

6#
ID:266429 发表于 2025-12-2 21:25 | 只看该作者
man1234567 发表于 2025-12-2 11:35
初始化的命令也是这么搞上去的么

帖子中那个控制屏幕与光标的命令00001111(0x0F)不就是初始化的命令之一么?
本来就是个很简单的玩艺,用单片机控制时,它的任何命令都是这么搞上去的。
回复

使用道具 举报

7#
ID:1028227 发表于 2026-1-7 15:45 来自触屏版 | 只看该作者
这个对于我们初学者是很好的学习。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表