【《基于单片机的LED点阵屏控制系统设计》14000字】_第1页
【《基于单片机的LED点阵屏控制系统设计》14000字】_第2页
【《基于单片机的LED点阵屏控制系统设计》14000字】_第3页
【《基于单片机的LED点阵屏控制系统设计》14000字】_第4页
【《基于单片机的LED点阵屏控制系统设计》14000字】_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

引言LED点阵显示屏是使用发光二极管组成,通过控制LED灯的亮灭来显示文字、图形、动画等各种信息的显示屏幕,通常由显示模块、\t"/item/LED%E7%82%B9%E9%98%B5%E5%B1%8F/_blank"控制系统及\t"/item/LED%E7%82%B9%E9%98%B5%E5%B1%8F/_blank"电源系统组成,具有耗电少、使用寿命长、成本低、亮度高、故障少、可靠耐用、绿色环保、控制灵活等特点。LED显示屏制作简单,安装方便,在我们日常生活中随处可见,广泛应用于各种公共场所,如证券交易/金融信息的显示、车站机场的车次航班显示、道路交通信息显示、广告媒体等诸多领域,具有广泛的应用前景。LED显示屏产生于二十世纪七十年代,起初只能简单的显示数字、文字。但随着技术的发展和发光二极管颜色的多样化,二十世纪末LED显示屏户外全色显示已经成为现实。目前,小间距LED显示屏的正在逐步发展。小间距LED显示屏在无缝拼接、画面表现、使用成本诸多方面都显示出优越性,性价比更高,对DLP和LCD的替代效应日益增强。同时,随着小间距LED显示屏技术的成熟,LED显示屏的应用正在将逐渐从室外超大尺寸显示应用走向室内,各类异型LED显示屏创新发展,依赖于技术创新,LED显示技术与艺术设计的结合为行业创造了更大应用空间。未来,LED异型屏的市场需求会越来越大,将有望与现代化装饰、景观、照明等搭配组合,形成更美观的创意显示设备。LED显示屏发展至今,已经在人们生活中起到了重要的作用,其造价低,以及屏幕尺寸大,可视性好等特点,使得其在以后的发展也会越来越广泛的。尤其在照明领域,LED灯因为绿色环保、节能等特点,正在进行蓬勃的发展,而半导体照明产业的发展更为LED显示产业带来良好契机。与一般LCD显示屏不同的是,LED显示屏并没有自带字库,如果想要在LED显示屏上显示特定的字符,就需要获取该字符的字模数据再将其显示在LED显示屏中。对于传统的LED点阵屏来说,将需要显示的字模数据直接存储在单片机程序中,但通过这种方法只能显示特定的字符,如果单片机中没有我们想要显示的字模数据,则无法进行显示。所以为了实现方便快捷更新LED显示屏中的数据,本设计编写了上位机软件,通过上位机软件对单片机进行显示内容与显示状态的控制。同时,本设计对LED显示屏进行防水封装,使其能工作在水下环境中,扩展了其使用场景。

LED点阵屏显示原理LED点阵屏是由一个个发光二极管组成的,通过控制LED灯亮灭来显示文字、\t"/item/LED%E7%82%B9%E9%98%B5%E5%B1%8F/_blank"图片、动画等。\t"/item/LED%E7%82%B9%E9%98%B5%E5%B1%8F/_blank"LED点阵显示屏因为制作简单,安装方便,在各种\t"/item/LED%E7%82%B9%E9%98%B5%E5%B1%8F/_blank"公共场合中被广泛应用。LED点阵的显示主要分为静态显示和动态显示两种。静态显示原理简单、控制方便,但硬件接线非常复杂,每一个灯都需要一根单独的控制线。所以我们一般采用动态显示方式,可以极大缩减信号线的数量。LED点阵屏既可代替数码管显示数字,也可显示各种文字及符号,具有很强的实用性。例如5×7点阵就可以显示数字、字母等ASCII中的符号,8×8点阵可以用于显示简单的汉字,16×16点阵即可显示标准的汉字字符。LED点阵模块图2-1为常见的8×8LED点阵屏的内部电路结构,它共由64个\t"/item/LED%E7%82%B9%E9%98%B5%E5%B1%8F/_blank"发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,将发光二极管的阳极与阴极按照如图2-1所示的方法首尾相连,然后通过向行控制线和列控制线发送数据,即可实现字符的显示。如果想点亮第一个点,那么只需令Y0=1,X7=0即可。图STYLEREF5\s2-SEQ图\*ARABIC\s518×8LED点阵内部结构图动态显示对于图2-1所示的LED显示屏来说,每次只能显示一行或者一列数据,如果想要显示一幅完整的8×8的字符图片,则需要使用动态显示的操作方式。动态显示采用扫描的方式工作,从上到下逐次不断地对显示屏的各行进行选通,同时又向各列送出数据信号,通过不断的循环操作,就可显示各种图形或文字信息。动态显示是利用了人眼的视觉暂留特性,将连续几帧的画面高速播放,当帧速率大于24帧每秒时,在人眼看来就是一个完整的、相对静止的画面。

以8x8点阵模块为例,如果想要显示字符"B",则需要通过行控制线每次选中一行,然后通过列控制线输入该行的数据信息,经过8帧以后,就能完整的显示出字符"B",显示过程如图2-2所示。其中相邻两帧之间的时间间隔不得小于1/24秒。图STYLEREF5\s2-SEQ图\*ARABIC\s52动态扫描显示字符“B”的过程

总体设计与分析设计的内容及指标设计并实现一个可显示英文、汉字、任意字符和形状的点阵屏,并进行防水封装,具有以下功能:(1)16×32点阵模块(2)显示英文、汉字、任意字符和形状(3)能够右左和向上滚动显示。(4)其他动画功能。(5)循环播放。(6)RS232接口。(7)上位机/单片机输入显示内容。(8)高亮度,防反光,防水密封。系统总体设计从总体上说,本设计主要分为三个部分,硬件部分、软件部分以及上位机部分。系统框图如图3-1所示。硬件部分包括主要包括单片机、LED显示屏以及TTL-RS232电平转换电路,软件部分主要包括动画处理、动画显示以及串口通信部分。上位机部分主要包括串口通信部分以及字模提取部分。通过上位机发送显示数据,经过电平转换后发送到单片机中并保存,然后单片机再调用显示数据进行动画的处理将显示信息传给LED显示屏。图STYLEREF5\s3-SEQ图\*ARABIC\s51系统框图方案论证与比较LED显示屏的选择要制作一个32x16大小的LED点阵屏,通常使用的方法为将8块8x8大小的LED屏幕拼在一起,但这种方法组合起来的LED屏所占的面积较大,同时引脚太多,还需要额外的译码器芯片进行数据传输的控制,进一步增大了硬件部分的体积,不太符合本设计的要求。所以本设计采用的是现成的LED点阵模块,该模块所占空间较少,仅有80mm×40mm大小,同时采用串口通信向LED显示屏发送数据,与前一种方法相比,降低了电路的复杂程度。字模数据的获取与存储本设计为32x16大小的LED点阵屏,可以显示2个16×16大小的字符,想要在LED显示屏上显示字符,就需要获得对应字符的字模数据。一个16×16大小的字符拥有256个像素点,也就是说一个字符的字模数据需要占用32字节的内存。因为要实现任意字符的显示,以GB2312中的字符为例,其中总共包含了6763个汉字和682个非汉字图形字符,则至少需要238KB大小的存储空间,对于大部分单片机来说都不具备这么大的存储空间,所以需要外加存储器进行字模数据的存储,或者使用现成的字库芯片,但这显然增加了硬件设计的成本,而且这两者都还拥有一个显著的缺点,那就是通用性不强,说过说想要更换显示的字体大小或者字体样式,都要另外寻找新的字模数据文件将其导入,增加了使用难度。本设计抛弃了这种存储固定字模设计的方法,使用上位机软件进行字符的取模操作,可以选择任意字体、字号以及取模方式,大大提高了泛用性。不过通过这种方式获取的字模也存在一定的问题,前面通过硬件方式获取的字模数据是存储在ROM(Read-OnlyMemory,只读存储器)中,即使掉电以后数据依旧存在。但通过软件获取的字模数据,经过上位机传输到单片机中,以变量的形式存储在RAM(RandomAccessMemory,随机存储器)中,掉电后数据则会消失。因为在程序运行中,不能直接对ROM进行写入操作,所以需要使用具有EEPROM的单片机来进行字模数据的存储。与ROM相同,EEPROM可以掉电存储数据,但是通过ISP(InSystemPrograming,在系统编程)/IAP(InapplicaTIngPrograming,在应用编程)技术,可以在用户程序运行时对其进行数据的写入、读取和擦除。单片机的选择因为本设计需要用到2个串行口进行通信,并且需要EEPROM进行字符数据的存储,所以采用的单片机型号为STC12C5A60S2单片机。该单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,其指令代码完全兼容传统8051单片机,但运行速度快了8至15倍。对于传统的8051单片机来说,一个机器周期由12个时钟周期组成,而对于该单片机,一个机器周期仅由一个时钟周期组成,使得速度快了8-12倍。同时,该单片机具有两个采用UART(UniversalAsynchronousReceiver/Transmitter,异步收发传输器)工作方式的全双工串行数据接口,通过这两个串行接口,可以分别用来与上位机以及LED显示屏之间传输数据。此外,该单片机具有1K大小的EEPROM,可以用来存储动画的设置信息以及显示字符的字模数据。硬件设计单片机系统电路设计单片机系统电路主要包括单片机、电源、晶振电路以及复位电路等部分。单片机介绍本设计使用的单片机为STC12C5A60S2单片机,该单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,因为其完全兼容传统51内核,因此使用的编译器和指令代码都和传统51单片机相同,使用起来比较方便。该单片机的引脚如图所示。图4-1STC12C5A60S2单片机引脚图在LED显示屏的显示内容处理中,涉及到大量的计算,因此对单片机有一定的运算速度要求。与传统的51单片机相比,该单片机为单时钟/机器周期的单片机,具有较高的处理速度,可以很好的实现动画显示中各种移动算法。而且具有两个串行口,分别用来进行与上位机和显示屏之间的数据交换。此外,该单片机利用ISP/IAP技术,可将内部DataFlash当EEPROM使用,可以掉电存放显示屏的各种设置参数、字模信息等数据。复位电路通过单片机的数据手册可知,将单片机的RST复位管脚拉高并维持至少24个时钟加10us后,单片机将进入复位状态,然后将RST复位管脚拉回低电平后,单片机结束复位状态并从用户程序区的0000H处开始正常工作。硬件复位方式一般分为上电复位和手动按键复位两种,上电复位是在单片机上电瞬间电容进行充电来实现复位,手动复位是在程序运行出错时人为通过按键进行单片机的复位。复位电路如图4-2所示。图4-SEQ图\*ARABIC\s52复位电路本设计中,复位电路采用的是一个10uF的电解电容和一个10kΩ电阻串联而成,同时在电容两端串联一个按键开关。对于RC电路来说,电容充电时两端电压的计算公式为 UC=U×(1−e−tτ) (其中U为电源电压,电容放电时两端电压的计算公式为 UC=Uo×(1−e−tτ其中Uo为电容电压,时间常数τ的计算公式为 τ=RC (4-SEQ4-\*ARABIC3)根据单片机的数据手册可知,当I/O口接收到2V以上的电压则视为高电平,接收到0.8V以下的电压则视为低电平。根据公式REF_Ref17235\h4-1和公式REF_Ref17258\h4-3可以得出,在单片机上电0.09s后,电容两端的电压将上升到3V,同时电阻两端的电压将从5V减小至2V,所以在0.09s内,RST引脚所接收到的电压是5V~2V,其中高电平的持续时间大约为0.09s左右,然后随着电容充满电,RST引脚接收到电压逐渐降为0,单片机进行复位操作。同理,在按下按键之后,电容被短路,开始释放电量,根据公式REF_Ref17817\h4-2和公式REF_Ref172584-3得出,经过0.09s左右释放至3V,电阻两端电压增加至2V,RST引脚接收到高电平,单片机进行复位。晶振电路单片机如果需要正常工作,需要有时钟脉冲源。本设计所用单片机提供了内部R/C震荡器时钟源(内部时钟),如果选择单片机工作在内部R/C振荡器频率,则可以省去外部晶振,将引脚XTAL1和XTAL2悬空。但内部时钟源的误差较大,仅适用于对时钟信号精度要求不高的电路设计,由于本设计需要进行串口通信,对时序要求较高,所以采用的是外接晶振的方式。图4-3为单片机的外接晶振电路。图4-SEQ图\*ARABIC\s53晶振电路其中晶振频率选择为22.1184MHz晶振,以获得准确的波特率,同时使用两个30pF的谐波电容,过滤掉晶振部分的高频信号,帮助晶振起振,提高时钟振荡器的稳定性。LED点阵模块LED显示屏采用的是现成的LED点阵模块MD_LEP32x16。该模块采用超高亮度LED灯芯、恒流驱动芯片和高性价比工业级单片机专业制造,工作稳定,刷新频率高,显示效果好,并且应用方便。该模块采用串口通信的方式向LED点阵发送信息,可以通过串口控制点阵模块显示方式:开启/关闭,正显/反显,左右翻转、上下翻转等,还可以通过串口更新显示的内容。模块介绍该模块采用专业LED行扫描驱动芯片和高亮LED恒流驱动芯片,配合板载时序控制器驱动16行32列LED灯点阵,提供64字节显示缓存和串行控制接口(UART)接收上位机发送的命令,实现点阵模块的控制。该模块长度为80mm,宽度为40mm,整体体积较小,拥有62.5Hz高刷新频率,采用3.3V~5V电压进行供电,使用于不同工作电压的电路。该模块的引脚排列及定义见表4-1:表4-SEQ表\*ARABIC\s51LED显示模块引脚及功能名称功能功能VDD电源输入3.3~5VGND接地端所有接地端都需连接RXD串口输入命令/数据输入端TXD串口输出状态/数据返回端RESET复位复位输入,低电平有效其余保留测试引脚控制命令该模块采用串口通信的方式对显示内容进行设置,通过串口发送命令使显示屏显示不同的内容,通用命令格式如下:[长度][设备号][命令号][参数]其中,长度表示本字节后的字节数,该模块收完一帧命令后会做长度校验,过滤干扰数据,设备号表示本串口点阵模块在多模块显示系统中的标识号,便于区分,如果只控制单个设备,可以使用广播设备号(0xFFFFFFFF)。其中命令号定义如表4-1所示。通过命令号以及传入对应的参数,来进行该显示屏的设置以及显示内容的更新。表4-1LED显示模块命令及功能命令号命令助记符命令说明0x00LEP_CMD_DEVICE_CONFIG设置显示效果0x01LEP_CMD_DRAW_PIXEL点亮单颗LED0x02LEP_CMD_CLEAR_PIXEL熄灭单颗LED0x03LEP_CMD_FILL_SCREEN用字节填充屏幕0x04LEP_CMD_DRAW_SCREEN用数据刷新显示内容0x05LED_CMD_DRAW_ASCII82行4字符方式显示ASCII小字符0x06LED_CMD_DRAW_ASCII161行4字符方式显示ASCII大字符0x07LED_CMD_DARW_HANZI16显示逐列式取模16x16汉字数据本设计中使用最多的命令为逐列式显示数据命令,通过向该模块发送数据”45FFFFFFFF07+64字节逐列取模数据”,就能在LED显示屏上显示对应的图像。与上位机的通信接口设计RS-232通信标准基于通用串行异步收发器的异步串行通信(简称RS-232)是计算机通信中最经典的一种通信方式。虽然大量高性能的通信方式不断出现,如USB等,但作为一种低成本的通信方式,RS-232依旧在许多领域仍被广泛使用。RS-232标准具有下面的显著特点:(1)采用串行方式传输数据,这种传输方式的优点是传输线少,连线简单,传送距离可以较远,仅需使用一根信号线进行数据的传输;(2)在从信源发送数据给信宿的时候,并不需要传输时钟信号。当信宿收到串行数据的时候,会使用本地的时钟对接收到的数据进行采样和编码,然后将数据恢复出来。(3)通过RS-232在传送数据时,并不需要额外使用一个信号来传送同步信号。但是,通过在数据前部和尾部加上识别标识,就能正确地将数据顺利地传送到对方。波特率指单片机或计算机在串口通信时的速率,即每秒发送的码元个数。在RS-232通信中,信源和信宿必须采用相同的数据格式和波特率时钟,否则接收到的数据就会出错。RS-232连接器RS-232设计之初是用来连接调制解调器作传输用,因此他的引脚定义通常也和调制解调器有关。RS-232的设备可以分为数据终端设备和数据通信设备两类,这种分类定义了不同的线路用来发送和接收信号。RS-232制定了20个不同的信号连接,由25个引脚构成的DB-25连接器,但很多设备只是用了其中的一小部分引脚,所以更小的连接器DB-9被广泛使用在PC机以及其他设备上。DB-9连接器的引脚如图4-4所示:图4-SEQ图\*ARABIC\s54DB-9连接器引脚图DB-9连接器引脚的定义及功能如表4-2所示:表4-SEQ表\*ARABIC\s52DB-9引脚的定义及功能序号名称功能1数据载波检测(CD)通知终端设备侦听到载波信号2接收数据(RXD)接收终端设备发送过来的串行数据3发送数据(TXD)将串行数据发送给终端设备4数据终端准备(DTR)终端设备通知调制调解器可以进行数据传输5公共接地(GND)地线6数据准备完毕(DSR)调制解调器通知终端设备准备就绪7请求发送(RTS)终端设备要求调制解调器将数据提交8清除发送(CTS)调制解调器通知终端设备传输数据9振铃指示(RI)通知终端设备已被呼叫Max3232电平转换芯片RS-232规定的逻辑电平与一般微处理器、单片机的逻辑电平是不同的,在RS-232标准中,逻辑1的电压范围为-15到-3V,逻辑0的电压范围为+3到+15V,在RS232中,接近0的电平是无效的。因此如果想要在单片机系统与上位机之间进行数据传输,需要进行电气标准的转换,将TTL/COMS电平转换成RS-232电平,并且将RS-232电平转换成TTL/COMS电平。本设计采用的是美信(maxim)公司的MAX3232芯片,来实现TTL/CSOM电平与RS-232电平之间的相互转换。MAX3232的引脚功能及封装分别如表4-3和图4-5所示:表4-SEQ表\*ARABIC\s53MAX3232引脚及功能引脚名称引脚功能描述引脚名称引脚功能描述1C1+泵电容1正极9R2OUT第二组TTL/CMOS电平输出2V+正电源滤波10T2IN第二组TTL/CMOS电平输入3C1-泵电容1负极11T1IN第一组TTL/CMOS电平输入4C2+泵电容2正极12R1OUT第一组TTL/CMOS电平输出5C2-泵电容2负极13R1IN第一组RS-232电平输入6V-负电源滤波14T1OUT第一组RS-232电平输出7T2OUT第二组RS-232电平输出15GND接地8R2IN第二组RS-232电平输入16VCC3.0V至5.5V图4-SEQ图\*ARABIC\s55MAX3232引脚图MAX3232主要分为三个部分。第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。第三部分是供电部分。15脚GND、16脚VCC,MAX3232的工作电压为3.3V-5V。与上位机的通信接口电路本设计中,单片机与上位机之间的通信接口电路如图4-7所示:图4-SEQ图\*ARABIC\s56上位机通信电路左边为DB-9连接器,用来连接上位机进行数据的传输,其中DB-9连接器将上位机传输的RS-232数据输入到引脚R1IN/R2IN中,转换成TTL/COMS数据后,从R1OUT/R2OUT中输出,然后发给单片机的接收端。单片机发送的TTL/CMOS数据输入到引脚T1IN/T2IN中,转换成RS-232数据后,从引脚T1OUT/T2OUT输出,然后发送数据给上位机。根据芯片数据手册,电容C6为0.1uF,电容C7/C8/C9为0.47uF,同时使用与电荷泵电容C6相同的电容C10将Vcc旁路到地,进行去耦。防水封装为了能让LED显示屏在水下工作,需要对其进行防水封装,防水封装如图4-7所示。在防水封装的接口中预留了六根数据线,用来进行供电与数据传输使用,连接在电路板预留了六个排针接口上,以此来进行供电与数据的传输。不过在本设计中,只是用了四根数据线,分别为VCC、GND以及RS-232数据的接收与发送。图4-SEQ图\*ARABIC\s57防水封装图4-SEQ图\*ARABIC\s58电源/数据传输接口软件设计开发工具及语言本设计使用KeiluVision作为软件开发工具。KeiluVision是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统。其提供了功能强大的编辑器,并且提供了管理工程的能力,是常用的单片机开发工具。本设计中,单片机软件是采用C语言进行编写,C语言是一门面向过程的通用程序设计语言,广泛应用于底层开发。在嵌入式系统开发中,C语言为编写软件代码的主要开发工具。相比汇编语言来说,C语言的可读性、结构性更强,并且C语言具有很好的可移植性,适合多种操作系统,可以运行在不同架构的处理器上。程序流程图本设计的软件流程图如图5-1所示,从总体上说大概分为串口通信部分以及显示部分,串口通信中,串口1负责与上位机之间的通信,串口2负责向LED显示屏发送显示数据。显示部分,则包括字模数据的读取及动画处理等。图5-1软件流程图串口设置如果想要通过串口与其他设备进行数据的传输,需要对单片机的串口进行设置,确定串口的数据格式以及传输速率。串行口2本设计中,采用串口2向LED显示模块发送数据信息,波特率为9600。在STC12C5A60S2单片机中,只能使用独立波特率发生器作为串口2的波特率发生器,而不能使用定时器1。不过对于串口1来说,既可以使用定时器1作为波特率发生器,也可以使用独立波特率发生器作为波特率发生器。串口2初始化的代码如图5-2所示:图5-2串口2初始化代码图5-2中AXUR为辅助寄存器,其格式以及各位的含义如图5-3所示:图5-3辅助寄存器AXUR格式其中与串口2相关的有3位,BRTR、S2SMOD、BRTx12。其中BRTR,为独立波特率发生器运行控制位,1则允许其运行,0则禁止其运行。S2SMOD为串口2的波特率加倍控制位,当它等于1时,串口2的波特率翻倍,否则波特率不变。BRTx12为独立波特率发生器计数控制位,等于0时,独立波特率发生器每12个时钟计数一次,等于1时,每1个时钟计数一次。通过串行口2的控制寄存器S2CON,设置串口2的工作方式为方式1,在此工作方式下,串口2每次发送8位数据,并且波特率可变,计算公式为 波特率=(2S2MOD/32)×BRT独立波特率发生器的溢出率 (5-SEQ5-\*ARABIC1)其中,在BRTx12=1时, BRT独立波特率发生器的溢出率=SYSclk/(256−BRT) (5-SEQ5-\*ARABIC2)通过公式5-1和公式5-2可得到串口2的波特率, 波特率=(20)/32×22.1184M/(256−184)=9600 (5-SEQ5-\*ARABIC3)串行口1本设计中,采用串口1来进行与上位机之间的通信,波特率为9600。与串口2相同,串口1工作方式为方式1,在此工作方式下,串口2每次发送8位数据,并且波特率可变,但是选择定时器1作为波特率发生器,定时器的工作方式为8位自动重装方式,定时器初值TH1为184,串口初始化的代码如图5-4所示:图5-4串口1初始化代码通过计算可得,串口1的波特率为波特率=与上位机之间的通信通信流程上位机与单片机之间的通信流程如图5-1所示,具体过程如下:(1)单片机不断检测串口1收到的信号,如果检测到握手码0xaa,则执行步骤2,否则重复步骤1;(2)单片机继续检测串口1收到的信号,如果检测到握手次码0x55,则执行步骤3,否则返回步骤1;(3)当单片机收到0xaa,0x55后,意味着上位机即将发送显示数据,发送数据0xaa告诉上位机收到发送请求,并开始擦除EEPROM中的所有数据,等待擦除完毕后发送数据0xbb告诉上位机已经准备好,可以接收上位机数据;(4)单片机接收3字节的显示设置数据,包括显示模式、显示速度、字符个数,并依次存储到EEPROM的设置数据区中;(5)随后单片机开始接收字模数据,并依次存储到EEPROM的字模数据区中,每接收完一个字符后检测是否收到结束码0xff,如果收到结束码,则进行软件复位,重新运行程序,否则继续接收下一个字模数据。通信连接的建立在上位机与单片机的握手阶段,单片机通过串口1中断程序来判断是否收到了握手码。当单片机收到数据时,进入中断程序,判断是否为握手码0xaa,然后等待接收下一位数据,当下一位数据为0x55并且上一位数据为0xaa的时候,则代表握手成功,将串口接收标志位uart_flag置1,同时关闭串口1中断。关闭串口1中断的可以避免在接收上位机数据时出现重复握手的情况,关闭中断后发送中断请求标志位TI和接收标志请求标志位RI的清零操作均放到主程序中进行。当程序运行时检测到uart_flag等于1时,则进入下载模式。通信数据的存储EEPROM是指带电可擦可编程只读存储器,掉电之后所存储的数据不会消失,在本设计中,当单片机接收到上位机传输的信息后,将数据存放在EEPROM中,这样在单片机重新上电启动后,依旧能够正常显示字符信息。STC12C5A60S2单片机利用ISP/IAP计数,可将内部DataFlash当EEPROM,擦写次数在10万次以上,EEPROM分为若干个扇区,每个扇区包含512个字节。在该单片机的数据手册中,指出该单片机具有1K大小的EEPROM,起始地址为0000H-03FFH。但通过查询相关资料了解到,固件版本在7.1以上的芯片具有2K大小的EEPROM,起始地址为0000H-07FFH,而本设计使用的单片机固件版本在7.1以上,具有2K大小的EEPROM,最多可以存放64个16x16大小的字模数据。在本设计中,将EEPROM划分为如图5-5所示的两大部分。在地址0000H-000FH这16个字节中用于存放显示设置数据,不过目前仅使用了三个字节,地址0000H存放动画模式数据,0001H存放动画速度数据,0002H存放显示的字符总数。在地址0010H-03FFH中存放字模数据,总共为2032字节,最多可以存放63个字符的字模数据。图5-5EEPROM区域的划分在向EEPROM写入数据之前,我们需要将EEPROM中原来的数据全部擦除,否则不能正常向里面写入数据。因为EEPROM中的数据和程序区的不同,其默认值为FF而非00,向EEPROM中写入数据则是将数据位中对应的“1”置“0”,而不能将“0”置“1”,如果说仅仅需要修改第一扇区中的某一个数据,则需要将第一扇区中的数据移入RAM中,等待第一扇区擦除完毕后再将原数据和新数据重新写入。EEPROM的读写和擦除与用户程序区,需要进行一定的配置才能够对其进行操作,操作流程如图5-6所示。首先将需要操作的EERPOM地址写入到地址寄存器中,地址高八位写入IAP_ADDRH,地址第八位写入IAP_ADDRL,如果是擦除EEPROM,则写入扇区起始地址。然后令IAPEN=1,让单片机能进行ISP/IAP功能。然后选择操作模式,通过配置命令寄存器IAP_CMD来选择对应的模式,命令寄存器IAP_CMD的格式及功能如表5-1所示,当IAP_CMD=0时,不进行任何操作;当IAP_CMD=1时,读取EEPROM数据;当IAP_CMD=2时,向EEPROM中写入数据;当IAP_CMD=3时,擦除对应扇区。最后对IAP_TRIG先写入5AH,再写入A5H,ISP/IAP命令才会生效。待写入数据和读取的数据均存放在数据寄存器IAP_DATA中。图5-6EEPROM操作流程表STYLEREF5\s3-SEQ表\*ARABIC\s54IAP_CMD格式及功能BitB7B6B5B4B3B2B1B0IAP_CMDMS1MS0MS1MS0命令/操作/模式选择00待机模式,无ISP操作01从用户的程序区对EEPROM进行字节读10从用户的程序区对EEPROM进行字节编程11从用户的程序区对EEPROM进行扇区擦除软件复位在上位机数据发送完毕后,会发送结束码0xff,通过结束码可以很清楚的判断数据是否发送完毕。每接收完一个字符的字模数据后,会进行结束码的判断,对于正常的字模数据来说,第一个字节的字模数据为0xff的几率几乎为零,所以不存在误判的可能性。当检测到结束码后,单片机进行软件复位,从用户程序区开始从头执行指令。在STC12C5A60单片机中,提供了特殊功能寄存器IAP_CONTR,其格式如图5-5所示,通过控制IAP_CONTR中的SWBS和SWRST两位即可实现单片机系统的软件复位。令SWRST等于1,即可实现单片机系统的软件复位,而且当SWBS等于1时,软件选择从ISP程序区启动,当SWBS等于0时,软件选择从用户程序区启动。令SWRST等于1,即可实现单片机系统的软件复位。图5-5特殊功能寄存器IAP_CONTR动画显示动画显示的流程图如图5-1所示,在单片机上电启动后,从EEPROM对应地址中获取显示设置信息,进入对应的动画模式。本设计中主要包括八种显示动画,分别是上下左右滚动、上下逐行显示以及左右的逐列显示。这里以向左滚动显示为例,来说明如何进行动画的处理。首先我们需要提取待显示的字符的字模数据并存入变量中,对于向左滚动和向右滚动,还增加了一步半角字符的判断,半角字符也就是ASCII中的字符,相比全角字符来说仅占有一半的宽度,如果按照全角字符进行显示的话会使得显示内容不太紧凑,即相邻字符之间具有很大的间隔,影响显示效果。在上位机生成的字模数据中,虽然半角字符依旧占了32个字节,但是仅有前16个字节具有字模信息,后面16个字节均为空,如果所取得字模数据后16位全部为0,则为半角字符,仅需对其左移8次即可结束该字符的显示。向左滚动的实现原理如图所示,创建一个64字节大小的数组,用于存放显示的数据,每进行一次左移操作,就是将数组2和3中的数据移动到数组0和1中,以此类推,直到数组62、63移入待显示字符的2字节数据,如此循环操作,即可实现向左的滚动显示。图5-6向左滚动原理示意图动画速度的设置,则是通过在传输两帧显示数据之间添加延时函数,在传输一帧数据后,延时一段时间在进行下一帧数据的传输,延时时间越短则动画速度越快。上位机设计开发工具和语言本设计使用VisualStudio作为上位机的开发平台,VisualStudio是美国微软公司的开发工具包系列产品。通过VS软件创建一个windows窗体应用,通过添加控件以及相应代码,实现LED屏控制系统。使用窗体框架为.NETFramework4,因为.NETFramework4.0版本支持在WindowsXP系统上运行,而更高级的.NETFramework4.5不支持在WindowsXP系统上运行,因此选择了泛用性比较高的4.0版本。本设计中,上位机软件是采用C#语言进行编写,C#是运行于.NETFramework之上的面向对象的高级程序设计语言,通过它可以快速地编写各种基于Microsoft.NET平台的应用程序。上位机软件界面设计控件布局上位机软件的界面大小为700x520,界面设计如图6-1所示图6-1上位机软件界面控件功能和使用方法(1)串口设置:选择需要进行通信的端口及波特率,通过扫描按钮可以获取当前可用的端口,默认波特率为9600;(2)输入显示内容:输入需要显示在LED显示屏上的内容,限制在60字符以内,可以输入任意字符;(3)字体设置:设置显示字体,字号大小,其中字号大小为像素值(pixel);(4)字模数据:显示生成的字模数据,字模数据包括三个部分,一个是C语言数据,可以直接复制进入keil程序里面使用;一个是串口测试数据,及HEX值(16进制),用来发送给下位机,或者在调试的时候使用;最后是生成的字模图片,可以通过字模图片来初步判断在LED显示屏中的效果(5)显示设置:设置LED显示屏的动画模式和动画的运行速度。(6)取模方式:选择字模的取模方式,分为横向取模与竖向取模,虽然本设计所用LED使用的是竖向取模数据,但多种取模方式可以提高该软件的实用性,方便以后不同设备的使用。(7)下载至单片机:将数据传输给单片机,传输完毕后进行提示。串口设置在串口设置部分,可以选择需要与之通信的串口以及波特率,同时可以通过扫描按钮来扫描当前可用的串口,去除了不可用的串口,可以更加清晰、快速的找到需要使用的串口。其中串口扫描的程序代码如图6-2所示,通过C#中的异常处理语句trycatch来实现,try语句内用于编写有异常存在的语句,而catch语句内用于填写捕获到异常的类型以及对异常对象的处理方法。如果try中的代码没有出错,则程序正常运行try中的内容后,不执行catch中的内容,但如果try中的代码一但出错,程序立即跳入catch中去执行代码,那么try中出错代码后的所有代码就不再执行了.利用这个特性,逐一打开端口COM1至COM20,如果能正常打开,则将该端口号添加至下拉框中以供选择,如果不能打开则不进行任何操作,从过这个方法来实现可用端口的扫描。图6-2扫描可用串口实现代码字模的提取因为没有使用字库芯片或者存储器来存储字模数据,所以需要通过上位机来获取字模,将获取到的字模数据传送给单片机存储,以供正常显示。字模的获取主要有两种途径,一是直接调用现成的点阵字模文件,通过字符对应的字内码来提取字符的数据,这种方式简单快捷,但字符的大小、样式等均已固定,不能进行任何调整,如果想要换个字体或者字号,只能再调用另一份与之对应的字模文件,通用性不强。本设计采用的为第二种方法,自行提取待显示字符的字模,可以选择不同的字体,字号以及取模方式,适用于多种设备。字模提取的流程首先读取文本框中需要提取的字符内容,然后每个字符逐一地进行字模提取,单个字符的字模提取流程如图6-3所示,然后将提取到的字符数据显示在字模数据的文本框中。计算机图像通常分为两大类,位图和矢量图。位图,或者说点阵图是由一个个像素,也就是一个个点组成,通过不同的颜色和不同的排列组合来构成不同的图像。位图颜色的编码通常采用的RGB编码,通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色,是运用最广的颜色系统之一。矢量图,也称为面向对象的图像或绘图图像,就是使用直线和曲线来描述的图形,具有编辑后不失真的特点。在LED显示屏中,字模信息同样是通过一个一个点来实现,所以使用位图来获取所需字符的字模。图6-3单个字符的字模数据提取流程字模提取的实现方法(1)新建位图:新建一个空白的位图,大小为所选择的字号大小,可以理解成一张新的画布,然后在上面绘制图像。(2)绘制字符图像:在位图上绘制该字符,然后进行字模的提取。在绘制字符图像前,需要判断所绘字符为全角字符还是半角字符,半角字符为ASCII码中的字符,占用一个标准的字符位置,也就是一个字节,而全角字符是汉字库中的字符,占两个标准字符位,也就是两个字节。在绘制半角字符的时候,半角字符的图像宽度仅为全角字符的一半,这样可以使得输出的文本更加紧凑、美观。在确定是全角还是半角字符后,需要对绘制的字符图像进行格式的设置,绘制的图像在位图中水平方向居中对齐,垂直方向向左对齐,同时需要对绘制图像的精度进行设置,否则会出现重影等问题导致字模提取的困难。在设置绘制字符大小时需要注意的是,绘制字符函数传入的字符大小单位为磅,本设置采用的单位为px,需要将像素值乘以3/4后与之对应字符大小。(3)逐行逐列提取像素点:关于提取像素点,因为采用黑色的画笔在位图上绘制了字符信息,所以只需判断每个点是否为黑色即可提取出字模信息,位图通常采用的颜色编码为RGB编码,黑色对应的RGB编码为(0,0,0),通过GetPixel函数,可以获得对应点的颜色属性,然后与RGB(0,0,0)进行比对即可。在字模数据的提取中,每8个点为一组,通过字节变量存储这8个点的信息,如果一个点为黑色,则将对应的位号置1。(4)输出数据:将最后提取的字模数据显示在文本框中,并添加换行与注释。与单片机之间的通信点击“下载至单片机”按钮,上位机将通过串口发送握手码0xaa和0x55,然后通过串口接收事件,等待单片机发送确认码0xaa,收到确认码后,继续等待单片机擦除EEPROM,直到收到单片机EEPROM擦除完毕指令,开始传输数据。传输数据包括两个部分,设置部分和字模数据部分,设置部分包括动画速度以及动画模式、字符数量,总共三个字节。字模数据则是直接调取串口数据文本框中的数据,将其中的空格以及换行符清除,然后两个两个的读取字模数据并转换为字节格式后发送给单片机,字模数据发送完毕后发送结束码0xff,上位机数据发送完毕。系统测试测试结果显示屏测试在进行动画显示之前,需要对LED显示屏进行测试,保证每个点都能正常点亮或者熄灭。经过测试,LED显示屏工作正常,没有坏点出现,同时对所有操作指令均能正常响应。测试结果如图7-1所示:图SEQ图\*ARABIC11-1LED显示屏测试动画显示本设计共有8种动画模式,分别为上下左右滚动显示、上下逐行显示以及左右逐列显示,经过测试,8种动画模式均能正常工作,图7-2为向左滚动显示字符“周子煜”测试结果。图7-2动画显示测试上位机修改显示内容单片机软件测试完毕后,测试上位机软件能否正常进行工作。通过上位机程序,修改显示内容为“啊啊”,如图7-3和7-4所示,上位机发送数据成功,LED显示屏显示字符“啊啊”,说明上位机与单片机之

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论