找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3669|回复: 7
收起左侧

液晶12864串口的画任意像素点的问题

[复制链接]
ID:434807 发表于 2018-12-8 09:42 | 显示全部楼层 |阅读模式
          近期想做个俄罗斯方块玩一玩,现有的材料有12864,普中科技的开发板(没有锁存器),芯片12C5A60S2,
看了许多前辈写的贪吃蛇、俄罗斯都是用并口写的,但是我只有串口的12864,所以想写一个串口的玩,也许有人会说串口发送数据比并口慢,但是我觉着
12C5A60S2芯片还是够强大,反应速度可以接受。
我查了很多资料,说串口的时候不支持读数据,导致写任意一个点的程序有点复杂,网上说建一个显存,但不知道是什么具体意思。经过几天的摸索,我发现每次画一个点之后,横向在这个点旁,无法画点。还有就是那种在上边显示一个圆,倾斜直线,等,用串口来写,各位有什么建议或者是想法吗?

  提炼一下问题:
1.12864串口如何打点,任意打点, 连续打点,总之就是给坐标按坐标打点的想法;
2.12864串口自己建一个显存是什么意思,怎么建的;
3.12864串口画圆,画倾斜直线这种是怎么办到的;
欢迎大家前来讨论,谢谢!




回复

使用道具 举报

ID:123289 发表于 2018-12-8 13:18 | 显示全部楼层
简单:
1、显示屏每次最低的数据操作是一个字节,即8个水平的点,不可以一个点一个点的操作。
2、你要显示的是一个点,只有一个办法:事先必须知道其余7个点的当前数据,将它们与你要显示的1个点拼在一起,形成一个字节,再送到屏上去。这样才能保证:你只改变了一个点的数据,而其余7个点不变。
3、“事先知道其余7个点的当前数据”方式,有两种:一种是读屏,取得8个点的数据;另一种是,建立一个显示缓冲区,区的大小是1024个字节,每个字节对应8个显示点,这样可以对应1024*8=128*64。显示屏只从缓冲区取数据显示。由于缓冲区中的数据是你写入的,你当然就知道屏上任意一个点的数据了。

评分

参与人数 1黑币 +12 收起 理由
谢小康4 + 12 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:123289 发表于 2018-12-9 10:46 | 显示全部楼层
所谓缓冲区,在这里就是1024个字节的RAM就可以了。
例如:你可以用1000H-13FFH这个区域做缓冲区。
将1000H是的数据固定送至屏的最上最左8个点;
将1001H是的数据固定送至屏的最上次左8个点;
……
将13FFH是的数据固定送至屏的最下最右8个点。
这需要资料吗?要改显示的内容,就修改1000H-13FFH中对应的数据,再记住将修改过的数据对应送到屏上去刷新一下屏,不就可以了,有何难的呢?

评分

参与人数 1黑币 +12 收起 理由
谢小康4 + 12 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:434807 发表于 2018-12-9 08:56 | 显示全部楼层
yzwzfyz 发表于 2018-12-8 13:18
简单:
1、显示屏每次最低的数据操作是一个字节,即8个水平的点,不可以一个点一个点的操作。
2、你要显 ...

请教一下如何在12864上修改一个1024字节的缓冲区?推荐点资料也行,网上相关的介绍比较少,谢谢
回复

使用道具 举报

ID:434807 发表于 2018-12-9 21:29 | 显示全部楼层
yzwzfyz 发表于 2018-12-9 10:46
所谓缓冲区,在这里就是1024个字节的RAM就可以了。
例如:你可以用1000H-13FFH这个区域做缓冲区。
将1000 ...

请原谅我的愚钝,还想再次请教一下如何在屏幕的一块区域对应一块内存的区域?我今天看了很多12864的资料也没有找到相关的,可以请您说详细点吗?
我自己的想法是定义一个8*64字节的数组,对应一行8*16个像素点以及纵向64个像素点的数据,每次在数组内画图,在把数组更新进去。但是这是理论层面上的,并不知道实际如何操做,去写这个显示缓冲区。
关于 如何将把数据给到相应的地址然后存起来?

回复

使用道具 举报

ID:434807 发表于 2018-12-12 09:22 | 显示全部楼层
https://wenku.baidu.com/view/2dbf0852a45177232f60a2ca.html分享网址喽,如何画点已解决,其实不存在的没有这么难,主要是看自己有没有耐性去找资料。
回复

使用道具 举报

ID:434807 发表于 2018-12-12 09:24 | 显示全部楼层
void drawpoint(uchar x,uchar y)  
{
  uchar row,column,offset;
        row=x;
        column=((y-1)/8)+1;       
        if(y%8!=0)
        offset=y%8-1;
        else
        offset=7;
        table[4*(x-1)-1+column]|=0x80>>(offset);
}
至于table嘛,就是一个所谓的显示缓冲区。
回复

使用道具 举报

ID:314566 发表于 2019-3-27 17:13 | 显示全部楼层
最近也在研究LCD12864,用的是ST7920驱动,串行方式。不知lz有没有实用的资料或者例程推荐一下。目前手上只有官方的datasheet
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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