基于AVR的LED显示屏的灰度设计与实现

发布者:SereneSunset最新更新时间:2011-11-12 关键字:AVR单片机  LED显示屏  灰度设计 手机看文章 扫描二维码
随时随地手机看文章

    LED点阵块具有亮度高、发光均匀、可靠性好、拼装方便等优点,能构成各种尺寸的显示屏。目前,LED显示屏已被广泛应用于文字显示并取得了很好的效果,但是大部分仅能显示滚动的文字信息而不能显示图像,并且还存在系统复杂等缺点。本文提出了一种主从式单片机的LED显示屏解决方案,该设计方案利用AVR单片机自身的FLASH ROM和RAM,外部无需任何存储电路,电路结构简单。该系统实现了图像的16阶灰度显示,可广泛用于商场、车站等公共场合。

1 AVR单片机简介

    AVR单片机是增强型内置FLASH的RISC(ReducedInstruction Set CPU)精简指令集高速8位单片机,硬件采用哈佛(Harward)结构,达到一个时钟周期可以执行一条指令,绝大部分指令都为单周期指令。支持在系统编程ISP,其中MEGA系列还支持在应用编程IAP。内置的FLASH程序存储器可擦写1 000次以上,给用户的开发生产和维护带来方便。可擦写10万次的E2PROM,为掉电后数据的保存带来方便。AVR单片机有丰富的片内资源,如RTC,WATCHDOG,AD转换器,PWM,USART,SPI,TWI接口等,I/O口功能强、驱动能力强。

2 系统整体设计方案

    LED显示系统主要由3部分构成:PC上位机图像文字转换与数据发送单元、主控单元以及显示子模块。


    上位机完成把图像和文字转换成为显示屏的显示码,并且把显示信息发送到主控单元上。主控单元选用具有32 kB片内FLASH ROM和2 kB片内RAM的AT-mega32单片机,没有外挂存储器。如果要存储更多的显示信息,可以选用具有64 kB片内FLASH ROM的AT-mega64或者具有128 kB片内FLASH ROM的AT-megal28,也可以外挂存储器来增大存储能力。主控单元主要完成对显示数据的滚动和分割处理,然后通过异步串行口发送到每个子模块中。每个显示子模块用4片8×8单色点阵块拼成1个16×16的点阵屏,用一片ATmega8完成扫描动态显示。

    主控单元与显示子模块的数据通信采用标准的异步串口格式,每帧数据包括1个起始位,8个数据位,1个地址/数据标示位,1个停止位共11位。数据传输码率为625 kb/s,字节传输速率为56.8 kB/s。每个子模块由256个LED构成,实现16阶灰度每个LED需要4 b空间,因此每个显示子模块全屏数据量为128 B,外加1 B的寻址字节共129 B。主控单元更新显示子模块的显示内容时,对所有子模块按地址逐个发送显示数据,更新完所有子模块数据后,再发送一个特殊的地址字0xFF作为控制字,使所有子模块同时更新显示数据,这样可以避免当屏幕较大,显示子模块数量较多时各子模块画面更新不同步的问题。对本设计中完成的6×4个显示子模块而言,由于通讯速率限制,画面更新速度最高可达56 800/(129×24+1)=18.34帧/s,由于主控单元还要完成全屏数据的分割和显示内容的移动控制,所以其实际帧数低于上述值,不过用于普通的图片显示已经可以达到要求。

    现场应用中,可以不需要PC上位机,只需把要显示的信息存储在主控单元,即可通过主控单元中的按键来选择显示的内容及方式,可循环显示,文字信息还可以上下左右滚屏显示。

3 系统硬件设计

    该系统由两部分硬件电路组成:主机板电路和子模块显示驱动电路。

    3.1 主机板电路

    主机板电路十分简洁,由ATmega32组成的最小系统和RS 232,RS 485接口电路组成。

    主机板上的数据由异步串行口发送到各个子模块中,为了在提高传输速度和距离的情况下仍能够保证数据传输的可靠性,主机板上发出的信息转换成为RS 485信号,采用带屏蔽层的同轴电缆传输到LED子模块上。转换所用接口芯片为MAX485,该芯片工作于5 V电压下,最高传输速度可达到2.5 Mb/s,传输距离可达l 200 m。采用带屏蔽层的同轴电缆可以降低传输过程中产生的信号干扰。

    在需要从PC上位机下载数据到FLASH ROM时,通过MAX232芯片实现ATmega32和PC机的通信。

    3.2 子模块显示驱动电路

    子模块显示驱动电路由RS 485转换电路、子模块地址标识电路和点阵驱动电路组成。RS 485转换电路和主机板中一样,同样采用MAX485作电平转换。

    由于采用单片机的异步串行口进行多机通信进行数据传输,每个子模块应该有和其位置相对应的地址标识。地址标识电路采用8位并进串出芯片74HCl65和8位拨码开关组成,因此本系统最多可以容纳255个子模块(地址OxFF作为更新子模块显示的控制字)。如果简单地通过软件内部的设定来决定各个子模块的地址,每个AT-mega8所对应的程序会有差别,这样会给程序的烧写带来不便,因此采用外部硬件电路对子模块的地址进行标识。采用74HC165作串并行转换是为了节省单片机的引脚资源。

    LED点阵采用动态扫描法进行驱动,并且实现16阶灰度显示,为了节省单片机程序中扫描程序的时间消耗,提高扫描速度,显示数据采用并行输出的方法。驱动电路采用4-16译码器74HC154译码后驱动16个中功率三极管8550作为行选,2个8位数据锁存器74LS373作为行数据锁存。

[page]

4 系统软件设计

    系统软件设计包括上位机软件的设计、主机板AT-mega32程序设计、显示子模块ATmega8程序设计3部分。

    上位机软件完成图像和文字的编辑,通过计算机串行接口把显示数据传送到主机板上。主机板接收上位机的数据并通过内部Boot Loader区的程序进行FLASH ROM内显示数据的自更新。主机板把显示数据进行分割处理后发送给每个子模块,并且完成显示数据的上下、左右滚屏处理。子模块通过软件调制脉冲占空比的方法,实现16阶灰度图像显示。

    4.1 上位机软件设计

    上位机软件使用VB开发,主要完成图像的取点、线性补偿和点阵数据生成。首先将图像文件转换为96×64分辨率、256阶色深的单色灰度图像,由于使用占空比驱动的LED其占空比/亮度为对数特性,所以需加入指数特性调整为线性之后才能交付显示系统进行显示。其计算公式为Dout=15×(Din/255)n。n为比例系数,经实际显示校对后确定为1.35,同时通过该公式完成从256阶灰度到16阶灰度的转换。通过MSComm控件实现PC机与主机板的通信。

    4.2 主机板ATmega32程序设计

    主机部分软件主要分为按键响应处理,显示数据分割和分割后的数据发送3部分。其中显示数据的分割占最主要的地位,同时显示内容的滚屏移动也包括在这部分中。按键响应使用外中断响应,配合定时器TO进行去抖处理后置位按键有效标志,在主程序中检查该按键有效标志并进行响应处理。


    4.3 显示子模块程序设计

    显示子模块的软件分为数据接收和动态刷新显示2部分。由于子模块要实现16阶灰度的表现,而且还需要实现足够高的刷新速率以避免产生闪烁现象,所以对刷新显示部分的速度要求较高。本设计采用的方案为:全屏(每个子模块为16行×16点/行)刷新分为16份时间片,每份时间片实现一行的扫描。而每行的时间片又分为15个子时间片,其中灰度为最暗的点点亮0个子时间片,灰度为最亮的点点亮15个时间片,由此实现占空比为0/15~15/15共16个级别的平均电流控制,从而实现16阶的灰度显示。通过:MEGA8片内定时器T2,每个子时间片取得52μs的扫描时间,15个子时间片构成一个单行扫描的时间片(52 μs×15=780μs),16个单行扫描时间片又构成一次全屏的扫描(780 μs×16=12.48 ms),则刷新频率约为80 Hz,在最高亮度下也可以保证不出现行闪的现象。

5 结 语

    本文提出的基于AVR单片机的LED显示屏已应用于现场,AVR单片机的看门狗功能使得系统稳定可靠。由于本设计是主从式的解决方案,具有可扩展性,并且采用ISP功能给电路板的调试和系统的维护带来了很大的方便。实践证明,本系统可以方便地显示各种字体的文字信息及16阶灰度的图像,画面清晰、性能稳定、操作简便,具有很好的应用价值。

 

 

关键字:AVR单片机  LED显示屏  灰度设计 引用地址:基于AVR的LED显示屏的灰度设计与实现

上一篇:基于AVR单片机Atmega48的电子镇流器设计
下一篇:基于PL3000单片机的学生公寓用电管理系统设计

推荐阅读最新更新时间:2024-03-16 12:46

关于avr单片机两路ad信号的单独采集问题
最近做了个跟ad相关的项目,需要单独采集两路ad信号,具体步骤如下 1.选择参考电源 2.选择采集通道 3.选择ad转换时钟 4.使能ad模块,5开始转换,6.等待转换结束,7.读取数据 经过测试分别单路采集没问题,可把两个连起来,就出问题了,第二路采集的结果跟第一路总是相同,把第二路放到前边,然后采集第一路,结果第一路的结果跟第二路的相同。郁闷啊,经过检查初始化及管脚设置都正确,测试多次仍然没办法解决,暂时放下处理其他问题。过了一周左右,重新看ad采集部分的数据手册,发现如下字句: 一旦读出ADCL, ADC 对数据寄存器的寻址就被阻止了。也就是说,读取ADCL 之后,即使在读ADCH 之前又有一次ADC 转换结束,数据寄存
[单片机]
AVR单片机(学习ing)—(十)、ATMEGA16的同步串行接口—01
十、ATMEGA16的同步串行接口 十—(01)、ATMEGA16的同步串行接口的介绍 1、ATMEGA16的SPI特点 串行外设接口SPI 允许ATmega16 和外设或其他AVR 器件进行高速的同步数据传输。 ATmega16 SPI 的特点如下: • 全双工, 3 线同步数据传输 • 主机或从机操作 • LSB 首先发送或MSB 首先发送 • 7 种可编程的比特率 • 传输结束中断标志 • 写碰撞标志检测 • 可以从闲置模式唤醒 • 作为主机时具有倍速模式(CK/2) 2、主机与从机之间的SPI连接以及原理 主机和从机之间的SPI 连接如Figure 66 所示。 系统包括两个移位寄存器和一个主机时钟 发生器。通过将
[单片机]
<font color='red'>AVR单片机</font>(学习ing)—(十)、ATMEGA16的同步串行接口—01
avr单片机双通信C程序
将下面2个程序分别烧录进2个单片机中. 单片机U1 //ICC-AVR application builder : 2013-6-14 10:17:58 // Target : M16 // Crystal: 8.0000Mhz #include iom16v.h #include macros.h #define LED1_ON PORTD|=(1 PD4) #define LED1_OFF PORTD&=~(1 PD4) #define LED2_ON PORTD|=(1 PD5) #define LED2_OFF PORTD&=~(1 PD5) //共阳极数码管 unsigned char table ={0XC0,0X
[单片机]
亚表贴与表贴LED显示屏的区别
三合一表贴:就是指三个发光点封装在同一个点里面的合成。 三合一亚表贴:是指由三个方灯在一条直线上排列成一个像素,意思是说价格亚于表贴,但显示效果又和表贴的效果一样。 三合一分离表贴:是指红绿蓝三个发光点分开封装的,封装后又和亚表贴的一样排列成一个像素点。 led点阵显示模块可显示汉字、图形、动画及英文字符等;显示方式有静态、横向滚动、垂直滚动和翻页显示等。单块模块控制驱动12块(最多可控制24块)8X8点阵,共16X48点阵(或32X48点阵),是单块MAX7219(或PS7219、HD7279、ZLG7289及8279等类似LED显示驱动模块)的12倍(或24倍)!可采用“级联”的方式组成任意点阵大显示屏。显示效果
[电源管理]
AVR单片机常用库函数整理
AVR常用库函数整理 1. Character Type Functions - 字符类型函数 2. Standard C Input/Output Functions - 标准输入输出函数 3. Standard Library Functions - 标准库和内存分配函数 4. Mathematical Functions - 数学函数 5. String Functions - 字符串函数 6. BCD Conversion Functions - BCD 转换函数 7. Memory Access Functions - 存储器访问函数 8. Delay Functions - 延时函数
[单片机]
AVR单片机(学习ing)—(四)、ATMEGA16的定时/计数器—04
四、ATMEGA16的定时/计数器 四—(04)、0~5V数字电压调整器 PWM数字电压调整器 由于定时器2(就是上一个实验)只能构成8位的PWM,作为数字电压调整器其精度不够,这里用定时器1构成10位PWM来实现0~5V的数字电压调整值 显然精度提高了吗~你看看后面的小数点就懂得了~~呵呵,按键按的我手疼~~就不按了~~ 下面的是程序:(我以后只给出主程序~~) //------------------------------------------------------------------------------ //PWM数字电压调整器 //由于定时器2只能构成8位的PWM,作为数字电压调整器其精度不够,这里
[单片机]
<font color='red'>AVR单片机</font>(学习ing)—(四)、ATMEGA16的定时/计数器—04
解决AVR单片机烧写过程中弄错熔丝位而造成无法读写问题
在AVR单片机烧写的过程中,难免有弄错熔丝位的时候,结果是AVR单片机无法读写了!这时我们该怎么办呢,将昂贵的芯片丢掉,再用一块新的。其实这一般是没有必要的,写错熔丝位而导致单片机不能读写,一般不外乎(个人愚见)设设置错了时钟模式,比如说本来是用内部晶振的,结果弄成了外部晶振,而单片机的外部有没有接晶振,这时单片机没有了时钟信号,当然就没有办法在读写了,估计大家也猜到了怎么办了吧,是的,就是由外部提供时钟源。 有第一张图的时钟选择,我们就知道我们得准备多种时钟源: 高频石英/陶瓷晶振,这个直接接在 单片机 晶振位置就可以了,注意频率不要太高,4~5M的就可以了,不放心的话,接两个20P~30P的电容也行! 低频晶振,和
[单片机]
解决<font color='red'>AVR单片机</font>烧写过程中弄错熔丝位而造成无法读写问题
AVR单片机在蓄电池剩余电量测试仪中的应用
    摘要: 利用一代AVR单片机(AT90S8515)实现蓄电池剩余电量在线测量。该方法通过实时测量蓄电池内阻,推算出剩余电量。最后给出了实验结果。     关键词: 单片机 在线测量 蓄电池 剩余电量 蓄电池作为备用电源,已在计算机网络、通主、电力等领域得到了广泛的应用。蓄电沁的荷电量与整个供电系统的可靠性密切相关,蓄电池剩余电量睦高,系统可靠性越高,否则反之。对于一些重要的用电领域,例如信息处理中心,如果能在既不消耗蓄电池的能量,又不影响用电设备正常工作的条件下,实现蓄电池剩余电量的在线监测,将有重要的实际意义。近几年随着IT产业的迅速发展,电池的重要性越来越突出,对剩余电量精确预测的需求越来越迫切。
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved