参考基于单片机控制动态扫描文字显示系统的设计毕业论文内容摘要:

输技术 . 行扫描驱动 由于 8x32 点阵显示器有 8行,为充分利用 单片机的接口。 本系统使用 AT89S52的 P1 口作为行选择 输出。 同一个时刻只 有 一个 端口 位有效, 这样有 8 个不同的端口位 就会形成 8种不同的 输出状态, 然后使每种状态只 控制一路输出,即会有 8 路输出 [22]。 如果一行 32 点全部点亮。 则通过 P1 口 的 电流将达 320 mA,而实际上, P1 端口 提 供不了足够的吸收电流来同时驱动 32 个 LED 同时 点亮,因此, P1 端口的 每一路输出端与 8x32 点阵显示器对应的每一行之间用一个三极管来将电流信号放大。 本系统 选用的是 最大耐压为 100V, 最大连续电流 为 5A 的达林顿 三极管 TIP122。 由上述介绍, 行扫描驱动 电路原理图如图 所示。 这样, P1 端口 某 一输出 引 脚为 高 电平时 , 对应的三极管 导通, 从而使 LED点阵显示器的对应行也为 低 电平。 图 中 R1 为限流电阻, R10 是为了保证在 P1 端口输出低电平,三极管截止时能够保证 集电极有效地高电平 [23]。 第 12 页 共 72 页 图 行扫描驱动 列扫描驱动 本系统 列 扫描驱动电路的设计可用串 入 并出的通用集成电路 74HC595 来作为数据锁存 [24]。 74HC595 是一个八位串行输入三态并行输出的移 位寄存器,其管脚见图 ,其中 SI是串行数 据的输入端, RCK 是存储寄存器的输入时钟, SCK 是移位寄存器的输入时钟 , Q7H 是串入数据 的输出, G 是对输入数据的输出使能控制,QA~ QH为串 入 数据的并行输出 , 其个引脚详细描述 如表 所示。 第 13 页 共 72 页 图 74HC595引脚结构图 表 74HC595引脚功能说明 从 SI 口输入的数据可 在移位寄存器的 SCK 脚上升沿的作用下输入到 74HC595中.并在 RCK脚的上升沿作用下将输入 的数据锁存在 74HC595 中,这样,当 G为低电平 时,数据便可并行输出。 本系统使用 P2 端口模拟串口来分别输出串行数据、移位时钟 SCK、存储信号 RCK 和并行输出的使能信号 G。 第 14 页 共 72 页 表 74HC595最大限定范围 由表 所示的最大限定范围中得知 74HC595 的输出断电流最大为 35mA, 足够满足 单个 LED的 驱动 显示,同时输出端电压也满足功能要求。 由此可以把 74HC595的输出直接连接到点阵 LED 显示模块的列线上 [25]。 在 Proteus 中 74HC595 串行数据引脚为 DS、移位时钟 SH_CP, 存储信号 ST_CP, 并行输出的使能信号 /OE,复位信号 /MR。 如 图 所示 为 列 显示驱动 的 原理图 ,数据从 输出,经过 U1 的 DS 引脚进入然后经过 8 个 SH_CP 脉冲从 U1的 Q7’ 输出到 U4的 DS, 数据 以同样 的 方式进入到后面的 3个 74HC595中。 最后 驱动一个 ST_CP脉冲把 输入 的数据锁存在 74HC595中 ,从 Q0~Q7输出到点阵 LED显示模块的列线上。 图 列 扫描驱动 原理图 扫描显示工作过程 将 4 片 74HC595 进行级连,共用一个移位 时钟 SH_CP 及数据锁存信号 ST_CP。 第 15 页 共 72 页 这样,当第一行 需要显示的数据经过 4x8=32 个 SH_CP 时钟后便可将 其全部移入74HC595 中。 此时还将产生一个数据 锁存信号 RCK 将数据锁存在 74HC595 中。 并在使 能信号 /OE的作用下.使串 入 数 据并行输出。 从而 使与各输出位对应的 列选线驱动 处于 高电平 或截止状态;同时由行扫描控制电路产生信号使第一行扫描管导通,相当于第一行 LED 的 负端 都接 地 ,显 然,第一行 LED 管的亮灭就取决于 74HC595 中的 锁存信号;此外,在第一行 LED 管点亮的同时 , 再在 74HC595 中移 入 第二行需要显示的数据,随 后将其锁存,同时由行扫描控制电路将第一行扫描管关闭而接通第二行,使第二行 LED 管点亮, 以此类推,当第 八 行扫描过后再回到第一行,这样 ,只要扫描速度足够高 , 就可形成一幅完整的文字或图像 [26]。 第 16 页 共 72 页 3 软件 设计 Keil技术简介 Keil C51 是 美国 Keil Software 公司出品的 51 系列兼容单片机 C 语言软件开发系统,与汇编相比, C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。 用过汇编语言后再使用 C来开发,体会更加深刻 [27]。 单片机开发中除必要的硬件外,同样离不开 软件 ,我们写的汇编语言源程序要变为 CPU 可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。 机器汇编是通过汇编软件将源程序变为机器码,用于 MCS51 单片机的汇编软件有早期的 A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil 软件是目前最流行开发 MCS51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持 Keil 即可看出。 Keil 提供了包括 C编译器 、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个 集成开发环境 ( uVision)将这些部分组合在一起。 运行 Keil 软件需要 Pentium 或以上的 CPU,16MB 或更多 RAM、 20M 以上空闲的硬盘空间、 WIN9 NT、 WIN20 WINXP 等 操作系统。 掌握这一软件的使用对于使用 51 系列单片机的爱好者来说是十分必要的,如果你使用 C 语言编程,那么 Keil 几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用 C 语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。 1. 系统概述 Keil C51 软件提供丰富的库函数和功能强大的集成开 发调试工具,全 Windows界面。 另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到 Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。 在开发大型软件时更能体现高级语言的优势。 下面详细介绍 Keil C51 开发系统各部分功能和使用 [28]。 2. Keil C51 单片机软件开发系统的整体结构 C51工具包的整体结构, uVision 与 Ishell 分别是 C51 for Windows 和 for Dos的集成开发环境 (IDE),可以完成编辑、编译、连接、调试、仿真等整个开发 流程。 第 17 页 共 72 页 开发人员可用 IDE 本身或其它 编辑器 编辑 C或汇编源文件。 然后分别由 C51 及 C51编译器编译生成目标文件 (.OBJ)。 目标文件可由 LIB51 创建生成库文件,也可以与库文件一起经 L51 连接定位生成绝对目标文件 (.ABS)。 ABS 文件由 OH51 转换成标准的 Hex 文件,以供调试器 dScope51 或 tScope51 使用进行 源代码 级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如 EPROM 中 [29]。 本系统的单片机程序利用 Keil uVision 进行程序设计, 如图。 图 keil下程序设计 以下介绍整个系统的程序流程,具体程序参见附录 A。 主程序 流程 第 18 页 共 72 页 图 主程序流程图 如 所示 图所示为 单片机的主程序流程图 ,用以 实现四个 8x8 点阵构成 的8x32 点阵显示 模块 的 动态扫描 控制。 每个文字占一个 8x8 点阵,由此可以同时显示四个文字。 但是利用文字的移动,可以实现显示超过四个文字的动态扫描文字显示系统 [30]。 在本系统中,在 AT89S52 单片机中为显示文字开辟了 6x8Byte 的 显示 RAM。 如表 为显示位置与显示 RAM 的关系。 在显示 RAM初始化 的过程中 , 显示 RAM中共 保存了需要显示的 6个文字扫描代码 ,其中 :  Ram[0][0]~ Ram[0][7]为第一块 8x8LED 点阵显示的列扫描代码 ;  Ram[1][0]~ Ram[1][7]为第 二块 8x8LED 点阵显示的列扫描代码;  Ram[2][0]~ Ram[2][7]为第三块 8x8LED 点阵显示的列扫描代码;  Ram[3][0]~ Ram[3][7]为第四块 8x8LED 点阵显示的列扫描代码;  Ram[4][0]~ Ram[4][7]为第五块 8x8LED 点阵显示的列扫描代码;  Ram[5][0]~ Ram[5][7]为第六块 8x8LED 点阵显示的列扫描代码; 虽然有 6 块 8x8LED 点阵显示代码,但是只有 Ram[0][]、 Ram[1][]、 Ram[2][] 、开始 变 量定义 端口初始化 Count=N。 No Yes RAM数据移位 显示 RAM初始化 显示子程序 Count=0 Count++ 第 19 页 共 72 页 Ram[3][]能够被显示, 其余的通 过 Ram 数据的移位来达到显示效果。 例如:在本系统中通过 Ram 数据的整体左移来显示所有的数据。 在图 主程序流程图 中显示子程序用以实现 Ram[0][]、 Ram[1][]、 Ram[2][]、 Ram[3][]数据的显示, Ram 数据移位过程用以实现数据的整体移位。 表 显示 RAM示意 Ram[0][0] Ram[1][0] Ram[2][0] Ram[3][0] Ram[4][0] Ram[5][0] Ram[0][1] Ram[1][1] Ram[2][1] Ram[3][1] Ram[4][1] Ram[5][1] Ram[0][2] Ram[1][2] Ram[2][2] Ram[3][2] Ram[4][2] Ram[5][2] Ram[0][3] Ram[1][3] Ram[2][3] Ram[3][3] Ram[4][3] Ram[5][3] Ram[0][4] Ram[1][4] Ram[2][4] Ram[3][4] Ram[4][4] Ram[5][4] Ram[0][5] Ram[1][5] Ram[2][5] Ram[3][5] Ram[4][5] Ram[5][5] Ram[0][6] Ram[1][6] Ram[2][6] Ram[3][6] Ram[4][6] Ram[5][6] Ram[0][7] Ram[1][7] Ram[2][7] Ram[3][7] Ram[4][7] Ram[5][7] 显示区 非显示区 第 20 页 共 72 页 端口初始化 程序 设计 图 端口初始化流程图 图 AT89S52 的端口初始化流程图,其中行选端口( P1)初始化使所有的行选无效。 74HC595 初始化 使 74HC595 的 数据端口位高电平, 时钟端口位低电平无效,输出使能为无效,复位无效。 显示 RAM 初始化子程序 设计 图 显 示 RAM初始化 开始 结束 变量定义 行 j=0 j8? Ram[0][]=中 [] Ram[1][]=北 [] Ram[2][]=N[] Ram[3][]=U[] Ram[4][]=C[] Ram[5][]=0 Y N 开始 行选端口初始化 74HC595初始化 结束 第 21 页 共 72 页 图 RAM 的初始化过程 ,首先进行变量定义,然后 进入循环初始化的过程。 j代表行,总共 8行数据,每行有 6x8Byte 的数据。 在默认的时候系统要实现在 LED 点阵显示屏上显示“中北 NUC ”,所以在这里把“中北 NUC ”代码存入显示 RAM 中。 显示子程序 设计 图 LED 点阵的显示子程序,首先进行变量定义,然后 进入 循环 扫描行列代码 过程。 j代表行,总共 8行数据, 从第 0行开始到第 7行。 i 代表列,总共显示 4 个 显示 列块,每个 列 块 1 个字节的数据(即 8 个点)。 由于列代码为串行输出给 74HC595,所以在列代码扫描循环中,需要使用小循环进行列代码的移位输出。 列代码数据输出结束后使 74HC595 输出三态,然后锁存列代码数据,接着输出行代码数据,最后打开 74HC595,这样就能在显示上一个数据的同时变化行列代码数据,提高了扫描程序的效率。 第 22 页 共 72 页 图 显示 RAM初始化 子程序 结束 行。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。