便捷式LED显示屏控制器的研究.docx
《便捷式LED显示屏控制器的研究.docx》由会员分享,可在线阅读,更多相关《便捷式LED显示屏控制器的研究.docx(35页珍藏版)》请在冰豆网上搜索。
便捷式LED显示屏控制器的研究
便捷式LED显示屏控制器的研究
1绪论
便捷式LED显示屏控制器又称基于USB的LED显示屏控制器,是我们综合LED显示屏控制器的发展和USB的优点提出的一项新型的显示屏控制系统技术。
1.1课题研究的背景和意义
LED显示屏是利用发光二极管点阵模块或像素单元组成的大面积显示屏幕,目前,其广泛应用于银行、医院、体育场馆、车站、高速公路、广场等公共场所的信息显示和广告宣传。
传统的LED显示屏的信息输入只能通过数据线与专用电脑直接连接来进行,或者是由电脑通过无线或有线数据网络加控制电路的方式实现。
这些方式存在一定的缺点和应用局限,如专用电脑控制方式增加了系统成本,而且电脑需要一直处于开机状态,控制系统本身功耗较大;而通过网络实现控制的方式,网络初期投资和运行成本比较大[1]。
USB(通用串行总线)是INTEL、DEC、MI2CROSOFT、IBM等公司联合提出的、最近几年逐步在PC领域广为应用的新型接口技术。
USB接口通用性好、实时性强、传输方式多样、成本低、支持即插即用、易于扩展且便于使用,这些优点使其得到许多硬件厂商的青睐。
目前各种类型的USB产品已大量涌入市场,同时也被广泛地用在PC机及嵌入式系统中。
USB的普及使其成为在各类便携式设备中进行数据传输的一种较好的选择。
基于此,本文提出了基于USB的LED显示屏控制系统,它具有传输速度快、更新信息方便、设备安装和配置容易、易于扩展、能够采用总线供电、使用灵活等主要优点;便于携带,基本上完善了普通LED点阵显示牌的功能,具有良好的应用前景和很高的实用价值[2]。
与显示屏的发展密切相关的是其核心技术即显示屏控制系统技术的革新。
当前市场上流行的脱机LED显示屏控制系统的特点可以概括为两点:
第一,人机交互系统由计算机控制。
每一种显示屏控制系统对应着一种控制软件,LED显示屏用户将要显示的文本或图片通过上位机程序输入计算机,然后由上位机程序提取文本或图片的点阵信息并保存;第二,通讯传输系统为有线控制,采用有线电缆作为传输介质——多数为RS232总线或是RS485总线,根据PC机配置的标准串行接口,进行电平转换。
计算机通过上述总线将点阵信息传送给显示屏扫描控制系统扫描显示。
上述特点造成了显示屏对计算机和通信线路的依赖性,无形之中就提高了使用成本,给用户带来了不便,某些用户甚至为使用显示屏而不得不专门配备一台计算机,或是要在不方便架设线路的地方铺设专用线路。
这对于某些小型显示屏用户而言大大提高了其使用成本,某些用户甚至不得不为此而忍痛割爱,从而极大地影响到LED显示屏使用的普及。
本文提出了一种新的设计方案,即在显示屏控制系统原有串口的基础上扩展标准USB—HOST接口,将计算机上相关文件拷到USB存储设备(U盘/USB硬盘),然后USB存储设备插到LED显示屏的控制系统上,控制系统通过该接口直接读取USB存储设备,完成对LED显示屏的文本和图像输入,使LED显示屏与计算机的信息交流更方便。
该系统操作简单,在一些小型且需要不断改变显示内容的LED显示屏系统中具有较高的性价比,大大缩小了设备的占用空间,而且摆脱了线缆的束缚和计算机的控制。
目前USB存储设备这类电子信息存储媒介已逐步普及,使用USB存储设备作为LED显示屏信息内容的传递媒介,将会给LED显示屏特别是小型LED显示屏带来一次更深入的普及[4]。
1.2本课题的研究方法和主要工作
1.2.1本课题采用的研究手段
通过对各种资料的查阅,完成对本课题的各部分知识的全面了解以及对课题原理的掌握。
然后初步完成对课题的模块设计、理论测试、调试和改良,最后通过实验、仿真分析进一步确定最终结果。
研究流程如图1-1所示。
图1-1工作流程图
1.2.2本课题要完成的任务
本课题需要完成主程序模块的设计、USB主控器模块的设计、显示屏扫描模块的设计、实时钟模块设计、外部存储模块设计和按键指示模块设计。
满足U盘内数据的读写、字模提取和写入、LED显示以及键盘扫描等子程序运行需求。
即单片机控制系统的软件设计;LED点阵显示系统的软件设计;基于USB接口的单片机控制系统的软件设计;PC机与单片机实现数据通信的模块设计。
确定系统实现方案,并绘制出相应的系统原理示意图,软件流程图;结合另一个同学所做的硬件部分的设计进行相应的软件部分设计,具体包括:
主模块及各子模块程序流程图、程序开发过程文档、程序清单、系统调试等。
1.3拟解决的关键技术
本课题将解决以下问题:
1)如何实现对U盘数据的读取,即设计U盘数据读取程序;
2)如何实现将读取的数据通过LED屏显示,即设计显示屏扫描程序;
3)将上述两个方面结合到一起,即实现读取和显示的两方面功能。
2便捷式LED显示屏控制系统的总体设计
2.1控制器系统总体结构设计
根据所确定的方案,此控制系统主要包括:
实现对U盘数据的读取及存储的模块设计和实现所读取的U盘数据在LED屏上显示的模块设计。
前者通过单片机、USB转换协议和数据存储器实现。
后者通过单片机、数据存储器和LED屏驱动电路实现。
该控制系统的结构框图如图2-1所示。
图2-1便捷式LED显示屏控制器系统框图
图中,虚线部分为USB接口LED显示屏控制系统的结构框图,其中主要包含:
LED屏驱动模块、单片机、实时钟模块、USB协议转换电路、按键、复位、电源等。
其外围部分连接到U盘接口和LED屏。
2.2U盘数据读取模块设计
该部分电路用于对U盘数据的读取以及存储。
其由单片机及其外部数据存储器的扩展电路、电源电路、串口下载电路、滤波电路、USB协议转换电路和晶振与复位电路等几个部分组成。
主要完成对U盘数据的读取以及存储的功能。
各部分的模块设计将在第三章详细说明。
该部分电路框图如图2-2所示。
图2-2U盘读取电路框图
2.3LED屏驱动模块设计
从理论上说,不论现实图形还是文字,只要控制与组成在这些图形或文字的各个点所在的位置相对应的LED器件发光,就可以得到我们想要的显示结果,这种同时控制各个发光点亮灭的方法称为静态驱动显示方式。
例如16x16的点阵共有256个二极管,显然单片机没有这么多的多口,如果我们采用锁存器来扩展端口,按8位的锁存器来计算,16x16的点阵需要32个锁存器,这个数字很庞大,实际应用中的显示屏往往要大得多,这样在锁存器上花的成本将是很庞大的数字。
因此在实际应用中的显示屏几乎不采用这种设计,而采用另一种称为动态扫描的显示方法。
动态扫描的意思简单地说就是逐行轮流点亮,这样扫描电路就可以实现多行的同名列公用一套驱动器。
先送出对应第一行发光管亮灭的数据并所存,然后选通第一行并使其点亮一定的时间,然后熄灭;然后第二行;以此类推,反复轮回。
当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能够看到显示屏上稳定的图形了。
该部分电路用于将读取的U盘数据通过LED屏显示出来。
主要完成将存储在外部扩展存储器中的数据通过LED屏显示出来的功能。
各部分的电路设计将在第三章详细说明。
该部分电路框图如图2-3所示。
图2-3LED显示屏驱动电路原理框图
2.4存储器模块设计
LED点阵显示屏是利用连续刷屏来实现显示所要求内容的,单片机从U盘读取数据的速度比较慢,LED显示屏速度跟不上。
要解决这个难题,我们想到了采用74HC573锁存器和62C256静态数据存储器RAM对单片机存储空间进行扩展。
外部数据存储器62C256为32K字节的8位数据宽度的RAM存储器,62C256的单片机寻址范围为0000H~7FFFH,可用来进行单片机的外部数据存储器的扩展。
存储器相当于一个中转站,单片机从U盘读取数据写入存储器,存储器再把数据显示在LED屏上。
该部分电路框图如图2-4所示。
图2-4存储器模块原理框图
2.5本章小结
传统的LED显示屏的信息输入只能通过数据线与专用电脑直接连接来进行,或者是由电脑通过无线或有线数据网络加控制电路的方式实现。
这些方式存在一定的缺点和应用局限,如专用电脑控制方式增加了系统成本,而且电脑需要一直处于开机状态,控制系统本身功耗较大;而通过网络实现控制的方式,网络初期投资和运行成本比较大。
通过本章的介绍,基于可移动存储器的多路LED显示屏控制系统,采用体积小、性能高的微处理器组成前级驱动及控制电路,可靠地读取体积小、容量大的移动存储器(U盘)中的内容。
USB接口的LED显示屏是具有很大的开发意义,通过U盘来更改LED屏显示的汉字是一个质的飞跃,给我在日常生活生产中使用LED屏带来了很大的方便,而且也能使LED屏的使用越来越普及化。
3便捷式LED屏控制系统的软件设计
如上一章中所述,便捷式LED显示屏控制器系统主要分为读U盘模块设计、LED点阵显示模块设计、存储模块设计。
本章主要完成控制器系统的软件设计。
整个软件设计主要分以下7个模块:
主程序模块、U盘数据读取模块、LED点阵显示模块、存储器模块、实时钟模块、数据通信模块、按键输入模块等。
下面对各模块的设计进行阐述。
3.1软件程序编辑语言及开发环境选择
以往的单片机系统,其控制程序大多是用相应单片机的汇编指令编制,虽然其执行效率高,但其可读性和可移植性却较差,直接影响其软、硬件的扩展和升级[4]。
C语言早期用于编写UNIX操作系统,它是一种结构化的语言,可产生紧凑代码。
C语言可用许多机器级的函数直接控制和操作单片机的硬件而不必通过汇编语言,与汇编语言相比,C语言主要有以下一些优点。
·不要求了解单片机的指令系统,仅要求对其存储器结构有初步了解;
·寄存器分配、存储器寻址及数据类型等细节可由编译器管理;
·程序由不同的函数构成,便于程序的结构化和模块化;
·程序的可读性及可移植性较高;
·关键字及运算符可用近似人的思维方式使用;
·程序编制及调试时间显著缩短,大大地提高了编程效率;
·C语言提供的库包含许多标准的子程序,具有较强的数据处理能力;
C语言是一种非常便于使用的计算机高级编程语言,使用C语言进行单片机尤其是MCS-51系列单片机的开发具有极大的优势。
因此,国外从20世纪80年代中后期就已经开始了将C语言向8051单片机上移植的步伐。
经过Keil/Franklin,Archeades,IAR,BSO/Tasking等公司的努力,到了20世纪90年代,针对8051的C语言开始日趋成熟,逐渐成为专业化的实用高级语言。
上述公司都各自开发了基于8051单片机的C语言编译器,其中Keil公司开发的编译器以其使用方便、生成代码紧凑及支持几乎所有基于8051的单片机等优点,并完整的实现了ANSI的C语言标准,从而成为当今使用最为广泛的MCS-51系列单片机C语言开发软件。
用C51编制程序时,同样应遵循结构化、模块化的设计方法。
因此,在编程时,可将任务分成若干模块,对每个模块分别进行编制及调试,最后有机结合成一个完整的控制程序。
本设计中,编程语言采用高级与汇编语言混合编程的形式,程序主体采用C51语言编写,但在对速度要求苛刻的部分采用汇编语言编写。
开发环境选用目前流行的KeiluVision3。
KeilSoftware公司推出的KeiluVision3是一款可用于多种8051MCU的集成开发环境(IDE),该IDE同时也是PK51及其它开发套件的一个重要组件。
除增加了源代码、功能导航器、模板编辑以及改进的搜索功能外,uVision3还提供了一个配置向导功能,加速了启动代码和配置文件的生成。
此外其内置的仿真器可模拟目标MCU,包括指令集、片上外围设备及外部信号等。
uVision3提供逻辑分析器,可监控基于MCUI/O引脚和外设状态变化下的程序变量。
uVision3提供对多种最新的8051类微处理器的支持,包括AnalogDevices的ADuC83x和ADuC84x,以及Infineon的XC866等。
3.2主程序模块设计
3.2.1主程序模块实现的功能
主程序模块实现的功能为:
单片机能根据相应的按键扫描控制进入对应的应用程序。
3.2.2程序设计思想及说明
本设计是将U盘中的数据按要求显示到LED显示屏上,要将两者联系在一起,首先离不开单片机。
U盘和单片机可通过CH375芯片衔接,LED显示屏则可以利用串行口接收来自单片机的信息。
主要使用的语句:
A.while
(1)
{
.....
}
这是个死循环语句,通过这个语句不断的调用键盘函数,判断是否有按键按下。
B.if语句的3种形式
(1)if(...)语句
(2)if(...)语句1else语句2
(3)if(...)语句1
elseif(...)语句2
elseif(...)语句3
┆
elseif(...)语句m
else语句n
if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。
C.switch(表达式)
{
case常量表达式1:
语句序列1
case常量表达式2:
语句序列2
...
case常量表达式n:
语句序列n
default:
语句序列n+1
}
Switch结构也成为标号分支结构,当switch的判断表达式的值与case常量表达式i的值相等,则执行相应的语句序列。
单片机主程序流程图如图3-1所示。
图3-1主程序流程图
开发板通电后,单片机内部进行初始化,并延时等待初始化结束,然后反复对键盘进行扫描,判断单片机接下来要完成的操作,即判断接下来进入读U盘程序模块,LED显示模块,实时钟校验模块还是加减计数模块。
主程序中关键程序部分:
while
(1)
{
for(i=0;i<5;i++)
{
Key_GET();
}
switch(Key)
case0x00:
delay_ms();
DISKREAD();
break;
case0x01:
Display();
break;
case0x02:
TIME();
break;
case0x03:
PLUS;
break;
case0x04:
DECREASE;
break;
}
3.3U盘数据读取程序设计
3.3.1USB接口读取U盘数据的方案选择
USB接口对U盘的读取方案主要分为两种:
SL811方案和CH375方案。
1)SL811方案:
SL811HST是一种USB主机控制器,它能与全速或低速USB通信。
主要特性有:
a.完全与USB1.1规范兼容;b.支持USB主机和设备两种模式;c.标准数据/地址复用的8位双向数据端口;d.芯片内部含有256字节的RAM数据缓冲区,其中包含控制寄存器和数据缓冲区;e.地址自动递增模式,节省内存读/写周期;f.3.3V工作电压,接口兼容5V电平;g.自动产生SOF和CRC5/16。
2)CH375方案:
CH375是一个USB总线的通用接口芯片,支持USB-HOST主机方式和USB-DEVICE/SLAVE设备方式。
在本地端,CH375具有8位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到单片机/DSP/MCU/MPU等控制器的系统总线上。
在USB主机方式下,CH375还提供的串行通讯方式,通过串行输入、串行输出和中断输出与单片机/DSP/MCU/MPU等相连接。
CH375是把USB、BULK、SCSI文件系统的东西都封装起来,提供库文件给用户调用其中的程序,其开发速度非常快。
CH375读取U盘数据的原理框图如图3-2所示。
图3-2CH375读取U盘数据原理框图
本设计采用CH375方案处理U盘数据读取的问题。
3.3.2U盘数据读取程序设计说明
对于USB存储设备,CH375内置了相关协议,通常情况下,外部单片机不需要编写固定程序,就可以直接工作。
CH375并口信号线包括:
8位双向数据总线D7~D0、读选通输入引脚RD#、写选通输入引脚WR#、片选输入引脚CS#、中断输出引脚INT#以及地址输入引脚A0。
如表3-1所示。
表3-1CH375工作方式选择
CS#
WR#
RD#
A0
D7~D0
对CH375芯片的实际操作
1
X
X
X
X/Z
未选中,不进行任何操作
0
1
1
X
X/Z
虽然选中但无操作,不进行任何操作
0
0
1/X
1
输入
向CH375的命令端口写入命令码
0
0
1/X
0
输入
向CH375的数据端口写入数据
0
1
0
0
输出
从CH375的数据端口读出数据
0
1
0
1
输出
从CH375B的命令端口读取中断标志,位7等效于INT#引脚
主要使用的命令见表3-2。
如果命令的输出数据是操作状态,则参考表3-3。
表3-2CH375命令代码及命令用途
代码
命令名称
输入数据
输出数据
命令用途
01H
GET-IC-VER
版本号
获取芯片及固件版本
02H
SET-BAUDRATE
分频系数
(等1mS)操作状态
设置串口通信波特率
分频常数
03H
ENTER-SLEEP
进入低功耗睡眠挂起状态
05H
RESET-ALL
(等40mS)
执行硬件复位
06H
CHECK-EXIST
任意数据
按位取反
测试工作状态
0AH
GET-MAX-LUN
数据38H
最大单元号
获取USB存储设备的最大逻辑单元号
0BH
SET-DISK-LUN
数据34H
设置USB存储设备的当前逻辑单元号
逻辑单元号
0BH
SET-PKT-P-SEC
数据39H
设置USB存储设备的每扇区数据包总数
每扇区包数
15H
SET-USB-MODE
模式代码
(等20uS)操作状态
设置USB工作模式
16H
TEST-CONNECT
(等2uS)连接状态
检查USB设备的连接状态
17H
ABORT-NAK
放弃当前NAK的重试
22H
GET-STATUS
中断状态
获取中断状态并取消请求
28H
RD-USB-DATA
数据长度
从当前USB中断的端口缓冲区读取数据块
数据流
2BH
WR-USB-DATA7
数据长度
向USB主机端点的输出缓冲区写入数据块
数据流
51H
DISK-INIT
产生中断
初始化USB存储设备
53H
DISK-SIZE
产生中断
获取USB存储设备的容量
54H
DISK-READ
LBA地址
产生中断
从USB存储设备读数据块
扇区数
55H
DISK-RD-GO
产生中断
继续USB存储设备的读操作
56H
DISK-WRITE
LBA地址
产生中断
向USB存储设备写数据块
扇区数
57H
DISK-WR-GO
产生中断
继续USB存储设备的写操作
58H
DISK-INQUIRY
产生中断
查询USB存储设备的特性
59H
DISK-READY
产生中断
检查USB存储设备是否就绪
5AH
DISK-R-SENSE
产生中断
检查USB存储设备的错误
表3-3CH375操作状态和状态说明
状态代码
状态名称
状态说明
51H
CMD-RET-SUCCESS
操作成功
5FH
CMD-RET-ABORT
操作失败
U盘数据读取程序流程图如图3-3所示。
图3-3U盘读取数据流程图
首先初始化,然后通过检测灯判断U盘是否接入CH375,并发送是否有需要读取的文件,没有则发送错误,否则开始读文件,将读取的数据传回单片机内,单片机将所读的数据存入外接存储器内,读到文件底层时发送读完信号,关闭USB接口,停止读取数据。
U盘初始化部分程序:
ch375b_write_cmd(CMD_DISK_INIT);//初始化USB存储器
status=ch375b_wait_interrupt();//等待中断并获取状态
if(status!
=USB_INT_SUCCESS)
{
returnstatus;
}
ch375b_write_cmd(CMD_DISK_SIZE);//获取USB存储器的容量
status=ch375b_wait_interrupt();
if(status==USB_INT_SUCCESS)
{
return0x0;//U盘已经成功初始化
}
3.4LED点阵显示模块设计
3.4.1点阵显示方式的选择
点阵显示方式有串行方式显示和并行方式显示。
1)串行方式显示。
这种方式可同时显示4个16×l6点阵汉字或8个16×8点阵的汉字、字符或数字。
点阵显示屏每个单元由16个8×8点阵LED显示模块、行信号选择译码器74HC138、数据移位寄存器74HC595和行驱动器、列驱动器组成。
单元显示屏可以接收控制器(主控制电路板)或上一级显示单元模块传输下来的数据信息和命令信息,并可将这些数据信息和命令信息不经任何变化地再传送到下一级显示模块单元中,因此显示屏可扩展至更多的显示单元,用于显示更多的内容。
此方案为点阵显示屏系统中比较常用的,所用器件也比较常用,容易买到。
但是它存在一个致命的缺点,就是刷新速度不够快。
如果要驱动64列点阵显示,通用51单片机会比较吃力,出现比较严重的闪烁停滞现象。
此外,要实现文字的左右移动和调整移动速度等功能,都会给软件设计带来较多困难。
2)并行方式显示。
可以通过锁存器芯片来扩展I/O口,达到控制LED点阵的64个列线的目的。
方案中运用16片锁存器74HC573来组成8组双缓冲寄存器,驱动LED点阵的8组列线,用4/16译码器74HC595对LED点阵的16行进行扫描。
在送每一行的数据到LED点阵前,先把数据分别送到第一级的8个74HC573芯片,然后再给第二级的8个74HC573送锁脉冲,数据一起输出到LED点阵列中,这样就避免了各行数据显示不同步问题。
由于并行数据传输速度比串行快,所以字符闪烁的问题得到较好地解决,文字左右移动也比较容易控制。
综上所述,本设计最终选择了并行方式显示。
图3-48*8点阵
图3-4是一个8乘8的点阵图。
要显示红绿两种颜色的光,每个点都由红绿两个发光二极管并联组成[12]。
3.4.2程序设计思想及说明
LED点阵显示牌由多个LED点阵模块组成。
显示方式采用1/16扫描方式,显示点阵的一行对应一路行选通信号,各行的同一列共用一个列选通信号。
当在LED点阵上显示汉字时,只要在行、列显示数据控制下让显示牌上相应的发光二极管点亮就可以了,一次点亮一行,依次点亮各行,利用视觉暂留原理,只要速度足够快就会产生连续的视觉效果[14]。
LED点阵显示功能主要是通过单片机向74HC595传输数据来实现的。
实现74HC595传输数据程序如下:
voidsenddata(UINTdatah,UINTdatal)
{
for(i=0;i<16;i++)
{
clk595=0;
m=datah;//行为高电平驱动
n=datal;//列为高电平驱动
m&=0x0001;//送最低位
n&=0x0001;
datah595=(m==0x0001);//每一周期,同时送出行和列的1bit串行数据
datal595=(n==0x0001);
da