摘 要:针对目前对全彩LED显示屏图像数据的处理需依赖计算机的情况,提出利用ATmegal28单片机实现JPEG图像解码的方法,并利用此方法实现了通过GPRS网络对全彩LED显示屏图像数据的远程传输。针对ATmegal28的资源和性能特点,对JPEG解码进行了可行性分析。重点论述Huffman解码、IDCT解码和图像缩放的优化算法在ATmegal28单片机上的实现。由于图像的处理在单片机上实现,降低了产品的成本,具有较强地生产实用性。
关键词:ATmegal28;JPEG解码;Huffman解码;IDCT解码;全彩LED显示屏
随着LED显示屏的普及和成本的降低,LED显示屏已经成为公共场合信息宣传的一种重要工具。目前实现对LED显示屏的文字图像更改的方法主要有:显示屏通过串口或网线与计算机连接实现更改;通过GPRS网络实现数据的远程传输,接收后在计算机上用特定软件解码后发送到LED显示屏显示。以上方法始终需要在计算机平台上实现,附加成本较高。设计利用手机作为发送端,发送彩信至GPRS模块,利用ATmegal28单片机直接对彩信图像进行解码然后发送到LED显示屏上进行显示。
l JPEG解码可行性分析
该设计所用全彩LED屏接收的数据格式为Xmp格式,Xmp格式是简化的BMP格式。Xmp格式在图像数据前有6个字节表示图像的属性,第1字节为1个点的字节数;第2字节为XMP文件中包含的图片个数;第3,4字节为图像的高;第5,6字节为图像的宽,其后为图像每点的颜色。每点的颜色用2个字节表示(16位色)。由于所用全彩LED屏只有64×64像素,所以JPEG解码后还需进行图像的缩放。
JPEG解码过程中所需要的缓存主要包括原始JPEG图像数据的缓存、中间变量的缓存以及解出的Xmp数据的缓存。根据JPEG图像的复杂度及压缩比的不同,一般一帧320×240的彩色JPEG图像的大小在2~20 KB。JPEG解码缓存主要用于存储Huffman表,量化表,IDCT解码的临时结果等。这些大约需要8 KB。解出的Xmp数据的缓存要求的RAM相对比较固定为9 KB。综上JPEG解码大致需25 KB的RAM。ATmegal28内部只有4 KB的SRAM,所以该系统外扩了64 KB的外部RAM。
2 软件实现
该设计采用avr—gcc作为编译工具。avr-gcc默认设置栈由内部RAM的顶部向下生长。由于图像处理过程中需要占用大量的RAM空间,所以应该通过设置把所有数据区移到外部RAM,只留栈区在内部RAM,避免数据的相互覆盖。
JPEG解码过程主要包括Huffman解码、反量化及IDCT变换、色彩变换等模块。该文采用的LED显示屏是64×64点像素,并且只能显示Xmp格式的图片。因此在JPEG解码后需增加图像的缩放模块。其流程框图如图1所示。