代码随笔——点阵汉字在LCD上的显示

注:本文约在半年到一年前写的。

其实我以前从没想过写Framebuffer的代码,网上流传较多的是LCD的移植(主要改参数),之后没下文了。不过,曾经兴致冲冲地想搞Qtopia移植,在这过程中碰到过一个叫Tslib的东西。后来Qtopia没搞成功,倒研究起Tslib来了——对它的底层原理还没看明白,对于一些代码技巧及代码结构组织还是研究了一点。这个过程,与前几个月研究u-boot,一年前研究rtp以及曾经研究过的enc28j60等等代码很是相似。我这个有个毛病,喜欢研究些小东西,一些有意思的东西。比如说,人家移植u-boot,就是移植到开发板上,出结果就行了,而我,会去看看那些内存地址啊,看看里面的代码啊什么的。——不务正业,从这里可见一斑。

Tslib研究了一点点后,又对多通道的ADC感兴趣。经过查资料,发现网上也有很多人问怎么实现多通道采集数据,而且有些资料出奇的一致,都是转来转去的。我移植ADC驱动时是完全照抄别人的文章的,一般说来,ADC的移植跟TS的驱动差不多要一起搞,需要的文件有三个,其中一个是头文件,后来我才知道,那个头文件是“历史遗留”的,因此在2.4版本的内核中,ADC的驱动包括了read接口以及write接口,write函数就用到那个头文件的几个宏,里面的write接口正是多通道控制的关键——我们可以通过应用程序中调用write来指定哪一个通道,而这个应用程序也需要用到那个头文件的宏。但不知道怎么搞的,后来就把write给去掉了,而保留了头文件。或许有人觉得无需这样做。

当时我就一心地写个多通道的代码出来。于是搞了两种版本,一个是使用“正宗”的接口:ioctl——这个接口更名副其实一点,另一个是write接口。经过曾经,两种版本都是可行的。但是,由于内核版本变化实在太快,很多接口函数和宏定义都发生变化,因此有人问我怎么不能编译通过,怎么不能XXX,这些问题我也不知道,因为内核不是我开发的,我也没深入研究过驱动。另外,我最怕别人动不动就问人,连最基本的自学技能(若干年后,我们大家都会知道,无论在大学还是工作,自学才是王道)都不知道。我高中时候英语很好,经常有人问我单词,我都劝他们先查字典,字典的解释是最权威的,但很多人不听。因为有个大活人在,方便快速。到大学后期,我慢慢地不想说什么的,都以“不知道”为由,拒绝很多问题。假如直接给别人源代码,别人会问你程序是怎么运行的,里面代码是什么意思,老师问到该怎么回答,怎么改进这些东西,等等。其实我挺喜欢帮助别人的,别人的一句“谢谢”就能满足我的虚荣心。

后来,不知道怎么搞的,实然想在屏幕上显示汉字。于是乎,又去研究字库文件,研究别人的代码。我这个人比较笨,有些东西要慢慢地理解。比如说在屏幕上显示一个点阵汉字,我就从字库中找一个汉字,将那些十六进制数据一一改成二进制,再理解。当看到那些“1”组成了一个熟悉的汉字时,心情是非常激动的。当然,在研究区号、位号及汉字分布时,脑海中那些十六进制的知识又被复习了一遍。一开始是在Linux终端下使用printf打印的,但只能竖着打印,不能横着打印。我甚至想过要定位出坐标来,但是普通的C语言没这功能。后来某一天早上,实然看到自己买的一本关于ncurses编程的书,顿时大悟,何不用这个库来显示?这个库我很早就有耳闻了,只是现在应用场合不多(但在终端上,它具体非常强的优势),没去了解。后来一切似乎很顺利,显示完16点阵,再研究24点阵显示,研究完汉字显示,再研究中英混合显示,等等,似乎都很成功。当然前面所有这些都是在PC上模拟的,还没有真正在触摸屏上实现显示。不过,正是有了前面的基本知识,将那些东西搞到触摸屏上很简单。这个过程便是传说中的“移植”了,我只是简单修改了一下打印的函数。在PC上,可以用printf,可以用mwprintf,在LCD上就用画像素的函数。不过,有一个致命缺点:没有脱离Tslib的环境,而且就在ts_test.c文件中添加,因为我还没研究过auto tool(我已经下载了英文教程,还没看)。另外,对于Tslib画像素的流程还不了解。当然,经过自己的努力,最终还是能脱离了Tslib,形成自己独立的库文件。

这个过程也在不断修改自己的代码,由于自己对代码的优化研究不深,因此谈不上速度的优化,只是在代码组织上作了调整。不过我还是对比了一下移位和乘除的差别。另外,将英文字符存放在数组中,汉字则采用字库文件。其实我很早就注意代码的组织了,用现在很流行的话,就是很注意代码的复用、重构。这些习惯使得有些函数不用修改,直接能使用。

当显示出汉字时,觉得自己似乎也很成功,其时也不时注意周边的汉字字体,甚至还留意移动门口上方的点阵屏和公车的点阵屏。不过它们都是移动的,而我的是静止的。于是乎,又在想怎么让屏幕上的字也能移动。同样地,我也是先在PC上使用ncurses库来测试。在PC上测试没什么问题,可是到了屏幕上,就出现问题了:原来位置的像素还在,这样,汉字移动时,就看不清是什么字了。原来,我并没有清除屏幕。屏幕原来有什么,依然还有什么。到后来,找到一个ripple小项目,里面有与framebuffer相关操作的代码,于是就借鉴里面的代码(后来的代码都是在它的基础上修改添加的)。这才实现了清屏功能,或曰“刷新”。其它刷新很简单,就是将framebuffer所映射的某个内存(块)写0。在RGB中,全0是黑色。全F是白色。ripple项目原来的清屏函数是清除整个屏幕,后面我改进了一下,可以在指定行、列清除指定大小的屏幕。

代码随笔——点阵汉字在LCD上的显示相关推荐

  1. 嵌入式系统基础:点阵汉字的字模读取与显示

    点阵汉字的字模读取与显示 虚拟机:VitrualBox 6 系统:Ubuntu 18 函数库:OpenCV 3.4(涉及到图像编程) 文章目录 点阵汉字的字模读取与显示 一.汉字点阵字库原理 1. 汉 ...

  2. STM32的串口传输文件和点阵汉字的字模读取与显示

    文章目录 一.串口传输文件 1.题目要求 2.实验过程 二.汉字点阵原理 1.汉字编码 2.点库字库结构 3.汉字点阵获取 三.Ubuntu下显示图片和文字 1.实验要求 2.实验准备 3.编写代码 ...

  3. 汉字在屏幕上的显示过程以及乱码的原因

    一.计算机中的显示原理 要想在计算机的显示器上显示文字,首先你得写一个程序,这个程序的任务就是就是把文字的显示信息发给显卡,显示信息包括在这个屏幕上的输出位置.字的大小等等.然后显卡就知道怎么显示这个 ...

  4. pc机之间的通信和点阵汉字的字模读取与显示

    pc机之间的通信 连线设置 点阵汉字的读取与打印 在ubuntu下面用c调用opencv显示文字和图片 总结 连线设置 两个usb转换口 G-G,3.3-3.3,TX-RX,RX-TX 打开串口助手选 ...

  5. Ubuntu下点阵汉字的字模读取与显示

    文章目录 一.汉字的区位码.机内码编码规则 1.GB2312标准 2.区位码 3.机内码 二.字形数据存储格式 1. Unicode 字符集和编码 2.字模 3.汉字点阵获取 三.在图片上叠加显示学号 ...

  6. Ubuntu下利用Opencv进行点阵汉字的字模读取与显示

    前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容. 提示:以下是本篇文章正文内容, ...

  7. 【嵌入式】在Ubuntu系统下通过OpenCV实现点阵汉字的字模读取与显示

    介绍汉字点阵的原理,理解汉字的机内码.区位码编码规则和字形数据存储格式,通过OpenCV在Ubuntu系统下显示点阵汉字 一.汉字点阵原理 1.汉字点阵原理 1.点阵 2.汉字编码 3.点阵字库存储 ...

  8. 串口文件传输及点阵汉字字模的读取与显示

    目录 一.串口文件传输 二.汉字点阵字库原理 (一)汉字编码 1.区位码 2.机内码 (二)点阵字库结构 1.点阵字库储存 2.16*16 点阵字库 3. 14*14 与 12*12 点阵字库 (三) ...

  9. 虚拟机下点阵汉字的字模读取与显示

    目录 一.汉子点阵字库原理 二.实验 ​三.总结 四.参考 一.汉子点阵字库原理 (1) 汉字编码 1. 区位码 在国标 GD2312-80 中规定,所有的国标汉字及符号分配在一个 94 行.94 列 ...

最新文章

  1. Google App Engine给我们带来了什么?
  2. 中美专利对比:2015年中国上升 美国首降
  3. 如何安装透明窗口主题Emerald在Ubuntu 13.04/12.10/12.04中-PPA
  4. 云计算数据中心规划设计方案
  5. erp系统服务器怎么关机,服务器怎么设置自动关机
  6. 【LeetCode笔记】3. 无重复字符的最长子串(JAVA、滑动窗口、字符串)
  7. DirectShow--A.枚举设备
  8. 【报告分享】2021新青年国货消费研究报告:文化觉醒时代,宝藏国货迎复兴机遇.pdf(附下载链接)...
  9. mysql 文件批量插入_mysql大批量插入数据的4种方法示例
  10. Spring Security配置放行请求,将参数放置于请求体时放行失效
  11. android 左移动画_android 动画Animation之TranslateAnimation移动
  12. Linux学习-菜鸟教程知识(一)
  13. 台式计算机电源待机电流有多大,终于知晓电脑机箱电源12v多少安
  14. 中轴型SpA的两种诊断分支具有可比性
  15. vue中组件之间调用方法——子组件调用父组件的方法 父组件调用子组件的方法
  16. 点名器实现的随机原理(实现随机点名器)
  17. Leetcode 875:爱吃香蕉的珂珂 Koko Eating Bananas
  18. 02 设计师灵感网址(1)
  19. IE和火狐的css兼容性问题
  20. 中国企业如何玩转海外媒体推广?

热门文章

  1. 谁说我们没有美国富---中国公款消费一年X掉9个航母战斗群
  2. 转转集团Q4手机行情:二手市场iPhone交易量今年以来首次“反弹”
  3. 天津消协警示“58同城” 请珍视消费者的信任和选择
  4. 100家店干翻17000家药店!刘强东最恐惧的对手来了!
  5. 亚马逊创始人下月将乘自家火箭进入太空 亲弟弟同行
  6. 英伟达:今年显卡将继续供不应求 尽量保证供应普通玩家
  7. 掏出来的“耳屎经济”
  8. 三星Galaxy S21 Ultra相机再升级:1.08亿主摄+全新传感器夜景更强
  9. 北京市电影局:重要项目不停工、不流产、不降标
  10. 唏嘘!又一家手机工厂关闭,一代机皇彻底退出中国制造