树莓派+12864液晶视频播放实验

树莓派+12864液晶视频播放实验

51单片机学习笔记:ST7920控制器的12864液晶使用总结

总结: 1、 控制芯片不同,液晶接口定义,或者寄存器定义也可能不同 2、 显示方式有并行和串行,串行方式据说不能读数据寄存器(DR),那指令暂存器IR是否可读? 3、 含字库芯片显示字符时不必对字符取模了,但字库有可能缺斤少两,就是说有一部分字(哪怕是常用字),在字库中没有,如果你第一次测试代码就遇到该字在字库中没有的情况,建议去买体育彩票,支持体育运动! 4、 对芯片的结构地址一定要理解清楚,个人阅读网上一些资料发现大多是不准确的,甚至自相矛盾 很多数据手册中内容更是模棱两可,不明所以,数据手册之间也有矛盾的!
我根据自己的实验结果,再结合一些资料,得出以下结论: ST7920可以控制256×64 点阵的二维绘图缓冲空间, 对于我们的12864液晶,GDRAM大小为256*64, 不是网上普遍说的只用到了一半,其实是全部用了, 它包含可视区和滚动可视区,滚动可视区就是默认不显示的,要滚屏之后才能看到, 可视区对应GDRAM的上半部分点阵区域256*32,滚动可视区是GDRAM的下半部分256*32, 然后再将可视区的水平(128-255)和垂直(0-31)区域的GDRAM映射到液晶的下半屏, 这就是我们的12864. 我画个图给大家看就清楚了!

再补充一些:

1.网上一些资料给出的绘图步骤说第一步设置为扩充指令集0x34,其实这个根据实际情况来定,   比如要播放视频或动画,开着绘图就很流畅
2. 打点法画图实在太慢了,不建议使用打点法进行全屏绘图
3.反白的一些方法 打点法反白矩形区还可以,建议矩形范围小一些,不然比较慢, 打点法反白文字效果很好,因为文字的矩形区比较小,速度很快,不闪动!  不过绘图法反白文字效率更高,flash空间充裕的话建议用绘图法 ,

看到网上的一些代码,打点时一般先读出当前地址16位数据,和点合成后再分2个字节写进GDRAM,

其实我们可以提高点效率,读只要读一个字节,写也只要写一个字节,没必要把16位数据一起读出来再写进去
4.关于液晶显示文字 液晶显示英文和汉字时,应该做到一个函数里,做到2个函数里是完全没必要,也是不可取的 因为做到一个函数里可以直接输出全角和半角的字符,可以中英文加标点符号一起混合输出.
5.关于绘图清零,网上的代码中一般都是清256*32,下半屏都不清的,这是可以的 但是如果你要滚屏显示就要清,不清的话数据是随机的,一个个点随机出来向上冒
6.看到一个帖子,实现滚屏用了算法,  其实只要搞清楚地址结构,重写个setScrollPos方法,也就是对setPos方法改几个地址就可实现循环滚动.

如果为了灵活的滚动,可以将setPos方法中的4个行坐标,扩展到8个行坐标,因为本来就应该有8个行坐标,

可视区4行,滚动可视区4行,而且他们是连续的
以上是我个人的一些实验结论! ,也画了其结构图, 方便新手理解, 不当之处敬请指出,谢谢!
由于不同的控制器,不同型号的液晶代码可能都不一样,网上的那些代码一般也不完全通用,

只要理解了控制器的地址结构与液晶的位置关系,就可以将常见的功能写出来,新手有问题直接跟帖吧,

大家一起交流.

时间: 2024-10-03 14:45:20

树莓派+12864液晶视频播放实验的相关文章

12864液晶并行方式显示

12864液晶使用的16*16点阵.128个字符(8*16点阵)及64*256点阵显示RAM(GDRAM).与外部CPU接口採用并行或串行两种控制方式. 在12864上显示0-9的随机数 第二行显示www.csdn.blog 第三行显示"求是07的博客" 第四行显示"欢迎光临" 下面是基本的代码 #include <reg52.h> #include <intrins.h> #include <stdlib.h> #define

12864液晶——读写、划点、划线、汉字、32*16的字符

//左半屏幕和右半屏幕的列号是一样的,页号也是一样的.//选择整个屏幕,在给DDRAM中写数据时,会同时写到两个屏幕中,即两个屏幕中将会显示一样的数据.//在清屏的时候可以选择整个屏幕.//在滚动的时候可以选择整个屏幕,此时如果分别选屏幕滚动,可以实现两个屏幕滚动方向相反. #define LCD_OFF 0x3E //关显示#define LCD_ON 0x3F//开显示 #define Add_X 0xB8 //页初始地址,共8页#define Add_Y 0x40 //Y初始地址,0到63

Arduino 1602液晶屏实验和程序

在Arduino IDE中, 项目->加载库->管理库中搜索LiquidCrystal,然后安装即可 1.接线图 2.引脚图 3.最简单程序 #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16, 2); lcd.print("hello,world!"); } void loop() { } 4.升级版程序 通过串口读取字符串,

项目中可能会用到12864液晶(或者其它分辨率的),用C#模拟了一下显示效果

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; //WinForm中需要一个picturebox控件 namespace emulateLCD { public partial c

Linux下控制GPIO控制12864液晶屏(ST7565控制器,DM8168)

首先加载驱动模块,应用程序通过调用API实现GPIO控制功能. 驱动函数: 1 /* 2 * fileName: st7565_driver.c 3 * just for LCD12864 driver 4 * GP1_14(46) -> D6(SCK) 5 * GP1_15(47) -> D7(SDA) 6 * GP1_27(59) -> RST 7 * GP1_28(60) -> RS 8 */ 9 10 #include <linux/device.h> 11 #

单片机教程.指针的基础与1602液晶的初步认识

指针的基础与1602液晶的初步认识 我们在上C语言课的时候,学到指针,每一位教C语言的老师都会告诉我们一句:指针是C语言的灵魂.由此可见,指针是否学会是判断一个人是否真正学会C语言的重要指标之一,但是很多同学只知道其重要性,却没学会其灵活性. 简单的程序,100来行代码,不需要指针我们可以轻松搞定,但是当代码写到几千上万行甚至更多的时候,利用指针就可以直接而快速的处理内存中的各种数据结构中的数据,特别是数组.字符串和内存的动态分配等,它为函数之间各类数据传递提供了简洁便利的方法.说了这么多作用估

12864

一.概述 点阵式液晶显示模块(LCD)广泛应用于单片机控制系统,比数码管.段式液晶能模块显示很多其它.更直观的信息,如汉字.曲线.图片等.点阵液晶显示模块集成度非常高,一般都内置控制芯片.行驱动芯片和列驱动芯片,点阵数量较大的LCD还配置RAM芯片,带汉字库的LCD还内嵌汉字库芯片,有负压输出的LCD还设有负压驱动电路等.单片机读写LCD实际上就是对LCD的控制芯片进行读写命令和数据.编程驱动LCD时,不须要对LCD的结构和点阵行列驱动原理深入了解,仅仅要理解LCD接口的定义和LCD的控制芯片的

如何用12864液晶显示图片和绘制任意函数图象(打点)

一. 显示图片 显示图片的要点在于:1.取模 2.利用扩展指令设置液晶3.清楚液晶地址的概念 1.1取模 取模软件用的是"字模221"下图是他的参数设置 这里对参数设置先解释一下,所谓横向取模就是,一张图片从图片最左上角的8位开始取模,从左向右,每次取8位二进制数据转化为16进制保存,第一排取完之后,接着到第二排最左边8位开始取模,以此类推.为什么要这样取模呢?因为12864液晶的横纵坐标就是这个取模顺序,这点在之后还会详细提到. 1.2液晶的设置 液晶显示图片必须用扩充指令集,初始化

LINUX主机上交叉编译树莓派详细教程

LINUX主机OS:Ubuntu14.04 64位,运行在wmware workstation 10上. 树莓派版本:raspberry pi 2 B型. 树莓派OS:官网下的的raspbian-jessie. 1.为什么需要交叉编译 在Ubuntu上直接编译一个.c源文件可以用系统自带的gcc编译器编译test.c gcc test.c -o test 然后执行生成的二进制文件 ./test 交叉编译就是把编译的过程在LINUX PC(或其它主机)上执行,然后拷贝二进制可执行文件到树莓派(或其