基于51单片机的LED点阵显示屏系统的设计与实现毕业论文 下载本文

图3-10 74LSL64级连

构建大屏幕LED显示屏的另一种方法是将以较小的LED显示系统做为模块进行级连。如图3-11所示,由独立的LED显示系统组成一个大的LED显示系统。其中各子显示系统之间在功能和控制上都是相互独立的,将一幅大屏幕画面拆分为几块小画面再分别送入到各子系统中,各子系统同步显示便可以得到一幅大的画面。使用这种级连的办法可以避免51单片机晶振频率低的弱点,更容易实现大屏幕的显示。但这种方法仍然存在难点,一是各独立的子系统的通信和协调性要求更高了,如果要实现显示内容的实时性必须需要上位机不断更新显示内容则增加了上位机的通信数据量,逐个的单片机传送数据也会影响整个画面的更新速度;二是成本提高了。

在实际应用中通常采用内部扩展和外部级连联合使用的方法来构建大屏幕LED显示屏幕。即增加单个显示系统显示屏幕大小的同时又将单个的显示系统级连。详细硬件原理图见附录1。

第4章 系统软件设计

4.1 程序设计

系统软件采用C语言编写,按照模块化的设计思路设计。首先分析程序所要实现的功能,程序要实现串口通信,静态显示,动态显示三大功能。其功能结构如图2-4所示。通信程序接收上位机数据,交给主程序处理再通过控制程序选择不同的显示程序进行显示。

主程序的工作流程如图4-1所示:

图4-1 主程序流程图

程序开始时首先必须对单片机进行初始化,其中初始化的内容包括:中断优先级的设定,中断初始化,串行通信时通信方式的选择和波特率的设定,各IO口功能的设定等。初始化完成后程序进入待机状态等待中断的发生,该程序中主要用到了两个外部中断源和串行中断。外部中断源由按键的电平变化触发,外部中断主要功能是选择LED点阵显示屏的控制方式是由按键控制还是上位机控制和显示状态是静态显示还是动态显示。串行中断包括发送中断和接收中断都是由软件触发。中断产生后由预先初始化时设定跳转执行中断子程序。中断程序设定了LED点阵显示屏所要显示的内容和显示的方式,最后执行的是各种显示程序。按照设定的方式和内容显示出所需要的内容。

4.2 显示程序的设计

4.2.1 LED显示屏的显示方式

LED点阵屏显示方式主要由静态显示和动态扫描显示两种。

对静态显示来说,每一个发光二极管都需要一套驱动电路,一帧画面输入以后便可一劳永逸地显示,除非我们改变了显示内容,需要重新输出新的点阵数据.这种方式系统原理相对简单一些,但所需的译码驱动装量很多,引线多而繁杂,不便于大屏幕的制造,成本高,其可靠性也较低.

另一种动态扫描显示是把整个LED屏幕分成若干部分,每一幅画面的显示是显示完一部分后,又显示第二部分……直到显示完最后一部分又重新开始显示第一部分,重复循环进行.在重复扫描速度足够快的情况下,我们看到的就是一幅稳定

的画面.也就是说采用动态扫描显示需要不断进行画面的刷新.在这种方式下其显示驱动电路可重复利用,引线也大大减少,从而使硬件成本降低,且屏幕上的发光二极管轮流发光,使用时的耗电量大大降低.大屏幕的制造、维护要容易许多,可靠性也增加了.

两种显示方式的比较再结合51单片机IO口数量有限的原因决定采用动态扫描的方式进行显示。

动态扫描分为行扫描和列扫描两种方式区别在于选通端和数据输入端分别是行还是列。在该显示系统中扫描显示的工作原理如图4-2所示,先选通列然后再从行送入对应列的数据,这样从第1列到第16列循环往复,只要切换的速度足够的快利用人眼的延时特性就可以看见一幅稳定的画面。

选通第1列选通LED第1列16×16LED按数据导通相应行从数据中读取第1列对应的行数据选通第2列选通LED第2列16×16LED按数据导通相应行从数据中读取第2列对应的行数据选通第16列选通LED第16列16×16LED按数据导通相应行从数据中读取第16列对应的行数据 读取所需要显示的数据至显示寄存器图4-2 扫描显示程序原理图

4.2.2 点阵数据表达方式

数据是纵向的,一个像素对应一个位。8个像素对应一个字节,字节的位顺序是上高下低,比如从上到下8个点的状态是“*-----*-”(*为黑点,-为白点),则转换的字模数据是0x82(B1000_0010)。如图(4-3)所示,一幅16×16的点阵画面点阵数据按照B1B2B3……B31B32存储。所以一幅画面的数据量为32字节。画面显示时选通的第i列对应的数组元素为第i和i+16个元素[16]。

4.2.3 显示程序的设计

显示程序分为静态显示程序、左移显示、右移显示、上移显示、下移显示五种种显示方式。其中上下左右移动程序都调用了静态显示程序为子程序。静态显示程序流程图如图4-4所示:

图4-4 静态显示程序流程图

显示采用的是列扫描的显示方式,选通一列后按照列与数据元素的对应关系第i列对应的行数据为数组中的第i和第i+16个元素。将对应元素的由低至高位依次从端口输出具体做法为将元素向右逻辑移位后再与0X01相与,所得结果通过单片机端口输出到串并转换器的A端,锁存在锁存器里完成一列数据移位后再将其输出。如此依次循环选通各列来显示所需画面[17]。

开 始开 始读入显示数组读入显示数组显 示显 示显示数组元素在数组中的位置前/后移一位显示数组元素逻辑左/右移一位移位次数是否为16Y移位次数是否为16Y图4-5 左右移上下移程序流程图

动态显示程序流程如图4-5所示,根据显示数据的存储原理通过改变实际LED

列与数据逻辑列的方法来实现程序的左右移动。显示数据与列的对应关系为:第i列对应的数据为数组中i和第2×i个数据。所以当ULN2803选通时,而送入后一列的数据则相当于画面左移移位,同理送入前一列数据相当于右移一位。如此循环则产生一幅稳定运动的画面。

显示数组中,第1至16个元素的第8至第1位LED显示屏中的第1至第8行。同理第17至32个元素的第8至第1位LED显示屏中的第9至第16行。所以将元素数据进行逻辑位移便能产生上下移动的效果[18]。

4.3 通信程序的设计

系统采用串行中断的方式进行通信。MCS-51单片机的五个中断源两种类型:一类是外部中断源;另一类是内部中断源,包括两个定时器计数器(T0和T1)的溢出中断和串行口的接收和发送中断。MCS-51单片机设置了4个专用寄存器用于中断控制,分别为定时器控制寄存器(TCON),串行口中断控制器(SCON),中断允许控制寄存器(IE),中断优先级控制寄存器(IP)。编程时通过设置其状态来管理中断系统。

在编辑中断程序时首先是将中断控制寄存器(IE)初始化。其控制位分布如表。

NN