电子文章 | 电子资料下载 | 家电维修 | 维修资料下载 | 加入收藏 | 全站地图
您现在所在位置:电子爱好者维修技术维修教程知识电子制作也谈单片机LED显示驱动

也谈单片机LED显示驱动

09-08 11:56:05 | http://www.5idzw.com | 电子制作 | 人气:616
标签:电子小制作,http://www.5idzw.com 也谈单片机LED显示驱动,http://www.5idzw.com


b.  程序架构和实现


1. 扫描模块的实现:由于LED的扫描驱动是一个重复的不间断的过程,自然,定时中断是最好的实现方法,其流程如图6所示,其中BufFPt用于指向当前的显示缓冲区,Ai则为当前所需显示的LED组的地址编号,从0到N(N为总的LED组数);


2. 刷新模块的实现:在MCU的程序设计中,一般将此模块置于16Hz的定时中断中(若主程序的循环周期不固定且最大的循环时间大于1/10秒时,常采用此架构)或主程序循环体中(此种情况主要时针对MCU时钟比较高的场合或不需考虑显示延时的情况下),通过检测对应的消息来决定其是否需要执行数据的刷新。以跑步机的设计为例,其功能流程如图7所示;

3. 字符、点阵发生器:由于在一些实际的应用中,可能的显示内容原则上是可预知的和有限的,特别是汉字的显示,因此其主要是通过定义相应的点阵来保存各种需要显示数据。为了便于程序的设计,一般需将其按照一定的排列规则来进行定义,同时也需要为各个需要显示的字符和图符进行编码,编码的规则必须有利于程序的设计和提高代码的效率,以求能够采用统一的查表指令来实现。 

图6


注:上述的流程只是一个原理性的程序说明,在实际的应用中,需要根据MCU的特点及具体的硬件设计来进行程序的设计与简化。比如:在实际的项目中有8x8(或小于8x8)个LED需要驱动,而且所选的MCU又是8位或16位的,则此时的地址线的扫描将变得非常的简单,只要建立字节变量Ai,其初始值为0x01,然后在每次中断处理程序中需将Ai直接输出到LED扫描线所对应的IO口即可,随后将Ai左移一位,对8x8 LED情况,当Ai=0时,表示一遍扫描完成,此时再将Ai设为0x01即可。对于显示的缓冲区的分配,同样可以根据实际的软件设计来分配具体的RAM地址空间,以进一步提高程序的执行效率。记住,由于LED的扫描需要占用较多的MCU时间,因此在进行扫描驱动的程序设计时,需要尽可能采用简洁高效的代码,以便提高MCU的工作效率。举例来说,假如需驱动8x8 LED,根据前面所讲的要求,所需的定时器的中断频率必须是大于等于8x32,即256Hz,若在此驱动代码中多增加一条语句,则MCU每秒就需要多执行256条代码,由此可见高效的代码对于LED驱动程序来讲是多么重要,特别是当MCU的时钟不够快时!

上一页  [1] [2] 

,也谈单片机LED显示驱动
关于《也谈单片机LED显示驱动》的更多文章