便捷式LED显示屏控制器的研究(2)_第1页
便捷式LED显示屏控制器的研究(2)_第2页
便捷式LED显示屏控制器的研究(2)_第3页
便捷式LED显示屏控制器的研究(2)_第4页
便捷式LED显示屏控制器的研究(2)_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

1、1 绪论便捷式LED显示屏控制器又称基于USB的LED显示屏控制器,是我们综合LED显示屏控制器的发展和USB的优点提出的一项新型的显示屏控制系统技术。1.1 课题研究的背景和意义LED显示屏是利用发光二极管点阵模块或像素单元组成的大面积显示屏幕,目前,其广泛应用于银行、医院、体育场馆、车站、高速公路、广场等公共场所的信息显示和广告宣传。传统的LED 显示屏的信息输入只能通过数据线与专用电脑直接连接来进行,或者是由电脑通过无线或有线数据网络加控制电路的方式实现。这些方式存在一定的缺点和应用局限,如专用电脑控制方式增加了系统成本,而且电脑需要一直处于开机状态,控制系统本身功耗较大;而通过网络实现

2、控制的方式,网络初期投资和运行成本比较大1。USB( 通用串行总线) 是INTEL、DEC、MI2CROSOFT、IBM等公司联合提出的、最近几年逐步在PC领域广为应用的新型接口技术。USB 接口通用性好、实时性强、传输方式多样、成本低、支持即插即用、易于扩展且便于使用,这些优点使其得到许多硬件厂商的青睐。目前各种类型的USB 产品已大量涌入市场,同时也被广泛地用在PC机及嵌入式系统中。USB的普及使其成为在各类便携式设备中进行数据传输的一种较好的选择。基于此,本文提出了基于USB的LED显示屏控制系统,它具有传输速度快、更新信息方便、设备安装和配置容易、易于扩展、能够采用总线供电、使用灵活等

3、主要优点;便于携带,基本上完善了普通LED点阵显示牌的功能,具有良好的应用前景和很高的实用价值2。与显示屏的发展密切相关的是其核心技术即显示屏控制系统技术的革新。当前市场上流行的脱机LED显示屏控制系统的特点可以概括为两点:第一,人机交互系统由计算机控制。每一种显示屏控制系统对应着一种控制软件,LED显示屏用户将要显示的文本或图片通过上位机程序输入计算机,然后由上位机程序提取文本或图片的点阵信息并保存;第二,通讯传输系统为有线控制,采用有线电缆作为传输介质多数为RS232总线或是RS485总线,根据PC机配置的标准串行接口,进行电平转换。计算机通过上述总线将点阵信息传送给显示屏扫描控制系统扫描

4、显示。上述特点造成了显示屏对计算机和通信线路的依赖性,无形之中就提高了使用成本,给用户带来了不便,某些用户甚至为使用显示屏而不得不专门配备一台计算机,或是要在不方便架设线路的地方铺设专用线路。这对于某些小型显示屏用户而言大大提高了其使用成本,某些用户甚至不得不为此而忍痛割爱,从而极大地影响到LED显示屏使用的普及。本文提出了一种新的设计方案,即在显示屏控制系统原有串口的基础上扩展标准USBHOST接口,将计算机上相关文件拷到USB存储设备(U盘USB硬盘),然后USB存储设备插到LED显示屏的控制系统上,控制系统通过该接口直接读取USB存储设备,完成对LED显示屏的文本和图像输入,使LED显示

5、屏与计算机的信息交流更方便。该系统操作简单,在一些小型且需要不断改变显示内容的LED显示屏系统中具有较高的性价比,大大缩小了设备的占用空间,而且摆脱了线缆的束缚和计算机的控制。目前USB存储设备这类电子信息存储媒介已逐步普及,使用USB存储设备作为LED显示屏信息内容的传递媒介,将会给LED显示屏特别是小型LED显示屏带来一次更深入的普及4。 1.2 本课题的研究方法和主要工作1.2.1 本课题采用的研究手段通过对各种资料的查阅,完成对本课题的各部分知识的全面了解以及对课题原理的掌握。然后初步完成对课题的模块设计、理论测试、调试和改良,最后通过实验、仿真分析进一步确定最终结果。研究流程如图1-

6、1所示。图1-1 工作流程图1.2.2 本课题要完成的任务本课题需要完成主程序模块的设计、USB主控器模块的设计、显示屏扫描模块的设计、实时钟模块设计、外部存储模块设计和按键指示模块设计。满足U盘内数据的读写、字模提取和写入、LED显示以及键盘扫描等子程序运行需求。即单片机控制系统的软件设计; LED点阵显示系统的软件设计;基于USB接口的单片机控制系统的软件设计;PC机与单片机实现数据通信的模块设计。 确定系统实现方案,并绘制出相应的系统原理示意图,软件流程图;结合另一个同学所做的硬件部分的设计进行相应的软件部分设计,具体包括:主模块及各子模块程序流程图、程序开发过程文档、程序清单、系统调试

7、等。1.3 拟解决的关键技术 本课题将解决以下问题:1)如何实现对U盘数据的读取,即设计U盘数据读取程序;2)如何实现将读取的数据通过LED屏显示,即设计显示屏扫描程序;3)将上述两个方面结合到一起,即实现读取和显示的两方面功能。2 便捷式LED显示屏控制系统的总体设计2.1 控制器系统总体结构设计根据所确定的方案,此控制系统主要包括:实现对U盘数据的读取及存储的模块设计和实现所读取的U盘数据在LED屏上显示的模块设计。前者通过单片机、USB转换协议和数据存储器实现。后者通过单片机、数据存储器和LED屏驱动电路实现。该控制系统的结构框图如图2-1所示。 图2-1 便捷式LED显示屏控制器系统框

8、图图中,虚线部分为USB接口LED显示屏控制系统的结构框图,其中主要包含:LED屏驱动模块、单片机、实时钟模块、USB协议转换电路、按键、复位、电源等。其外围部分连接到U盘接口和LED屏。2.2 U盘数据读取模块设计该部分电路用于对U盘数据的读取以及存储。其由单片机及其外部数据存储器的扩展电路、电源电路、串口下载电路、滤波电路、USB协议转换电路和晶振与复位电路等几个部分组成。主要完成对U盘数据的读取以及存储的功能。各部分的模块设计将在第三章详细说明。该部分电路框图如图2-2所示。图2-2 U盘读取电路框图2.3 LED屏驱动模块设计从理论上说,不论现实图形还是文字,只要控制与组成在这些图形或

9、文字的各个点所在的位置相对应的LED器件发光,就可以得到我们想要的显示结果,这种同时控制各个发光点亮灭的方法称为静态驱动显示方式。例如16x16的点阵共有256个二极管,显然单片机没有这么多的多口,如果我们采用锁存器来扩展端口,按8位的锁存器来计算,16x16的点阵需要32个锁存器,这个数字很庞大,实际应用中的显示屏往往要大得多,这样在锁存器上花的成本将是很庞大的数字。因此在实际应用中的显示屏几乎不采用这种设计,而采用另一种称为动态扫描的显示方法。 动态扫描的意思简单地说就是逐行轮流点亮,这样扫描电路就可以实现多行的同名列公用一套驱动器。先送出对应第一行发光管亮灭的数据并所存,然后选通第一行并

10、使其点亮一定的时间,然后熄灭;然后第二行;以此类推,反复轮回。当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能够看到显示屏上稳定的图形了。该部分电路用于将读取的U盘数据通过LED屏显示出来。主要完成将存储在外部扩展存储器中的数据通过LED屏显示出来的功能。各部分的电路设计将在第三章详细说明。该部分电路框图如图2-3所示。图2-3 LED显示屏驱动电路原理框图2.4 存储器模块设计LED点阵显示屏是利用连续刷屏来实现显示所要求内容的,单片机从U盘读取数据的速度比较慢,LED显示屏速度跟不上。要解决这个难题,我们想到了采用74HC573锁存器和62C256静态数据存储器RAM

11、对单片机存储空间进行扩展。外部数据存储器62C256为32K字节的8位数据宽度的RAM存储器,62C256 的单片机寻址范围为0000H7FFFH,可用来进行单片机的外部数据存储器的扩展。存储器相当于一个中转站,单片机从U盘读取数据写入存储器,存储器再把数据显示在LED屏上。该部分电路框图如图2-4所示。 图2-4 存储器模块原理框图2.5 本章小结传统的LED 显示屏的信息输入只能通过数据线与专用电脑直接连接来进行,或者是由电脑通过无线或有线数据网络加控制电路的方式实现。这些方式存在一定的缺点和应用局限,如专用电脑控制方式增加了系统成本,而且电脑需要一直处于开机状态,控制系统本身功耗较大;而

12、通过网络实现控制的方式,网络初期投资和运行成本比较大。通过本章的介绍,基于可移动存储器的多路LED显示屏控制系统,采用体积小、性能高的微处理器组成前级驱动及控制电路,可靠地读取体积小、容量大的移动存储器(U盘)中的内容。USB接口的LED显示屏是具有很大的开发意义,通过U盘来更改LED屏显示的汉字是一个质的飞跃,给我在日常生活生产中使用LED屏带来了很大的方便,而且也能使LED屏的使用越来越普及化。3 便捷式LED屏控制系统的软件设计如上一章中所述,便捷式LED显示屏控制器系统主要分为读U盘模块设计、LED点阵显示模块设计、存储模块设计。本章主要完成控制器系统的软件设计。 整个软件设计主要分以

13、下7个模块:主程序模块、U盘数据读取模块、LED点阵显示模块、存储器模块、实时钟模块、数据通信模块、按键输入模块等。下面对各模块的设计进行阐述。3.1软件程序编辑语言及开发环境选择以往的单片机系统,其控制程序大多是用相应单片机的汇编指令编制,虽然其执行效率高,但其可读性和可移植性却较差,直接影响其软、硬件的扩展和升级4。C语言早期用于编写UNIX操作系统,它是一种结构化的语言,可产生紧凑代码。C语言可用许多机器级的函数直接控制和操作单片机的硬件而不必通过汇编语言,与汇编语言相比,C语言主要有以下一些优点。·不要求了解单片机的指令系统,仅要求对其存储器结构有初步了解;·寄存器

14、分配、存储器寻址及数据类型等细节可由编译器管理;·程序由不同的函数构成,便于程序的结构化和模块化;·程序的可读性及可移植性较高;·关键字及运算符可用近似人的思维方式使用;·程序编制及调试时间显著缩短,大大地提高了编程效率;·C语言提供的库包含许多标准的子程序,具有较强的数据处理能力;C语言是一种非常便于使用的计算机高级编程语言,使用C语言进行单片机 尤其是MCS-51系列单片机的开发具有极大的优势。因此,国外从20世纪80年代中后期就已经开始了将C语言向8051单片机上移植的步伐。经过Keil/Franklin, Archeades, IAR,

15、BSO/Tasking等公司的努力,到了20世纪90年代,针对8051的C语言开始日趋成熟,逐渐成为专业化的实用高级语言。上述公司都各自开发了基于8051单片机的C语言编译器,其中Keil公司开发的编译器以其使用方便、生成代码紧凑及支持几乎所有基于8051的单片机等优点,并完整的实现了ANSI的C语言标准,从而成为当今使用最为广泛的MCS-51系列单片机C语言开发软件。 用C51编制程序时,同样应遵循结构化、模块化的设计方法。因此,在编程时,可将任务分成若干模块,对每个模块分别进行编制及调试,最后有机结合成一个完整的控制程序。本设计中,编程语言采用高级与汇编语言混合编程的形式,程序主体采用C5

16、1语言编写,但在对速度要求苛刻的部分采用汇编语言编写。开发环境选用目前流行的Keil uVision3。KeilSoftware公司推出的Keil uVision3是一款可用于多种8051MCU的集成开发环境(IDE),该IDE同时也是PK51及其它开发套件的一个重要组件。除增加了源代码、功能导航器、模板编辑以及改进的搜索功能外,uVision3还提供了一个配置向导功能,加速了启动代码和配置文件的生成。此外其内置的仿真器可模拟目标MCU,包括指令集、片上外围设备及外部信号等。uVision3提供逻辑分析器,可监控基于MCUI/O引脚和外设状态变化下的程序变量。uVision3提供对多种最新的8

17、051类微处理器的支持,包括AnalogDevices的ADuC83x和ADuC84x,以及Infineon的XC866等。3.2主程序模块设计3.2.1 主程序模块实现的功能主程序模块实现的功能为:单片机能根据相应的按键扫描控制进入对应的应用程序。 3.2.2 程序设计思想及说明本设计是将U盘中的数据按要求显示到LED显示屏上,要将两者联系在一起,首先离不开单片机。U盘和单片机可通过CH375芯片衔接,LED显示屏则可以利用串行口接收来自单片机的信息。主要使用的语句:Awhile(1).这是个死循环语句,通过这个语句不断的调用键盘函数,判断是否有按键按下。Bif语句的3种形式 (1)if(.

18、)语句 (2)if(.)语句1 else 语句2 (3)if(.)语句1 else if(.)语句2 else if(.)语句3 else if(.)语句m else 语句nif语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。C. switch(表达式)case 常量表达式1: 语句序列1case 常量表达式2: 语句序列2 .case 常量表达式n: 语句序列ndefault: 语句序列n+1Switch结构也成为标号分支结构,当switch的判断表达式的值与case常量表达式i的值相等,则执行相应的语句序列。单片机主程序流程图如图3-1所示。 图3-

19、1 主程序流程图开发板通电后,单片机内部进行初始化,并延时等待初始化结束,然后反复对键盘进行扫描,判断单片机接下来要完成的操作,即判断接下来进入读U盘程序模块,LED显示模块,实时钟校验模块还是加减计数模块。 主程序中关键程序部分: while(1) for (i=0;i<5;i+) Key_GET(); switch (Key) case 0x00: delay_ms(); DISKREAD(); break; case 0x01: Display(); break; case 0x02: TIME(); break; case 0x03: PLUS; break; case 0x04

20、: DECREASE; break;3.3 U盘数据读取程序设计3.3.1 USB接口读取U盘数据的方案选择USB接口对U盘的读取方案主要分为两种:SL811方案和CH375方案。1)SL811方案:SL811HST 是一种USB 主机控制器,它能与全速或低速USB通信。主要特性有:a.完全与USB 1.1 规范兼容;b.支持USB 主机和设备两种模式;c. 标准数据/ 地址复用的8位双向数据端口;d.芯片内部含有256 字节的RAM 数据缓冲区,其中包含控制寄存器和数据缓冲区;e.地址自动递增模式,节省内存读/ 写周期;f.3.3V 工作电压,接口兼容5V电平;g.自动产生SOF 和CRC5

21、/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-2 CH375读取U

22、盘数据原理框图本设计采用CH375方案处理U盘数据读取的问题。3.3.2 U盘数据读取程序设计说明对于USB存储设备,CH375内置了相关协议,通常情况下,外部单片机不需要编写固定程序,就可以直接工作。CH375并口信号线包括:8位双向数据总线D7D0、读选通输入引脚RD#、写选通输入引脚WR#、片选输入引脚CS#、中断输出引脚INT#以及地址输入引脚A0。如表3-1所示。 表3-1 CH375工作方式选择CS#WR#RD#A0D7D0对CH375芯片的实际操作1XXXX/Z未选中,不进行任何操作011XX/Z虽然选中但无操作,不进行任何操作001/X1输入向CH375的命令端口写入命令码00

23、1/X0输入向CH375的数据端口写入数据0100输出从CH375的数据端口读出数据0101输出从CH375B的命令端口读取中断标志,位7等效于INT#引脚主要使用的命令见表3-2。如果命令的输出数据是操作状态,则参考表3-3。表3-2 CH375命令代码及命令用途代码命令名称输入数据输出数据命令用途01HGET-IC-VER版本号获取芯片及固件版本02HSET-BAUDRATE分频系数(等1mS)操作状态设置串口通信波特率分频常数03HENTER-SLEEP进入低功耗睡眠挂起状态05HRESET-ALL(等40mS)执行硬件复位06HCHECK-EXIST任意数据按位取反测试工作状态0AHG

24、ET-MAX-LUN数据38H最大单元号获取USB存储设备的最大逻辑单元号0BHSET-DISK-LUN数据34H设置USB存储设备的当前逻辑单元号逻辑单元号0BHSET-PKT-P-SEC数据39H设置USB存储设备的每扇区数据包总数每扇区包数15HSET-USB-MODE模式代码(等20uS)操作状态设置USB工作模式16HTEST-CONNECT(等2uS)连接状态检查USB设备的连接状态17HABORT-NAK放弃当前NAK的重试22HGET-STATUS中断状态获取中断状态并取消请求28HRD-USB-DATA数据长度从当前USB中断的端口缓冲区读取数据块数据流2BHWR-USB-D

25、ATA7数据长度向USB主机端点的输出缓冲区写入数据块数据流51HDISK-INIT产生中断初始化USB存储设备53HDISK-SIZE产生中断获取USB存储设备的容量54HDISK-READLBA地址产生中断从USB存储设备读数据块扇区数55HDISK-RD-GO产生中断继续USB存储设备的读操作56HDISK-WRITELBA地址产生中断向USB存储设备写数据块扇区数57HDISK-WR-GO产生中断继续USB存储设备的写操作58HDISK-INQUIRY产生中断查询USB存储设备的特性59HDISK-READY产生中断检查USB存储设备是否就绪5AHDISK-R-SENSE产生中断检查U

26、SB存储设备的错误表3-3 CH375操作状态和状态说明状态代码状态名称状态说明51HCMD-RET-SUCCESS操作成功5FHCMD-RET-ABORT操作失败U盘数据读取程序流程图如图3-3所示。图3-3 U盘读取数据流程图首先初始化,然后通过检测灯判断U盘是否接入CH375,并发送是否有需要读取的文件,没有则发送错误,否则开始读文件,将读取的数据传回单片机内,单片机将所读的数据存入外接存储器内,读到文件底层时发送读完信号,关闭USB接口,停止读取数据。U盘初始化部分程序: ch375b_write_cmd(CMD_DISK_INIT); /初始化USB存储器 status=ch375b

27、_wait_interrupt(); /等待中断并获取状态 if(status!=USB_INT_SUCCESS) return status; ch375b_write_cmd(CMD_DISK_SIZE); /获取USB存储器的容量 status=ch375b_wait_interrupt(); if(status=USB_INT_SUCCESS) return 0x0; /U盘已经成功初始化 3.4 LED点阵显示模块设计3.4.1 点阵显示方式的选择点阵显示方式有串行方式显示和并行方式显示。1)串行方式显示。这种方式可同时显示4个16×l6点阵汉字或8个16×8点阵

28、的汉字、字符或数字。点阵显示屏每个单元由16个8×8点阵LED显示模块、行信号选择译码器74HC138、数据移位寄存器74HC595和行驱动器、列驱动器组成。单元显示屏可以接收控制器(主控制电路板)或上一级显示单元模块传输下来的数据信息和命令信息,并可将这些数据信息和命令信息不经任何变化地再传送到下一级显示模块单元中,因此显示屏可扩展至更多的显示单元,用于显示更多的内容。此方案为点阵显示屏系统中比较常用的,所用器件也比较常用,容易买到。但是它存在一个致命的缺点,就是刷新速度不够快。如果要驱动64列点阵显示,通用51单片机会比较吃力,出现比较严重的闪烁停滞现象。此外,要实现文字的左右移

29、动和调整移动速度等功能,都会给软件设计带来较多困难。2)并行方式显示。可以通过锁存器芯片来扩展I/O口,达到控制LED点阵的64个列线的目的。方案中运用16片锁存器74HC573来组成8组双缓冲寄存器,驱动LED点阵的8组列线,用4/16译码器74HC595对LED点阵的16行进行扫描。在送每一行的数据到LED点阵前,先把数据分别送到第一级的8个74HC573芯片,然后再给第二级的8个74HC573送锁脉冲,数据一起输出到LED点阵列中,这样就避免了各行数据显示不同步问题。由于并行数据传输速度比串行快,所以字符闪烁的问题得到较好地解决,文字左右移动也比较容易控制。综上所述,本设计最终选择了并行

30、方式显示。图3-4 8*8点阵图3-4是一个8乘8的点阵图。要显示红绿两种颜色的光,每个点都由红绿两个发光二极管并联组成12。3.4.2 程序设计思想及说明LED点阵显示牌由多个LED点阵模块组成。显示方式采用1/16扫描方式,显示点阵的一行对应一路行选通信号,各行的同一列共用一个列选通信号。当在LED点阵上显示汉字时,只要在行、列显示数据控制下让显示牌上相应的发光二极管点亮就可以了,一次点亮一行,依次点亮各行,利用视觉暂留原理,只要速度足够快就会产生连续的视觉效果14。LED点阵显示功能主要是通过单片机向74HC595传输数据来实现的。实现74HC595传输数据程序如下:void sendd

31、ata(UINT datah,UINT datal) for(i=0;i<16;i+) clk595=0;m=datah; /行为高电平驱动n=datal; /列为高电平驱动m&=0x0001; /送最低位n&=0x0001;datah595=(m=0x0001); /每一周期,同时送出行和列的1bit串行数据datal595=(n=0x0001);datah>>=1; datal>>=1;clk595=1;delay(2);str595=1; /一行数据送完,锁存到输出端进行显示str595=0;首先将要显示的4个16×16点阵的汉字点

32、阵字模存储在数组中。65c256内存储区的值是随机的,所以要先将数组displaydata清零,然后调用读256子程序,将数据存储在临时存储区TempStorage,再根据汉字个数将点阵字模存储在displaydata中。程序代码如下。for(j=0;j<224;j+)displaydataj=0x00;FLASHRead(unsigned char*)(TempStorage),192);hznum=TempStorage0.Piece0; / 汉字个数for(k=0;k<hznum;k+) / 数据存储在数组disdaya224 j=0; if(k=0)j=1; hznum=3

33、2*hznum; for(;j<64,i<hznum;j+) temp=TempStoragek.Piecej; displaydatai=temp; i+; LED点阵显示可实现静态显示、动态显示(左右)、动态显示(上下)。3.4.2.1 静态显示依次发出行数据和列数据,在时钟、锁存、输出信号的控制下,点亮发光二极管,显示点阵字模对应的汉字。由于动态显示速度过快,人体肉眼来不及分辨所显示的汉字,因此先是静态显示汉字,停留几秒钟后,再是动态显示,如此循环。根据硬件条件,所以先从最后一列开始送数据,再依次送出前一列,行数据亦如此。静态显示子程序流程图如图3-5所示。图3-5 静态显示

34、子程序流程图静态显示部分程序:void display() uint j,k; uchar i; j=0x0001; /赋列初始数据 for (i=0;i>64;i+=2) /换表的地址 P1=k%256; /取出低8位 h1=1; /开行1锁存器 h1=0; /关行1锁存器 P1=k/256; /取出高8位 h2=1; /开行2锁存器 h2=0; /关行3锁存器 j<<=1; /j左移1位指向下一行 P1=tabi; /送列1数据 lie1=1; /开列1锁存器 lie1=0; /关列1锁存器 P1=tabi+1; /送列2数据 lie2=1; /开列2锁存器 lie2=0

35、; /关列2锁存器 P1=tabi+32; /送列3数据 lie3=1; /开列3锁存器 lie3=0; /关列3锁存器 P1=tabi+33; /送列4数据 lie4=1; /开列4锁存器 lie4=0; /关列4锁存器 delayms(); P1=0xff; /送灭显示数据 h1=h2=lie1=lie2=lie3=lie4=1; /开所有的片选 h1=h2=lie1=lie2=lie3=lie4=0; /关所有的片选 3.4.2.2 动态显示(左右)动态显示主要是产生左移效果,汉字点阵字模是以每一行为单位取模,所以左移时,将每一行上的数据依次左移一位,直至全部汉字左移结束。为了让左移效果

36、更好,在每次移位之前进行一定的延时14。图3-6为动态显示子程序流程图。图3-6 动态显示子程序流程图(左右)点阵水平移位部分程序:bit bdata bi_tmp;/左移的寄存器if (color=RED)/指定移动红色#ifdef Redif(L_R=Left) ptr_Buf1=&Dot_data_R_ROW-1;/获取倒数一行结束地址else ptr_Buf1=&Dot_data_R0; /获取第一行的起始地址else return; /若未定义红色,不处理,直接退出endifif(L_R=Left)for(i=0;i<(_ROW*(_COL/8);i+) /左移

37、,循环次数为缓冲区字节数*ptr_Buf1<<=1;if(bi_tmp)(*ptr_Buf1)+; /把后面字节高位补到前面字节低位bi_tmp=CY;/ASM:MOV C,#bi_tmp,保存该字节的最高位ptr_Buf1-;for(i=0;i<_ROW;i+)/调整每行的最后一个点ptr_Buf1+=(_COL/8);/修正指针,指向第i行最后一个字节*ptr_Buf1=(*ptr_Buf1) && 0xFE | (*ptr_source);ptr_source+;3.4.2.3 动态显示(上下)为了实现按照宏定义实现16行(或32行)竖直方向滚动。先定义

38、出缓存的地址,若定义的为红色,获取第一行和第二行的地址结束地址,再获取倒数第二行和第一行结束地址,再将数据指针移到数据末,若未定义红色,不处理,直接退出。后用FOR循环语句,将第二行向第一行移动,通过循环,实现点阵的上下移位。注意移动结束_ROW-1行后,把数据填入最后一行。倒数一行向倒数上一行移动,同样移动结束_ROW-1行后,把数据填入最后一行。如图3-7所示14。图3-7 动态显示子程序流程图(上下)点阵垂直移位部分程序:if (color=RED)/指定移动红色#ifdef Redif(UP_DOWN=UP)ptr_Buf1=&Dot_data_R0,ptr_Buf2=&

39、;Dot_data_R1; /获取第一行和第二行的起始地址elseptr_Buf1=&Dot_data_R_ROW-1 ptr_Buf2=&Dot_data_R_ROW-1-1 /获取倒数第二行和第一行地址结束地址 ptr_source+=(_COL/8-1); /数据指针移到数据末else return;/若未定义红色,不处理,直接退出endifif(UP_DOWN=UP)for(i=0;i<(_ROW-1);i+)for(j=0;j<_COL/8;j+)*ptr_Buf1=*ptr_Buf2;/第二行向第一行移动ptr_Buf1+;ptr_Buf2+;for(j

40、=0;j<_COL/8;j+) /移动结束_ROW-1行后,把数据填入最后一行*ptr_Buf1=*ptr_source;ptr_source+;ptr_Buf1+;elsefor(i=0;i<(_ROW-1);i+)for(j=0;j<_COL/8;j+)*ptr_Buf1=*ptr_Buf2;/倒数一行向倒数上一行移动ptr_Buf1-;ptr_Buf2-;for(j=0;j<_COL/8;j+)/移动结束_ROW-1行后,把数据填入第一行*ptr_Buf1=*ptr_source;ptr_source-;ptr_Buf1-;3.5 存储器模块设计3.5.1 模块实

41、现的功能本电路采用74HC573锁存器和62C256静态数据存储器RAM的扩展。该模块实现的功能:a.存储U盘数据,由单片机写入;b.提供高速的显示数据输出,由单片机读出。 3.5.2 模块设计思想及说明62C256是32K的低功耗静态RAM存储器,用P0和P2来扩展外部RAM就是用P0和P2与62C256对应的管脚相连接,假设P2.7接WR,P2.6接RD,P2.5接CS,那么就可以确定外部RAM的一个地址,想往外部RAM的一个地址写一个字节时,地址可以定为XBYTE 0x4000,其中WR,CS为低,RD为高,那就是高位的4(0100 也就是P2.7和P2.5输出了低电平,而P2.6输出了

42、高电平,目的当然是要选通62C256并且向62C256写入数据),其它位的可以根据情况自己定,现在我们向62C256中写个26进去就可以使 用这条语句:XBYTE 0x4000 = 26。MCS-51单片机系统扩展时,一般使用P0口作为地址低8位(与数据口分时复用),而P2口作为地址高8位,它共有16根地址总线,寻址空间为64KB。存储器设计软件流程如图3-8、3-9所示。图3-8 存储器写入数据流程图图3-9 存储器读数据流程图62C256的读写测试程序:void write() uchar i; add=0x4000; /数据存储的起始地址 for(i=0;i <14;i+) /连续

43、存储14个数据 *add=tempi; add+; void read() uchar i,t; add=0x4000; /读取数据的起始地址 for(i=0;i<14;i+) /连续读取14个数据 t=*add; add+; 3.6 实时钟模块设计3.6.1 模块实现的功能实时钟模块设计是为了在LED点阵显示屏上显示对应的时间,也是本设计的一部分。本时钟芯片由数字时钟芯片DS1302构成,DS1302是DALLAS公司推出的串行接口实时时钟芯片。它既提供实时时钟,又把关键的数据位存储于RAM。芯片使用简单,外部连线少,在智能化仪表及自动控制领域具有广泛用途。3.6.2 程序设计思想实时

44、钟子程序:void Write_Ds1302_Byte(unsigned char temp) unsigned char i; for (i=0;i<8;i+) /循环8次 写入数据 SCK=0; SDA=temp&0x01; /每次传输低字节 temp>>=1; /右移一位 SCK=1; void Read_RTC(void)/读取 日历 unsigned char i,*p; p=read_rtc_address; /地址传递 for(i=0;i<7;i+)/分7次读取 秒分时日月周年 l_tmpdatei=Read_Ds1302(*p); p+; voi

45、d Set_RTC(void)/设定日历unsigned char i,*p,tmp;for(i=0;i<7;i+) /BCD处理tmp=l_tmpdatei/10;l_tmpdatei=l_tmpdatei%10;l_tmpdatei=l_tmpdatei+tmp*16; Write_Ds1302(0x8E,0X00); /打开写保护p=write_rtc_address; /传地址 for(i=0;i<7;i+) /7次写入 秒分时日月周年 Write_Ds1302(*p,l_tmpdatei); p+; Write_Ds1302(0x8E,0x80); /关闭写保护3-10

46、实时钟模块软件流程图3.7 数据通信模块设计3.7.1 数据通信模块实现的功能数据通信模块设计主要实现的功能为实现电脑与单片机的通信,使PC机上编辑的软件程序下载到单片机。51系列单片机内部的串行口具有通信的功能,该串行口可以作为通信接口,与PC机的串行口COM1和COM2进行串行通信。3.7.2 数据通信模块程序设计说明在设计中采用的MAX232芯片是MAXIM公司生产的低功耗、单电源双RS232发送接收器适用于各种EIA-232E和V28V24的通信接口。PC机COM口的输入输出为RS-232C电平,而51单片机串行口的输入输出均为TTL电平。由于TTL电平和TS-232C电平互不兼容,所

47、以两者接口时,必须进行电平转换。电平转换最常用的芯片是传送驱动器MC1488和接受器MC1489,其作用除了电平转换外,还实现正负逻辑电平转换。PC机和单片机通信时,首先分别对各自的串行口进行初始化,确定串行口工作方式,设定波特率(两者应设置一致)、传输数据长度等,然后才开始数据传输,这些工作是由软件来完成的,因此对PC机和单片机均需有相应的通信软件。数据通信模块相关流程图如图3-11。图3-11 数据通信模块相关流程图在DOS环境下,串行通信一般用中断方式来实现,用户对通信端口进行完全控制。而在Windows环境下,系统禁止应用程序直接对硬件进行操作。在Windows环境下提供了完备的API

48、应用程序接口函数,程序员通过这些函数与通信硬件接口。通信函数是由中断驱动的,发送数据时,先将其放入缓存区,串行口准备好后,就将其发送出去,传来的数据迅速申请中断,使Windows接受它并将其存入缓冲区,以供读取。接受方式主要有查询和中断方式。采用查询方式时,CPU要不断测试串口是否有数据,以防接受串口数据时出现错误、效率低;而采用中断方式则无需测试串口,一旦有数据传至,CPU暂停当前任务,由中断服务程序完成操作。程序由STC-ISP(下载编程烧录软件)下载到单片机中。数据通信模块相关程序:#include <reg52.h>sbit RE_DE=P32; /定义P3.2为接收、发送

49、使能端void InitSerial() SCON=0x50; /8位数据、接收使能 TMOD=0x20; /8位可自动重装定时器/计数器T1 TH1=0xFD; /波特率9600 TL1=0xFD; TR1=1; /启动定时器void main() unsigned char temp; InitSerial(); /串口初始化 while(1) RE_DE=0; /232接收while(!RI);temp=SBUF; /接收从PC机发送过来的数据RI=0;RE_DE=1; /232发送TI=0;SBUF=temp; /将接收到的数据返回给PC机while(!TI); 3.8键盘输入模块设计

50、3.8.1 键盘输入模块实现的功能键盘输入模块实现的功能为:当键盘有键按下时,执行对应的子程序。如按下读U盘键时,则把U盘中的数据存入存储器中。3.8.2 键盘输入模块程序设计说明键盘分编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码实现,并产生键编码号或键值的称为编码键盘,如计算机键盘;而靠软件编程来识别的称为非编码键盘。在单片机组成的各种系统中,用的最多的是非编码键盘,也有用到编码键盘的。非编码键盘有分为:独立键盘和行列式(又称为矩阵式)键盘。在这里我们用到的是独立键盘,独立键盘具有电路配置灵活, 软件结构简单等优点。独立式按键是各按键相互独立, 每个按键单独占用一根I/O 口线,

51、 每根I/O 口线的按键工作状态不会影响其他I/O 口线上的工作状态。因此, 通过检测输入线的电平状态可以很容易判断哪个按键被按下了。按键在闭合和断开时,触点会存在抖动现象,如图3-12所示。 图3-12 按键波形图按键的稳定闭合期,由操作人员的按键动作所确认,一般为十分之几秒到几秒的时间。为了保证CPU对键的一次闭合,仅做一次键输入处理,所以在编程操作中我们要进行消抖。通常去除抖动影响的措施有硬、软件两种,对于系统软件量不大的场合,采用软件去除抖动既节约硬件开销,又很实用且有效。采用软件去除抖动影响的办法是:检测到有键按下时,执行一个10ms的延时程序后,再确认该键电平是否仍然保持闭合状态电平,如保持闭合状态电平则确认确实有键按下,从而消除了抖动的影响。键盘扫描相关程序

温馨提示

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

评论

0/150

提交评论