欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > DOC文档下载
 

16&16 LED点阵流水显示实时时钟设计

  • 资源ID:6653277       资源大小:1.77MB        全文页数:32页
  • 资源格式: DOC        下载积分:10积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要10积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

16&16 LED点阵流水显示实时时钟设计

摘 要近年来,随着电子技术的发展,人们对于时钟的要求也越来越高,不仅希望走时精准,还要求字体清晰美观,即使在远处也可看清时间,而不用凑近查看,在夜晚无需任何操作也能看时间。由此我设计了一种由单片机控制的16*16LED点阵滚动显示实时数字时钟,将DS1302实时时钟芯片与LED点阵屏相结合,以此满足人们对时钟的新的要求。本设计采用AT89C51作为数据处理芯片,以DS1302外设时钟芯片作为主要硬件,74HC138译码器及74HC595移位锁存器作为显示的控制芯片,实现小时、分钟、秒时间数据在16*16的LED点阵屏上显示,采用流水式滚动显示设计,并且对小时及分钟可进行调整。该设计的硬件电路简单,体积小巧,所使用的电子元器件较少,占用的单片机IO端口较少所以具有较强的外围功能电路扩展能力,今后如有需要可对系统进行功能升级。本设计采用C语言对单片机编程,因为C语言比起汇编来更加直观易懂,采用模块化程序设计有很强的移植性。与自己所学专业息息相关,运用到了多门专业学科知识:单片机、模拟电路、数字电路等。本设计的重点在于综合运用所学知识设计单片机外围电路,并且采用C语言程序设计出能够满足人们要求的LED点阵屏流水显示实时时钟。关键词:51单片机 C语言 DS1302 实时时钟 LED点阵 目 录第一章 绪 论21.1 应用背景及意义21.2 发展及应用2第二章 主要元件基础知识32.1 AT89C51单片机概述32.1.1 性能参数及引脚图32.1.2 AT89C51内部结构图及各引脚功能介绍42.1.3 功能特性概述62.2 DS1302时钟芯片62.2.1 DS1302概述62.2.2 DS1302引脚功能及结构62.2.3 DS1302的控制字节与读写时序72.2.4 DS1302的寄存器地址与数据读写82.3 74HC595与74HC138数字芯片92.3.1 74HC595概述及引脚功能92.3.2 74HC138概述及引脚功能92.4 16*16LED点阵屏102.4.1 16*16LED点阵构成及点阵内部结构102.4.2 LED点阵内部结构102.4.3 LED点阵显示文字的原理10第三章 16*16点阵流水显示实时时钟介绍123.1 点阵时钟的制作123.2 硬件电路的设计123.3 软件程序的设计153.3.1 程序流程图163.3.2程序设计16第四章 结 束 语19致 谢20参考文献21附 录22前 言随着单片机技术的不断发展,用单片机制作的电子电路日益增多,也更加成熟。功能多样且电路简单,无需很多的电子元件支持,减少了电路成本并且使电路更加稳定。本次设计采用16*16LED点阵屏作为时钟显示。如今,当我们走在街头会看见许多不断闪动的电子广告牌,其超高的亮度以及流水形式运动的文字吸引着路人的眼球。电子广告牌不同于传统的广告牌,传统广告牌自身不会发光,需要另外增加灯具,且显示的内容有限,无法更改,一段时间后会褪色,需要更换广告牌,后期成本巨大。LED点阵形式的电子广告牌则没有这些弊端,本身由超高亮度的LED发光二极管组成,其显示效果自然要好很多,且发光二极管功耗极低,其超长的使用寿命可以减少后期的资金投入,且对显示内容没有限制,因为采用流水式显示方式,其显示内容长度可以说是无限制的,可以随时更换显示的内容,字体图案等。字体显示大且清晰,可见距离远。其控制简单高效,仅由一块单片机及简单的外围电路便可以驱动LED点阵显示屏工作。本次设计采用DS1302作为时钟芯片,本身具有双重电源,主电源提供正常工作时的电能,辅助电源在主电源关闭后仍可维持芯片的正常工作,即断电后再上电时无需重新设置参数,功耗低,内部参数设置后在主电源打开的情况下还可为可充电的辅助电源充电。采用DS1302比用单片机内部定时计数器所做的时钟精度更高,无需占用单片机内部定时计数器,且占用单片机IO资源少,编程简单,并可由此扩展出闹钟,定时器等功能电路。本次设计目的在于运用LED点阵的特点来制作实时数字式时钟,满足人们对时钟精度及可见性的要求。本文对该功能电路的硬件设计有详细的介绍,包括元器件的选用等。具有完整的PROTEUS模拟软件硬件电路以及PROTEL 99SE绘制的实际应用电路。软件方面采用了KEIL UV2软件作为单片机程序的开发软件,全部C语言程序设计,比汇编语言更加简单易懂,且具有很高的可移植性。本文也包括详细的C语言程序,及程序功能介绍。第一章 绪 论1.1 应用背景及意义之前的时钟,基本都没有自带照明光源,在夜晚没有光源的情况下无法看到时间,少数带照明光源的时钟也需要按键之后才会发光,且还需要在黑暗中寻找时钟。而且平时显示也不够醒目,不能远距离看清时间。且时间走时也不太精准,存在较大的误差。现在运用DS1302时钟芯片将时间通过单片机控制的LED点阵显示出来,不但字体清晰美观,使人一目了然,相隔一段距离仍然能够看清时间,在黑暗中无需任何操作也能查看时间,且走时精准。因此为了使时钟达到此要求,有必要深入了解LED点阵以及实时时钟芯片,并设计数字化时钟电路。1.2 发展及应用时钟的发展从最初的机械式时钟到后来的石英电子钟,其计时精度一直在不断提高。现如今出现的实时时钟芯片,已经把时钟精度提到更高的层次。从原来的指针式时钟发展到现如今的数字式时钟,使人们对时间更加明了。普通的指针式时钟只能表示12小时制,对于一些特定情况的人来说十分不便,数字式时钟可以表示24小时制,可以比指针式时钟更直观的来表示时间。LED点阵显示可以说是一种多功能的显示设备,但更多的还是作为广告牌来使用。传统的广告牌体积庞大,不加修饰难以吸引顾客,且内容单一不可更改,如果要更改内容需要换掉整个广告牌,投入巨大。而点阵屏对显示内容无限制,不仅可以显示文字数字英文等,还可以显示普通的图案,显示内容可以随时更改,若采用流水式显示效果则对显示的文字长度也基本没有限制,后期投入小,显示效果好,显示方式也可以多样化。可见距离远。为了满足要求,所以利用LED点阵的显示特点以及DS1302实时时钟芯片的高精度特点,将两者结合起来,制作LED点阵流水显示实时时钟。此数字时钟采用AT89C51单片机作为数据处理及显示控制芯片,DS1302时钟芯片产生高精度的时钟数据,16*16LED点阵屏作为显示器件。74HC138译码器与74HC595移位寄存器作为单片机控制显示输出的辅助芯片,减少单片机IO口的占用数量。第二章 主要元件基础知识2.1 AT89C51单片机概述AT89系列单片机是美国ATMEL公司开发的一个单片机系列,其中最具代表性的AT89C51型单片机在我国非常流行。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压,高性能CMOS 8位微处理器,俗称单片机。其内部还集成有128B的RAM并可与ROM一起分别扩展至64KB。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。如今ATMEL公司还开发出了AT89C51的升级版单片机系列,AT89S系列单片机,拥有更加强大的功能,内部储存数据容量也更大,且支持ISP在线编程模式。2.1.1 性能参数及引脚图图1 AT89C51单片机外形及引脚图AT89C51主要性能参数:1)与MCS-51 兼容 2)4K字节可编程存储器 3)寿命:1000写/擦循环4)数据保留时间:10年5)全静态工作频率:0Hz-24MHz6)三级程序存储器锁定7)128 B内部RAM8)32个可编程I/O口9)两个16位定时/计数器10)5个中断源 11)可编程串行通道12)低功耗设置和掉电模式13)片内振荡器和时钟电路2.1.2 AT89C51内部结构图及各引脚功能介绍图2 AT89C51内部结构图VCC:供电电源正极。GND:供电电源负极。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FLASH编程时,P0 口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高。作为输入时,P2口的管脚被外部拉低。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平。P3口也可作为AT89C51的一些特殊功能口,如下所示: P3口管脚备选功能:P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令时ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。2.1.3 功能特性概述AT89C51提供以下标准功能;4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,2个16位定时/计数器,一个6向量两极中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。在本次设计中AT89C51单片机主要作为主控单元使用,同时方便日后的扩展。2.2 DS1302时钟芯片2.2.1 DS1302概述DS1302 实时时钟芯片是MAXIM公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31B的用于临时性存放数据的静态RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。在本次设计中DS1302时钟芯片是实现高精度计时的关键,利用DS1302时钟芯片独立于单片机来计时,不占用单片机内部定时计数器资源,在提高计时精度的同时也提高了整个系统的抗干扰能力。2.2.2 DS1302引脚功能及结构图3所示是DS1302的引脚排列,其中VCC1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由VCC1或VCC2两者中的较大者供电。当VCC2大于VCC10.2V时,VCC2给DS1302供电。当VCC2小于VCC1时,DS1302由VCC1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向)。SCLK是串行时钟输入端。 DS1302的内部结构如图4所示,主要组成部分为:移位寄存器、控制逻辑、振荡器、实时时钟以及RAM。图3 DS1302引脚图图4 DS1302内部结构图2.2.3 DS1302的控制字节与读写时序图5 DS1302控制字节图DS1302 的控制字如图5所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作。 DS1302是SPI总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。如图6所示,读数据:读数据时在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据是从最低位到最高位。写数据:控制字总是从最低位开始输出。在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入也是从最低位(0位)开始。图6 DS1302数据读写时序图2.2.4 DS1302的寄存器地址与数据读写DS1302的数据读写是通过I/O串行进行的。当进行一次读写操作时最少得读写两个字节,第一个字节是控制字节,就是一个命令,告诉DS1302是读还是写操作,是对RAM还是对寄存器操作,以及操作的地址。第二个字节就是要读或写的数据了。单字节写:在进行操作之前先得将RST置高电平,然后单片机将控制字的位0放到I/O上,当I/O的数据稳定后,将SCLK置高电平,DS1302检测到SCLK的上升沿后就将I/O上的数据读取,然后单片机将SCLK置为低电平,再将控制字的位1放到I/O上,如此反复,将一个字节控制字的8个位传给DS1302。接下来就是传一个字节的数据给DS1302,当传完数据后,单片机将RST置为低电平,操作结束。单字节读操作的一开始写控制字的过程和上面的单字节写操作是一样,但是单字节读操作在写控制字的最后一个位,SCLK还在高电平时,DS1302就将数据放到I/O上,单片机将SCLK置为低电平后数据锁存,单片机就可以读取I/O上的数据。如此反复,将一个字节的数据读入单片机。读与写操作的不同就在于,写操作是在SCLK低电平时单片机将数据放到IO上,当SCLK上升沿时,DS1302读取。而读操作是在SCLK高电平时DS1302放数据到IO上,将SCLK置为低电平后,单片机就可从IO上读取数据。图7所示是DS1302内部的7个与时间、日期有关的寄存器地址与写保护寄存器地址。这几个寄存器的说明如下:1、秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。当初始上电时该位置为1,时钟振荡器停止,DS1302处于低功耗状态;只有将秒寄存器的该位置改写为0时,时钟才能开始运行。2、小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。在12小时模式时,位5是 ,当为1时,表示PM。在24小时模式时,位5是第二个10小时位3、控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。在对任何的时钟和RAM的写操作之前,WP位必须为0。当WP位为1时,写保护位防止对任一寄存器的写操作。也就是说在电路上电的初始态WP是1,这时是不能改写上面任何一个时间寄存器的,只有首先将WP改写为0,才能进行其它寄存器的写操作。 图7 DS1302内部寄存器地址图2.3 74HC595与74HC138数字芯片2.3.1 74HC595概述及引脚功能74HC595 是一款漏极开路输出的CMOS移位寄存器,输出端口为可控的三态输出端,亦能串行输出控制下一级级联芯片。有高速移位时钟频率、标准串行接口、串行输出可用于多个设备的级联、功耗低等特点。如图8所示是74HC595的引脚图。QA至QH是8个并行数据输出引脚,QA为最低位,QH为最高位。SQH引脚为串行数据输出引脚,用于级联下一级芯片。OE使能端,低电平有效。SCK引脚为数据输入时钟线。SI引脚为串行数据输入端,当SCK为上升延时读取一位数据。RCK引脚为输出寄存器锁存时钟线,当RCK为上升延时,数据锁存。SCLR引脚为数据清零端,低电平有效,但一般接高电平。图8 74HC595管脚图2.3.2 74HC138概述及引脚功能74HC138是一款高速COMS器件,引脚兼容低功耗肖特基TTL系列。通常被叫做38译码器。运用2片74HC138级联可以组成4-16线译码器。如图9所示是74HC138的管脚图。A0至A2为输入端,低电平有效。Y0-Y7为输出端,输出为低电平。举例:当A0-A2端数据为000时,Y0-Y7输出01111111。E1-E3为使能端,E1-E2低电平有效,E3高电平有效。图9 74HC138管脚图本设计采用2片138译码器级联,使成为4-16线译码器。具体级联电路见本文详细介绍。2.4 16*16LED点阵屏2.4.1 16*16LED点阵构成及点阵内部结构本设计采用的的16*16LED点阵实际是由4片行共阳8*8LED点阵级联构成。每个8*8点阵由64个LED发光二极管组成,则四片8*8点阵组成的16*16点阵拥有256个LED发光二极管。如图10所示是本设计采用的4片8*8LED点阵的级联方式,H1-H16是点阵的16行,L1-L16是点阵的16列。行输入高电平,列输入低电平则对应的LED点亮。图10 16*16LED点阵构成图2.4.2 LED点阵内部结构如图11所示是8*8点阵内部结构图,8行8列,每行每列均有8个LED发光二极管组成,每行二极管阳极相连,每列二极管阴极相连。图11 点阵内部结构图2.4.3 LED点阵显示文字的原理将要显示的文字拆分并逐行显示,当行扫描达到一定频率(一般在50HZ以上),虽然LED点阵是一行行被点亮,但由于人眼的余晖效应,看到的就是一个完整的字体。下面来举例具体说明。需要在16*16点阵上显示“我”字样,将“我”拆分成左右两半,左右两半再分别分成16行。123456789ABCDEFG图12 “我”字16*16点阵显示示意图如图12所示示意图,将点阵分为左右两部分,为16*8的点阵规格,当点阵第一行行输入高电平,16列输入1111101110111111时(即16进制代码0xFE与0xEF)第一行第6列与第10列的LED发光二极管即被点亮,延时一段时间,然后关断第一行,第一行行输入为低电平,对第二行行输入高电平,列输入1111000110101111时(即16进制代码0xF1与0xAF)第二行5、6、7、10、12列的发光二极管被点亮,延时一段时间,然后关断第二行。如此按序点亮16行,即可将所需文字显示出来。称为行扫描显示。还有列扫描方式,其显示原理与行扫描方式相同,都是对列或行进行快速扫描,利用人眼余晖效应来显示文字。本设计采用行扫描方式,行选通由两片74HC138译码器组成的4-16线译码器控制,列选通由2片级联的74HC595移位锁存器控制。具体见本文电路设计。第三章 16*16点阵流水显示实时时钟介绍随着生活水平的提高及技术的快速发展,人们对于时钟的要求也越来越高,不仅希望其走时精准,还希望能够在夜晚随时都能看到时间,能醒目显示时间即使相隔一段距离也能看清时间。为了满足人们的这些要求,所以将DS1302与LED点阵屏相结合起来设计成一个高精度的,同时能够醒目显示时间在一定距离范围下也能被看见的LED点阵显示实时时钟,还添加了现在流行的流水式显示方式。以单片机为主要控制核心,不断与DS1302时钟芯片进行双向通信,读取时钟数据,并通过16*16LED点阵屏显示出来。3.1 点阵时钟的制作本设计的点阵时钟显示形式为24小时制,以时分秒的形式通过点阵屏流水形式显示,用户可以通过4个独立按键对小时与分钟进行加减调整。因为采用的点阵屏是16*16规格的,只能同时显示2个数字或者一个汉字,对于00:00:00显示形式的时钟来说,只有采用流水显示形式才能完整显示时钟信息。具体的系统方框图如图13所示:单片机实时时钟电路调整时间按键点阵显示电路图13 系统方框图3.2 硬件电路的设计点阵式实时时钟的硬件电路主要有单片机电路模块,DS1302实时时钟电路模块,按键模块,点阵显示模块。(1)单片机电路模块本设计采用的单片机电路模块被称为单片机最小系统板,有电源部分,晶振电路,复位电路,单片机的32个IO引脚被2.54MM间距标准排针引出,运用杜邦连接线可以与外部设备连接,使用方便,无需使用烙铁焊接连线。可以根据程序设计来自由选择使用单片机相应IO口,使用灵活。单片机最小系统板可以与任何兼容单片机的电路相连使用,使用率高,节约单片机开发成本,电路结构简单。图14所示就是单片机最小系统板,采用LM7805三端稳压器稳定输出5V电压作为单片机供电电源,并且也可额外通过排针引出供外部功能扩展电路使用。外部晶振默认使用12MHZ晶振,并且可以更换其他频率的晶振以满足不同设计要求。复位电路为上电复位与按键复位两种方式。EA引脚默认接高电平使单片机读取内部存储器区,必要时可以接低电平扩展外部存储器电路。图14 单片机最小系统图(2)DS1302实时时钟模块如图15所示电路,VCC1接外部3V电压作为后备电源,VCC2接5V主电源,当主电源断开,后备电源就给芯片提供电能维持芯片正常工作,不会因为断电而使时钟数据丢失,再次上电运行时无需重新设置时间,芯片RST引脚接单片机P1.2口,SCLK引脚接单片机P1.0口,IO引脚接单片机P1.1口,外接晶振频率为32.768KHZ。图15 DS1302实时时钟电路图(3)按键电路图16所示按键电路为4个独立按键,P1.4端口为小时加一,P1.5端口为小时减一,P1.6端口为分钟加一,P1.7端口为分钟减一。图16 按键电路图(4)点阵显示电路本设计的点阵显示电路采用4片8*8的LED点阵级联拼合成16*16LED点阵屏,两片74HC138译码器级联成4-16线译码器,控制点阵屏的16行导通与关断。列采用2片74HC595移位锁存器级联做列数据输入。由于采用的点阵为行共阳,所以当某一行输入高电平,某一列输入低电平时,相应的那个LED发光二极管才会被点亮。因为74HC138输出电流极小不能直接驱动点阵屏正常工作,所以在每个138译码器输出端口接PNP型三极管,138译码器输出端接1K电阻一端,电阻另一端接三极管基极,三极管发射极接+5V电源,集电极接点阵的行输入端。当138译码器某输出端为低电平时,相应的三极管饱和导通,相当于是一个电子开关,集电极输出+5V电压驱动点阵对应的行。图17所示既是两片74HC138的级联方式。两片芯片的A0-A2端分别相连,左边芯片的E3与右边芯片的E1相连组成A3。A3为最高位,A0为最低位。图17 74HC138级联图图18所示是两片74HC595的级联方式。左边芯片的SQH与右边芯片的SI相连,当左边输入8位数据后再次输入8位数据时,其原先输入的8位数据便会通过SQH端一个一个移位至下一片芯片,前提条件是两片芯片的时钟输入频率相同,既同步进行数据输入。图18 74HC595级联图由于采用4-16线译码器来作为行选通器件,所以整个行选通电路只占用单片机的5个IO端口,即译码器的A0-A3输入端以及译码器使能端,节约了单片机的IO端口资源。同样列数据输入采用移位锁存器后,因为74HC595是串行输入的,所以仅需占用单片机3个IO口,即SQH串行数据输入端,SCK数据输入时钟线以及RCK数据输出锁存时钟线。图19所示为完整的点阵电路。具有数据引出功能,若有相同的两片点阵电路,可进行级联组成16*32的点阵电路。可以无限制级联,组成很大的一块点阵屏,电路硬件也无需更换。图19 点阵电路图3.3 软件程序的设计本设计的单片机程序采用C语言编制。C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。C语言有功能丰富的库函数、可读性好、运算速度快、编译效率高、有良好的可移植性,而且可以直接实现对系统硬件的控制。C语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。因此,使用C语言进行程序设计已成为软件开发的一个主流。用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。所以用单片机C语言程序设计是单片机开发与应用的必然趋势。3.3.1 程序流程图开始申请变量,初始化DS1302判断while(1)是否为真调用获取DS1302数据子程序,调用显示子程序,判断按键是否按下按键按下,相应变量加一或减一 否 是 否 程序结束,返回图20 主程序流程图3.3.2 程序设计对于DS1302的程序设计,包含3部分。第一部分:DS1302时钟数据的写入与读取。第二部分:DS1302的时钟数据处理,由于从DS1302中得到的始终数据并不是十进制的数据,所以必须将得到的数据进行十进制转换。第三部分:DS1302中关键标志位的设置,如秒寄存器的第七位CH,以及控制寄存器的第七位WP。对于控制点阵行扫描的数字芯片74HC138译码器的程序设计,之前说过由于两片芯片级联组成了4线-16线译码器,其4线输入端与单片机P0.0-P0.3连接,当P0口数据从0x00开始每次加一,直到0x0F结束一共加16次,16次后P0为0xF0,由于只使用P0口低四位,所以对于P0口低四位来说输出还是0000,16线端输出为从1111111111111110开始,每次左移一位,16次后继续循环。输出端每移位一次相对的三极管即饱和导通,延时一段时间后即对4线-16线译码器的使能端输出高电平关断译码器。对于点阵列控制芯片74HC595移位锁存器的程序设计,当SCK为低电平时,在DI端放置位数据,等数据稳定后,拉高SCK,使74HC595读入位数据,读取8次后,拉高RCK,使刚才输入的8位数据输出并锁存,因为是2片级联,所以需要16次得位读取操作。对于点阵显示程序的设计,由于采用的是16*16的LED点阵屏,不能完整显示时钟信息,必须采用流水显示设计。以下就流水显示来举个例子,用点阵流水方式显示“你好”字样,来具体分析下其动态显示原理。如图21,一开始点阵完整显示“你”字样,如图22,是左移6列后的点阵屏所显示的画面。“你”字此时单人旁已经移出点阵屏,而“好”字的左半部分有一半进入了点阵屏。123456789ABCDEFG图21图22流水式显示程序是根据此显示原理所设计,刚开始使点阵显示完整的文字信息如图21所示一样,即单片机读取列数据将列数据存至显示缓冲区,缓冲区一共可以存放2个中文字的数据或者4个数字的数据,再从缓冲区读取数据,将数据送到74HC595输出端,控制译码器从第一行逐行点亮点阵屏。每点亮一行延时一段时间后关断,更换列数据再点亮下一行,如此反复,在16行行扫描结束过后,改变单片机读取缓冲区数据的读取位码,即跳过读取第一个字的第一列的数据,只读取第一个字的后15列数据,并增加读取下一个文字第一列的数据,每进行完16行行扫描,就执行此操作。当单片机将第一个文字的16列数据都跳过时第二个文字在点阵上已经完整显示,此时重新调整缓冲区内数据,在字形数据区内重新读取2个文字数据存至显示缓冲区,此时的缓冲区内部已经没有第一个文字的字形数据,而第二个文字的字形数据在缓冲区内由原来的第二个提至第一个文字位置,并增加第三个文字的字形数据。此时单片机重新执行显示子程序,就变成第二和第三个文字在屏幕上移动显示。如此反复执行就形成了文字的移位显示,即人们经常说的流水显示。具体程序代码见本文附录。第四章 结 束 语本系统采用ATMEL公司研发的AT89C51单片机作为主控芯片,采用外设DS1302实时时钟芯片,不占用单片机内部定时计数器资源,采用现代流行的点阵屏作为输出。占用IO资源较少,并且还可扩展其他功能,如温度测量等。硬件运用灵活,可与其他设备通用硬件资源,节省资金。所完成的时钟系统,走时精准,自发光亮度高,采用流水式动态显示,字体美观,可见距离远。通过这次设计,我查阅了许多书籍资料,受益匪浅,不仅学习了点阵显示的原理及特点,还了解了DS1302的使用方法及广泛用途。将理论与实际相结合,使我明白,不能单单纸上谈兵,因为理论与实际往往有很大的差别。虽然这次设计的电路及程序获得了成功,但也发现许多设计中的不足之处,例如:点阵的移位显示速率可调范围小,移位显示不是很流畅存在微小延迟,对于DS1302所具有的功能还未完全展示出来,如显示年、月、日、星期等。致 谢感谢我的导师殷勤奋老师在写论文期间给我的帮助和指导,她严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;她循循善诱的教导和不拘一格的思路给予我无尽的启迪。使我在写论文期间锻炼了收集资料的能力,进一步加深对本专业的认识,深化了专业知识和对专业知识的应用能力。 在此,再次感谢我的导师殷老师。参考文献【1】李全利 单片机原理及应用技术(第2版) 高等教育出版社 2004.11【2】李秀忠 单片机应用技术 中国劳动社会保障出版社 2006.7【3】孙焕铭 赵会成 王金 51单片机C程序应用实例详解 北京航空航天大学出版社 2011.3【4】马忠梅 籍顺心 张凯 马岩等 单片机的C语言应用程序设计(第4版) 北京航空航天大学出版社 2008 .3【5】沈任元 吴勇 模拟电子技术基础 机械工业出版社 2007.6【6】沈任元 吴勇 数字电子技术基础 机械工业出版社 2008.3【7】及力 张涛 王永成 Protel 99SE原理图与PCB设计教程(第2版) 电子工业出版社 2007.8附 录以下是本设计的部分程序代码,并附有程序注释:#include<reg51.h> /51单片机头文件/*位定义*/sbit P14=P14;sbit P15=P15;sbit P16=P16;sbit P17=P17;sbit ds=P20;sbit sck=P21;sbit rck=P22;sbit oe=P23;sbit rst=P12;sbit sclk=P10;sbit io=P11;sbit ACC0=ACC0;sbit ACC7=ACC7;#define DS1302_SECOND0x80 /DS1302内部秒寄存器 #define DS1302_MINUTE0x82 / 分寄存器#define DS1302_HOUR0x84 / 小时寄存器#define uchar unsigned char#define uint unsigned intuchar second;uchar minute;uchar hour;uchar time=11,11,0,0,10,0,0,10,0,0,11,11;/用来储存时间数据,存放于RAM中uchar code num=0,16,32,48,64,80,96,112,128,144,160,176;uchar code tab=0xFF,0xFF,0xF0,0x0F,0xE0,0x07,0xCF,0xF3,/字形数据,存于ROM 0xDF,0xFB,0xCF,0xF3,0xE0,0x07,0xF0,0x0F,/*"0",0*/ 0xFF,0xFF,0xFF,0xFF,0xDF,0xFB,0xDF,0xFB, 0xC0,0x03,0xC0,0x03,0xDF,0xFF,0xDF,0xFF,/*"1",1*/ 0xFF,0xFF,0xC7,0xC7,0xC1,0xC3,0xF4,0xFB, 0xEE,0x7B,0xDF,0x3B,0xC7,0x83,0xE7,0xC7,/*"2",2*/ 0xFF,0xFF,0xE7,0xC3,0xC7,0xC3,0xDF,0x7B, 0xDF,0x3B,0xCE,0x0B,0xE0,0xC3,0xF1,0xF3,/*"3",3*/ 0xFF,0xFF,0xF9,0xFF,0xF8,0x7F,0xDB,0x1F, 0xDB,0xC7,0xC0,0x03,0xC0,0x03,0xDB,0xFF,/*"4",4*/ 0xFF,0xFF,0xE6,0x03,0xC6,0x03,0xDF,0xBB, 0xDF,0xBB,0xCF,0x3B,0xE0,0x63,0xF0,0xE3,/*"5",5*/ 0xFF,0xFF,0xF0,0x0F,0xE0,0x07,0xCF,0x33, 0xDF,0xBB,0xCF,0x3B,0xE0,0x63,0xF0,0xE7,/*"6",6*/ 0xFF,0xFF,0xFF,0xC3,0xFF,0xC3,0xFF,0xFB, 0xC1,0xFB,0xC0,0x37,0xFE,0x03,0xFF,0xE3,/*"7",7*/ 0xFF,0xFF,0xF1,0xCF,0xE0,0x87,0xCE,0x33, 0xDF,0x7B,0xCE,0x33,0xE0,0x87,0xF1,0xCF,/*"8",8*/ 0xFF,0xFF,0xE7,0x0F,0xC6,0x07,0xDC,0xF3, 0xDD,0xFB,0xCE,0xF3,0xE0,0x07,0xF0,0x0F,/*"9",9*/ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0x9F, 0xF3,0x9F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*":",10*/ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF;/*" ",11*/uchar tab2=0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /移动显示数据缓冲区 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF; void delay(uint i)/延时子程序while(i-);void HC595(uchar DATA)/74HC595数据输入子程序uchar i;for(i=0;i<8;i+)sck=0;ds=DATA&0x01;sck=1;DATA>>=1;void display(uchar a,c,d) /点阵显示子程序uchar i,j,k,m,n,l;m=n=0;oe=1;P0=0x00;for(i=a;i<a+3;i+) l=numtimei;for(j=m;j<n+16;j+)tab2j=tabl;l+;m=m+16;n=n+16;for(k=c;k<d;k+) /点阵整屏显示程序/执行一次即显示相关文字rck=0;HC595(tab2k);k+;HC595(tab2k);rck=1;oe=0;delay(130);oe=1;P0+;/*DS1302输入输出程序*/void DS1302Input(uchar d) /实时时钟写入一字节 uchar i; ACC=d; for(i=8;i>0;i-) io=ACC0; sclk=1; sclk=0; ACC=ACC>>1; uchar DS1302Output() /实时时钟读取一字节 uchar i; for(i=8;i>0;i-) ACC=ACC>>1; ACC7=io;sclk=1; sclk=0; return(ACC); void Write1302(uchar ucAddr, uchar ucDa) /写数据,

注意事项

本文(16&16 LED点阵流水显示实时时钟设计)为本站会员(QQ-1****6396)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!