1、本科毕业论文 (20 届) 基于单片机的 LED 点阵屏系统设计与仿真 所在学院 专业班级 电气工程及其自动化 学生姓名 指导教师 完成日期 毕业设计开题报告 姓名 性别 学 院 信息与电气工程 年 级 学号 题 目 基于单片机的 LED 点阵屏系统设计与仿真 课题来源 教师推荐 课题类别 应用研究 选题意义(包括科学意义和应用前景,研究概况,水平和发展趋势,列出主要参考文 献目录): 我国 LED 显示屏行业的主要产品不仅在国内占有绝对的市场,同时在全球市场也占据了一定的 份额,形成了稳定的出口。产品质量和可靠性总体上有了显著的提升,国内 LED 显示屏应用企业在 重大项目和重点工程建设中表
2、现出色,在国际市场竞争、大型显示系统工程承接实施等方面的能力 显著提高。 LED 点阵显示屏是一种简单的汉字显示器,具有廉价、易于控制、使用寿命长等特点,可用于 车站、银行、码头、公共汽车等显示服务信息。而且随着现代化的发展,能源不断的消耗,生产的 不断扩大,更使得 LED 显示屏得到广泛的应用。 主要参考文献: 1 孙育才. 单片微型计算机及其应用M. 南京: 东南大学出版社, 2004. 2 郭金影. 基于单片机的 LED 显示屏设计与 PROTEUS 仿真 D. 山东: 大连交通大学机械电子工 程,2010. 3 N. Aizar Abdul Karim, P. A. Aswatha N
3、arayana,K. A. Seethearamu. Thermal Analysis of LED packageJ. Microelectronics International,2006, 23(I):19-25. 4 熊雨凯,吴光敏. 嵌入式大屏幕 LED 显示屏的设计与实现J. 现代电子技术,2006,22:43- 44. 5 谢维成,杨加国.单片机原理与应用及 C51 程序设计M. 北京: 清华大学出版社, 2006. 6 汤竞南,沈国琴. 51 单片机 C 语言开发与实例M. 北京: 人民邮电出版社, 2008. 7 远飞. 基于 PROTEUS 的 LED 滚屏设计与仿真J.
4、电子元器件应用, 2009, 11(6):38-40. 8 彭伟. 单片机 C 语言程序设计实训 100 例M. 北京: 电子科技出版社, 2009. 9 周润景,张丽娜. 基于 PROTEUS 的电路及单片机系统设计与仿真M. 北京: 北京航空航天出 版社, 2006. 10 陈莹. 基于 PROTEUS 的微机接口仿真设计Z. 中国知网, 2012. 研究主要内容和预期结果(说明具体研究内容和拟解决的关键问题,预期结果和形式, 如在理论上解决哪些问题及其价值,或应用的可能性及效果): 主要内容和要求: 1. 自制一台简易 16 行32 列点阵显示的 LED 电子显示屏。 2. 自制显示屏控
5、制器,扩展键盘和相应的接口实现多功能显示控制,显示屏显示数字和字母亮度 适中,应无闪烁。 3. 显示屏通过按键切换显示数字和字母。 4. 显示屏能显示 4 组特定数字或者英文字母组成的句子,通过按键切换显示内容。 5. 能显示 4 组特定汉字组成的句子,通过按键切换显示内容。 可能出现的问题及解决途径: 1. 因为要制作 1632 的点阵显示屏,单片机的灌电流能力可能不足以拉动所有 LED 灯。可能需 要增加上拉电阻增加电流。 2. 使用使用动态扫描型驱动方式,为了显示清晰不闪烁要选择适当的刷新频率。经过查阅资料得 知刷新速率需要大于 50HZ 人眼才能停留画面。具体速率需在仿真和调试时确定。
6、 3. 由于点阵屏规格为 1632,单片机 I/O 口不够所以需要扩展行选和列选电路,暂定为 74HC138 和 74HC595。 4. 显示特定数字字母汉字的进制码。需要仔细了解行选片选电路以及点阵屏的工作原理。 拟采取的研究方法和技术路线(包括理论分析、计算,实验方法和步骤及其可行性论 证,可能遇到的问题和解决方法,以及研究的进度与计划): 研究方法: 1. 先查阅大量相关论文与资料,对简易点阵电子屏有一个大局上的认识和掌握。 2. 在程序编写中解决可能出现的一些细节问题。 3. 在仿真软件上进行硬件电路搭设。 4. 将程序拷入仿真软件中进行调试。 5. 如果没有得到预期结果则查找原因,反
7、复调试,直到成功。 6. 在上述步骤中途中遇到难以解决的问题需上网查阅解决方法或向指导老师求助。 研究进度: 1. 2013.1.7-3.10 查阅资料、调研,准备论文开题。 2. 2013.3.11-3.16 完成开题报告。 3. 2013.3.17-3.20 开题情况检查。 4. 2013.3.21-4.30 形成论文初稿。 5. 2013.5.02-5.07 论文中期检查。 6. 2013.5.08-5.22 修改、定稿。 7. 2013.5.23-5.27 填写结题报告,准备答辩的电子讲稿。 8. 2013.6.01-6.02 参加论文答辩 - 指导教师意见(对论文选题的意义、应用性、
8、可行性、进度与计划等内容进行评价, 填写审核结果:同意开题、修改后再开题、不同意开题): 该生通过与课题组成员和老师充分讨论,参考了许多文献,确定了具有一定的市 场价值的课题。本课题初步确定的电路原理图合理,设计思路基本明确,通过设计和 研究可以提高开发电子产品的能力。本课题的研究方法和研究步骤基本合理,难度合 适,学生能够在预定时间内完成该课题的设计。 同意该课题开题。 签名: 年 月 日 院(系)毕业论文(设计)领导小组意见: (签章) 年 月 日 毕业设计结题报告 姓名 性别 学 院 信息与电气学院 年 级 学号 题 目 基于单片机的 LED 点阵屏系统设计与仿真 课题来源 教师推荐 课
9、题类别 应用研究 本课题完成情况介绍(包括研究过程、实验过程、结果分析、存在的问题及应用情况 等。 ) 通过对基于单片机的 LED 点阵屏系统的硬件设计,对一些芯片例如 74HC138、74HC595、DS1302 的原理有了更深刻的了解,通过软件仿真,大大提高了 C 语言编程 能力和 PROTEUS 仿真软件的应用能力。设计通过选择芯片,硬件仿真搭设,软件程序设计这一流 程完成,最终实现了显示汉字、数字、字母以及可调时钟的功能,并且汉字可滚动显示。不足的地 方在于程序不够灵活,使有的按键时间延长,且显示内容是固定的,没有与上位机相连。本设计的 系统原理可应用于公共场所 LED 点阵屏的数字汉
10、字显示。 指导教师评语: 该设计所做 LED 点阵显示屏设计比较符合当前的实际,具有一定的实践价值和理论意义,在 吸收研究成果的基础上,有自己的心得和看法,文献材料收集详实,运用所学知识解决了过程中所 遇到的问题。 该同学自学能力比较强,通过阅读文献,以单片机为核心器件,通过外部扩展电路成功显示设 计所要求的数字、汉字、字母,并扩展了滚动以及可调电子表的功能。 经过多次修改,该设计已达到本科毕业设计的相关要求。 经审阅,该设计是一个较好的本科毕业设计,同意结题。 签名: 年 月 日 院(系)毕业论文(设计)领导小组意见: (公章) 年 月 日 指导教师 评定成绩 目 录 1 前言 2 2 单片
11、机最小系统硬件平台及软件平台 2 2.1 单片机概述 .2 2.2 单片机组成部分和特点 3 2.3 单片机最小系统 .3 2.3.1 时钟电路 .3 2.3.2 复位电路 .3 2.4 KEIL 软件介绍 .4 3 LED 点阵显示屏及其扩展电路设计 5 3.1 LED 显示屏的结构和特点 .5 3.2 行驱动电路设计 .6 3.3 列驱动电路设计 .8 4 时钟电路及按键电路设计 11 4.1 DS1302 结构与功能 11 4.2 按键设计思想 .13 5 Proteus 硬件仿真 13 6 结束语 14 参考文献 15 附录 A16 致 谢 51 1 基于单片机的 LED 点阵屏系统设
12、计与仿真 摘 要:本设计是基于单片机的简易 1632 LED 点阵显示屏的设计,并且后期通过 Proteus 仿真来验证点阵屏系统设计的基本原理及硬件搭建和软件程序 C 语言的完善程度。 设计选用 STC89C52 单片机作为控制器,行扩展电路采用 2 片 74HC138 级联,列扩展电路 采用 4 片 74HC595 级联,LED 点阵显示屏由 8 块 88 点阵基础模块组成,每 4 块显示一 个汉字或数字,并且加入 DS1302 实现适时时间的显示。通过按键可以分别切换显示数字、 字母和汉字的内容并可以使他们左移循环显示,也可以通过按键显示时钟并可调节时间。 关键词:单片机;LED 显示屏
13、;Proteus 仿真 LED Display Screen System Design and Simulation Based on Single-Chip Microcomputer Abstract: This simple LED display screen is based on Single-Chip microcomputer and it will be simulated through Proteus to identify the principle of LED display screen system and the integrity degree of ha
14、rdware connect and C language. This design is STC89C52 as controller. Two pieces 74HC138 cascade connection compose display line expansion circuit. Four pieces 74HC595 cascade connection controls column drive circuit. LED display screen consisted by the 88LED dot matrix module. Every four of them di
15、splay a word or a figure. And it can display the real time through DS1302.This design can display different figures or words through different keys. These keys also can change the time. Key words: Single-Chip microcomputer; LED display screen; Proteus simulation 2 1 前言 节能问题已成为当今社会发展过程中不可忽视的环节,LED 显示
16、屏因其可视距 离远、无污染、寿命长、可回收利用的优点受到广泛关注和重视,被称为 21 世纪最 有发展前景的绿色能源。目前全球已大概形成以亚洲、北美、欧洲三足鼎立的产业 格局。值得一提的是,我国 LED 产业近年来也已步入世界领先水平,相比以前制造 工艺得到极大提高。 在二十世纪九十年代以前,LED 仅仅只是作为指示灯来使用。九十年代以后随 着技术的发展,逐渐向照明这一领域转变。这一领域主要包括交通信号灯,汽车灯, 通用照明以及 LED 点阵显示屏。本设计就属于 LED 点阵显示屏系统的基础设计。 LED 显示屏产生于二十世纪七十年代,刚开始只是用来显示简单的数字、文字。但 随着 LED 技术的
17、发展,包括发光二极管的亮度提高以及颜色的多样化,让 LED 显 示屏运用到户外场地成为了可能。LED 显示屏已然深入到人们生活的各个方面,而 由于其绿色环保节能等优点,相信 LED 灯取代白炽灯照明已成为以后发展的趋势。 本文共分四大部分论述,第一部分主要介绍点阵显示屏系统的控制器 STC89C52,以及由复位电路和时钟电路为主要组成的最小系统。第二部分主要介绍 88LED 点阵显示屏基础模块的内在构造以及实现 8 块级联所需的外围扩展电路。第 三部分为实现时钟显示功能的硬件设计以及实现所有功能的按键设计。第四部分为 通过 Proteus 仿真软件来对 LED 点阵显示屏系统的硬件模拟。 2
18、单片机最小系统硬件平台及软件平台 2.1 单片机概述 单片微型计算机(简称单片机,又称微控制器)是微型计算机家族中的一员。 它不是完成某一个逻辑功能的芯片,而是将微处理器、一定容量的 RAM 和 ROM 以 及 I/O 接口、定时等电路集成在一片芯片上 1。单片机由运算器,控制器,存储器和 输入输出设备构成,相当于一个微型的计算机,与计算机相比,缺少了外围设备等。 2.2 单片机组成部分和特点 单片机内部主要由微处理器、I/O 口、RAM 、ROM、串口、定时/计数器、中断 系统以及特殊功能寄存器组成,在设计时可以满足控制要求 2。单片机作为集成芯片 有如下特点: (1)可扩展,适用性强。C5
19、1 单片机内部 RAM 为 128B,ROM 为 4KB。C52 系列单片机内部 RAM 为 256B,ROM 为 8KB。作为简单的学习开发工具存储容量 就够用了,在系统较大、外围电路较多使内部资源不够用时,可以扩展外部存储器, 以达到符合各种单片机应用系统设计的需求。 (2)集成度高,设计电路方便。单片机集前述所有功能于一身,双列直插 40 3 个管脚只有几厘米大,贴片式单片机则更小,这些特点有利于单片机嵌入各种电路 中发挥作用。 (3)安全可靠。芯片是按工业测控环境设计的,内部布线短,比其它一般 CPU 在工业抗噪方面更有优势。并且单片机在内部固化程序指令、常数和表格等,使其 不易被干扰
20、破坏。 (4)价格低廉,性价比高。一块 STC89C52 单片机只需几块钱,销量极大,符 合学生学习单片机和研究人员开发用的经费要求。 2.3 单片机最小系统 所谓最小系统,是指一个真正可用的单片机的最小配置系统。本设计所用 C52 单片机内部的 8KB RAM 足以容纳所用程序,不需再外扩存储器,所以只要接好时 钟电路以及复位电路两大部分即可。下面将介绍这两部分电路的原理及接法。 2.3.1 时钟电路 89C52 系列单片机内部没有时钟芯片,需要外接时钟电路来提供单片机执行指 令的机器周期,所以时钟电路是单片机正常运行必不可少的一部分。时钟电路是由 一个石英晶体和两个数值大小相同的电容构成的
21、振荡器。如果需要使单片机通过串 口与计算机相连,则要选择 11.0592MHZ 的晶体振荡器,不论多么特殊的值都可以 得到比较准确的通信波特率,从而提高串口通信的可靠性。若是没有要求则在 024MHZ 的范围内都可以。晶振两端的电容取 30pF 左右,具有稳定频率并可以微 调的作用。单片机的基本操作周期叫做机器周期,每个指令都是由若干个机器周期 组成,例如 89C52 系统中分别有单周期指令、双周期指令和四周期指令。一个机器 周期又分为 6 拍 12 个时钟周期,从原理上讲,晶振频率越大,指令执行时间就越短, 单片机系统运行的就越快。但实际上单片机有一个承受范围,超过这个范围单片机 就无法运行
22、,所以在实际操作中晶振频率的选择不宜过高。单片机的 XTAL1 与 XTAL2 为外接晶振引脚。具体接线方式如图 2.1 所示。 2.3.2 复位电路 当单片机内部数据受到外部干扰或程序进入死循环、跑飞时,都会使单片机不 图 2.1 时钟电路 4 能正常运行或者得到不正确的结果,这时就需要单片机从新开始执行程序,刷新特 殊功能寄存器中的数据即复位单片机。RST 引脚即是单片机的复位引脚,规定引脚 为高电平有效,且必须持续 2 个机器周期即 24 个振荡周期才能完成单片机的复位。 复位时间的计算由晶振频率决定,若选用 12MHZ 的晶振,单位时间发出的脉冲数为 12 乘以 10 的 6 次方,即
23、每秒发出 12000000 个脉冲信号,那么发出一个脉冲的时间 就是一个振荡周期为 1/12 微秒,所以复位时间必须持续 2 微秒以上。以上只是理论 计算的最小复位值,实际应用中所接电路有浪涌现象、电路干扰时,如果复位时 间设计的太小,会造成误复位,导致系统故障。一般情况下电容取 10uF,电阻 R 取 10K 左右。具体的复位电路分为自动上电复位和手动复位两种方式,不过现在一 般都将两种方式组合在一起使用。具体接线方式如图 2.2 所示。 2.4 KEIL 软件介绍 KEIL 是由 Keil Software 公司推出的一个重要的单片机开发平台。 Keil 软件的界 面窗口安排简便,操作起来
24、也不复杂,上手还是比较容易的。许多优秀的程序都是 在这个平台上编写的,可以说这是一个比较重要的软件,熟悉它的人很多,用户群 极为庞大,远超过伟福等等厂家的软件用户群,操作上有不懂的可查阅相关的书或 到相关的单片机技术论坛询问,就可以掌握它的基本使用 3。KEIL 软件窗口如图 2.3。 图 2.2 复位电路 图 2.3 KEIL 界面 5 3 LED 点阵显示屏及其扩展电路设计 3.1 LED 显示屏的结构和特点 LED 点阵显示屏就是 light emitting diode,发光二极管的英文缩写。顾名思义, LED 点阵显示屏就是由一系列的发光二极管组成的阵列。通过控制发光二极管的导 通与
25、截止来点亮需要显示的图片、文字、图像等。 LED 发光灯的外形由 PN 结、阳极引脚、阴极引脚和环氧树脂封装外壳组成。 其核心部分是具有注入复合发光功能的 PN 结。环氧树脂封装外壳除具有保护芯片的 作用外,还具有透光聚光的能力,以增强显示效果。LED 器件通常用砷化稼( GaAs ) ,磷化稼(GaP) 等半导体材料制成。当向 LED 器件施加正向电压时,器件内部的电 子与空穴直接复合而产生能量,以光的形式释放出来,产生半导体发光 4。 LED 点阵显示屏按使用环境分类可分为室内屏和室外屏两类。室外光线强度高, 对 LED 显示屏的亮度要求也就高。室内光线环境好,相比之下对 LED 显示屏的
26、亮 度要求也就低一点。LED 点阵显示屏基础模块的点阵数各不相同,分别有 57,88 和 1616 的规格。本设计制作简易 1632LED 点阵显示屏,选用 8 块 88 点阵基础 模块级联,一共分两排上下各四块,一个汉字或数字由 4 块 88 点阵基础模块即 1616 个点阵显示。在应用时钟功能时,将点阵屏从左至右分为 4 块,一块即 168 个点阵显示一个数字。不同功能数字显示规格的不同可以在程序中查表时体现, 1616 点阵需要 32 个 16 进制数,一个进制数控制 8 个点,同理 168 就需要有 16 个进制数的数组来放置。具体控制顺序与点阵显示屏的扩展电路有关,在后面讲到 驱动电
27、路时再详细讲述。一块 88 的点阵基础模块内部结构如图 3.1 所示。 从图 3.1 可以看出所有发光二极管的阴极连在一起组成 8 行,阳极连在一起组成 8 列。要将一行的发光二极管点亮,则需要这一行的输入电平为低电平。而要将某一 点点亮时,只需要将这一点的发光二极管的阳极输入为高电平,其它为低电平。当 行输入为低电平时,无论列输入电平是高是低,发光二极管都无法被导通。这就决 定了点亮某一点时要先选中这一行,再将列电平送入点阵显示屏。作者在写程序时 就应用了这个顺序。在 Proteus 里一块 88 基础模块一共 16 个引脚,上面一排 8 个 图 3.1 复位电路 6 为列引脚,下面一排 8
28、 个为行引脚。 在实际应用中引脚并不是如上述所排列,一排 8 个管脚既有行线也有列线,这 就需要了解所买型号的引脚分布。也可以用万能表自己检测,将量程跳到测二极管 的档,具体测量方法就不再赘述。这里还有一个要注意的地方,从上图可看出将这 个 88 基础模块旋转 90 度就从行共阴变成了行共阳,其实基础点阵模块根本没有共 阴共阳之分,市面上所区分的共阴共阳不过是行共阴或行共阳而已。 3.2 行驱动电路设计 制作 1632 的 LED 点阵显示屏需要行线 16 根和列线 32 根,单片机并不能提供 这么多的 I/O 口,所以需要扩展驱动电路。行驱动电路有两种选择,一种是 74HC154 芯片,一种
29、是 74HC138 芯片。它们的主要区别在于 74HC154 是 416 译码 器,74HC138 是 38 译码器。从电路结构上讲,本设计所做点阵屏一共 16 行用 74HC154 只需一片,相应的用 74HC138 则需要 2 片级联,在简化电路、方便设计方 面应优先选择前者。不过用 74HC138 级联除了线路和程序复杂一点之外,一次控制 8 行具有更好的控制性,可以将画面分 2 部分显示。现在很多市场店面里没有 74HC154,只有 74HC138。用 74HC138 实际成本要低一些,并且本设计并不需要复 杂的行驱动电路,所以基于上述考虑选择 2 片 74HC138 级联作为点阵显示
30、屏的行驱 动电路。74HC138 的引脚图如图 3.2 所示。 如上图所示,74HC138VDD 和 GND 分别是电源端和接地端, A0A 2 端为 3 位 地址输入端,输入 3 位二进制代码,分别接到单片机的 P1.0P1.2 。Y 0Y 7 端为 8 位输出端,低电平有效。E 3 接高电平, E1 和 E2 一起构成使能端且低电平选通,第一 片的使能端连到单片机的 P3.6 口,另一片的使能端连到单片机的 P3.7 口。如此接好 后,P1.0P1.2 输出 3 位二进制代码从 000 到 111 将使 Y0Y 7 依次被选通并输出低 电平,例如 P1.0P1.2 输出 000 时,Y 0
31、 将被选通输出低电平,其他输出口均为高电 平,只有 Y0 所对应的行发亮。然后以此类推, Y0Y 7 依次被选中,所对应的行依次 被点亮。由于一共 16 行,每 8 行由一个 74HC138 点亮,所以两片需要轮流工作。 单片机 P3.6 口先输出低电平, P3.7 口高电平,只选中第一片 138,当第一行到第八 行轮流亮完,P3.6 口输出高电平, P3.7 口低电平,选中第二片 138,从第九行亮到 第十六行,如此往复循环。这是一种动态扫描显示方式。人的视觉暂留频率只有 50HZ,只要整屏的扫描速率大于 50HZ,可观测到的显示屏画面就是静止的。就像 图 3.2 74HC138 管脚图 7
32、 LED 数码管的动态显示一样,不断轮流显示每个数码管的数字,但可观测到的是所 有数码管都在发亮显示,就是应用了这个原理。根据前述原理得到行扫描子程序如 下: void hchoice (uchar s) if(s7) E1=1; E2=0; P1=k-8; k=k+1; E1 代表 P3.6 口即第一片 138 的使能端,E 2 代表 P3.7 口即第二片 138 的使能端。 参数 S 为点阵显示屏亮的行数,P1 口输出 138 的 3 位 2 进制代码,参数 K 调节两片 138 的 2 进制输入都为 000 到 111。 在软件模拟或实物制作时,LED 点阵显示屏可能会出现闪烁现象,出现
33、这个现 象的原因是扫描频率不够高,从软件方面解决就是把每次显示时的延迟函数的参数 调低,尽量不要在扫描函数里添加冗长或循环次数高的子程序,硬件方面可以选用 频率更高的晶振来加快扫描速度。同时扫描频率越高,屏幕亮度也会相应增高。 3.3 列驱动电路设计 每个 88LED 点阵模块称为最小模块。每 4 个 88 的 LED 点阵块为一个基模块, 一个基模块横向有 2 个,纵向有 2 个最小模块。多个基模块按照技术特性组合在一 起就可以构成 LED 点阵显示屏 5。每个基模块各有 16 个行选通信号和 16 个列选通 信号。将 16 个行选通信号 H1H16 分别接到 2 片 138 的输出端上。列
34、驱动电路考 虑到成本的问题选择由 4 个 74HC595 级联组成。 74HC595 的引脚分布如图 3.3 所示。 图 3.3 74HC595 管脚图 8 Q0Q 7 是 8 位数据并行输出端,LED 点阵显示屏一共有 32 列,需要 4 片 74HC595 级联。MR 为主复位端,输入低电平时,芯片内的 8 位数据会被清空,一 般用不到,可与 16 管脚一起接到 Vcc。OE 为芯片使能端,低电平有效,当该引脚 为高电平时,595 内的 8 位数据仍可以在内部移位,不过无法从并行口输出。DS 端 为数据输入端,Q 7为数据输出端,可用于级联。ST_CP 为存储寄存器时钟输入端, SH_CP
35、 为移位寄存器时钟输入端,两者都是上升沿有效。 74HC595 级联方法如下:将 4 片 74HC595 的 MR 端连到一起接到 Vcc,将存储寄 存器时钟引脚 ST_CP 都接到单片机的 P2.2 口,移位时钟寄存器时钟引脚 SH_CP 都 接到单片机的 P2.1 口,第一片 595 的数据输入端 DS 接到单片机的 P2.0 口,数据输 出端 Q7接到下一块芯片的数据输入端 DS,以此类推。使能端 OE 接到 P2.3 口。 因为每 1616 个点阵显示一个汉字清晰可辨,所以安排点阵显示屏上每次并排 显示 2 个汉字或数字。一个汉字显示一行就需要 8 位为一组的十六进制数 2 个,一 共
36、显示 16 行就是 32 个十六进制数,可以将这 32 个十六进制数写入一个数组中,以 供程序查表。这样在进行两字并排静态显示时的过程如下所述,单片机 P2.0 口先输 出第二个汉字第一行的前 8 位,将这 8 位的最高位输入 DS 端的 Q0 位置,然后移位 时钟接口 P2.1 输出高电平,最高位移位到 Q1 位置为下一位的输入提供空间,接着 P2.1 置 0 准备为下次移位时输出高电平,如此循环 8 次将前 8 位移入到第一片 595 中。P2.0 口再输出后 8 位,当第 2 个十六进制数的最高位输入到第一片 595 的 Q0 时, Q7 位置的二进制数将进入第二片 595 的 Q0 端
37、,如此循环 8 次第二个汉字第一行的 16 位就输入完毕。同理再将第一个汉字第一行的 16 位输入完毕后,行选芯片 138 选 中 LED 显示屏的第一行,595 存储寄存器接口 P2.2 由 0 置 1 产生上升沿,4 片 595 里的 32 位二进制数同时输出,这样第一行的显示就结束了。再按上述循环依次显示 第 2 行到第 16 行,只要没有检测到按键按下,就无限循环下去,人眼就可以看到完 整静态显示的两个汉字。先传送汉字的高 8 位还是低 8 位与 595 和点阵显示屏列的 接线顺序有关,显示数字同显示汉字原理一样。据上述原理可得 595 芯片 8 位写入 子函数和显示子函数分别为: v
38、oid hc595_write_data(uchar data_ds) /595 写 unsigned char i; for(i=0;i(8-l); data_ds1=data_ds1(8-l); data_ds3=data_ds30;y-); /*/ void hc595_write_data(uchar data_ds) /595 写 unsigned char i; for(i=0;i(8-l); data_ds1=data_ds1(8-l); data_ds3=data_ds31; for(i=0;i=1; RST_CLR; /*/写入一字节 uchar ds1302_read_by
39、te(uchar add) uchar i,temp; RST_SET;/启动 ds1302 总线 add=add|0x01;/最低位置高 for(i=0;i1; for(i=0;i=1;/数据右移一位 if(IO_R)/相当于 if(IO_R=1) temp|=0x80;/最高位置 1 else temp/置 0; SCK_SET;/下降沿读取数据 SCK_CLR; RST_CLR;/停止 ds1302 总线 return temp; /*/ /写入时间 void ds1302_write_time() uchar i,temp; for(i=0;i8;i+) temp=time_buf1i
40、/10; time_bufi=time_buf1i%10;/ time_bufi=time_bufi+temp*16; write_byte(ds1302_control,0x00);/关闭写保护 write_byte(ds1302_second,0x80);/暂停 write_byte(ds1302_charger,0xa9);/涓流充电 write_byte(ds1302_year,time_buf1);/年 write_byte(ds1302_month,time_buf2);/月 write_byte(ds1302_date,time_buf3);/日 write_byte(ds130
41、2_hour,time_buf4);/时 write_byte(ds1302_minute,time_buf5);/分 write_byte(ds1302_second,time_buf6);/秒 48 /周 write_byte(ds1302_control,0x80);/打开写保护 /*/ /读出时间 void ds1302_read_time() uchar i,temp; time_buf1=ds1302_read_byte(ds1302_year); time_buf2=ds1302_read_byte(ds1302_month); time_buf3=ds1302_read_byt
42、e(ds1302_date); time_buf4=ds1302_read_byte(ds1302_hour); time_buf5=ds1302_read_byte(ds1302_minute); time_buf6=ds1302_read_byte(ds1302_second) time_buf7=ds1302_read_byte(ds1302_day); for(i=0;i8;i+) temp=time_bufi/16; /16 转 10 time_buf1i=time_bufi%16; time_buf1i=time_buf1i+temp*10; /*/ void ds1302_init() RST_CLR; SCK_CLR;