单片机处理LED点阵书写屏图像拖移方法
2011-08-26孙亚中
戴 娟,孙亚中
DAI Juan1, SUN Ya-zhong2
(1. 南京工业职业技术学院 电气与电子工程学院,南京 210046;2. 中国电子科技集团 第五十五研究所,南京 210046)
0 引言
LED显示屏已经广泛应用于现实社会中,许多从事该行业的人员都经历过相应编程设计,但在LED显示屏实现书写显示功能方面,涉及的人员并不多,相关资料也很少,特别是用单片机控制实现LED显示屏中较复杂功能——图像拖移方面的处理编程,触及的人员和可查资源就更少。
早期在一个N×N点阵LED书写屏中,用单片机实现完成任意圈定图像拖移的功能编程时,采用圈定图像地址中显示数据的搬家、覆盖,出现再次移动时会将原显示图形修改,移动过的区域图像,会出现拖动痕迹,即移动区域的图形不能恢复的问题。本文给出了一个用51单片机控制系统,借助C语言中的动态数组完成移动圈定图形,并能将拖移过的轨迹消除,恢复原图形的功能设计方法构思及相应程序。
1 设计方法
LED点阵书写显示屏结构分:点阵模块,光笔控制器,图像控制器。结构如图1所示。
图2(a)中光敏电阴与三个运放器构成光笔;图2(b)中使用STC12C5410单片机作控制核心,74HC161与74HC245作译码驱动,共同产生LED点阵屏的行译码信号,LED的列信号则由单片机的端口P1.5串行输出。
图1 LED点阵书写显示屏
图像拖移的处理步骤主要有:对图像圈定点的处理、对圈内图像坐标点的处理和显示图像数据的移动。
1.1 处理步骤
1)对图像圈定点的处理:把圈上的点按照行进行排序,取出列坐标的最大值和最小值。
2)对圈内图像坐标点的处理:上一步取出的行和列坐标的最大值和最小值可以构成一个矩形,把矩形内的地址进行坐标化并存入数组。
3)显示图像数据移动:上述两步执行后,光笔触及屏上的第一点(x1,y1)定为基准点,第二点(x2,y2) 为结束点,随着光笔移动,而前面被圈中的点跟随基准点移动,当单片机处理速度比较高时,人眼就可察觉拖移的效果。
图2 控制器原理图
图3 LED点阵图像显示数据区结构原理图
1.2 图像控制器编程
单片机软件编程中针对图像拖动显示功能要求,开辟了三个显示数据RAM区,如图3,其中显示数据区DDS和原图像数据区OIS为与屏体相关的、同样大小的静态数组[a][b],圈定对象图像区MIS数据则应根据程序员习惯来构建。
1.3 拖动轨迹处理
关键是原显示图像数据不能被拖动过的显示图像数据修改。可以采用在SRAM 中开辟同屏幕同大小的显示缓存,用来保存原图像数据,该数据只有在调用新的显示图像时才被修改。
LED点阵显示时,利用显示指针所指的地址与移动图像地址比较,当在该移动区域内则调用该区域数据,超出该移动区域则调用原显示图像数据。
数组构建:1)显示数据区DDS(对应显示数据数组DDS[a][b])
3.4 抗细菌生物膜 细菌生物膜是指细菌侵入人体后形成的由细菌及其分泌的含水聚合性基质共同组成的膜样多细菌复合体,是细菌繁殖及对抗宿主的一种方式。细菌形成生物膜后其耐药性是游离状态的 500~1 000 倍,可使细菌逃避宿主的体液免疫及细胞免疫反应。MA 主要通过以下 2 个方面发挥抗细胞生物膜作用:(1)减少生物膜形成期藻酸盐等物质的含量;(2)于细胞生物膜的Ⅰ基因区发挥作用,通过降低酰基丝氨酸内脂酶浓度、抑制细菌群体感应等功能破坏已生成的生物膜[25]。
2)原图像数据区OIS(对应显示数据数组OIS[a][b])
3)圈定图形数据区MIS有两种方法:静态区,动态区。考虑到静态区的程序处理虽简单,但占用资源大;而动态区程序处理复杂,但资源重复利用率较高。我们采用构建动态数组,对应数据数组unsigned char xdata *pdat。
所有数组中的数据均以二进制形式与LED 点阵一一对应。
2 软件模块设计
2.1 软件流程图
如图4 所示。
图4 图像拖移软件流程
2.2 过程实现
1)通过控制器采用亮点扫描方式获取光笔所在的行列x、y坐标,将该数据按照先x后y顺序存入一维动态数组paddr [n],即n为偶数为x坐标,n为奇数为y坐标建立初始的移动区域地址坐标数组。
2)利用冒泡法[1]或三目运算(x = (x<y)? x:y和x = (x>y)? x:y) )在paddr [ ]中找出最大、最小行xmax、 xmin。
3)建立移动图形地址数组pp[ ][ ],从xmin到xmax, 根据x依次递增排序,在数组paddr[ ]找出同x值时列y坐标,将y值大者送pp [1][x-xmin],值小者送pp [0][x-xmin]。
4)根据移动图形地址数组pp [ ][ ]和原始图形数据数组OIS [a][b],建立移动图形数据数组pdat[],行为从xmin到xmax依次增加,只需要保存列数据。
5)接收光笔移动坐标数据,处理需移动的偏移值xl=x2-x1、yl=y2-y1,根据偏移值修改移动图形地址数组pp [ ][ ]。
6)根据移动图形地址数组pp [ ][ ]、移动图形数据数组pdat [ ]和原图形数据数组OIS [ ][ ],构建显示图形数据数组DDS [ ][ ]。
显然在1.1中提及对图像圈定点的处理是通过1)、2)过程完成,对圈内图像坐标点的处理是通过3)过程完成,显示图像数据的移动通过4)、5)、6)过程完成。
3 结束语
利用STC12C5410单片机控制一个a×b×8点阵LED模块的书写显示屏系统,借助少许按键,实现圈定图像拖移功能。该方法已经应用于实际工程项目中。
在应用中还遇到:圈定的图形不是封闭的,我们一般采用根据上下数据找出数据规律,上下坐标值对称求平均值[4],人为设定闭合点;圈定的图形是多拐点,对于单片机来说处理不能完全象C++语言那样方便,比较复杂,我们也采用了光滑不等距插值算法[5],对于LED显示屏这种分辨率不高的显示,效果也可以。
[1]Robert Sedgewick. 周良中译, C算法[M], 人民邮电出版社, 2004.
[2]谭浩强, C语言程序设计[M], 清华大学出版社, 2008.
[3]刘文涛, 单片机语言C51典型应用设计[M], 人民邮电出版社, 2005.
[4]尹彦芝, C语言常用算法与子程序[M], 清华大学出版社,1991.
[5]徐士良, C常用算法程序集[M], 清华大学出版社, 1994.