基于单片机的电子时钟6位LED数码管显示.doc

上传人:11****ws 文档编号:2262107 上传时间:2019-05-03 格式:DOC 页数:12 大小:107KB
下载 相关 举报
基于单片机的电子时钟6位LED数码管显示.doc_第1页
第1页 / 共12页
基于单片机的电子时钟6位LED数码管显示.doc_第2页
第2页 / 共12页
基于单片机的电子时钟6位LED数码管显示.doc_第3页
第3页 / 共12页
基于单片机的电子时钟6位LED数码管显示.doc_第4页
第4页 / 共12页
基于单片机的电子时钟6位LED数码管显示.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、1数码管显示电子时钟设计一.功能要求1.数字电子时钟最主要是 LED 数码管显示功能,以 24 小时为一个周期,显示时间时、分、秒。2.具有校时功能,可以对时、进行单独校对,使其校正到标准时间。二.方案论证1.数字时钟方案数字时钟是本设计的最主要的部分。根据需要,可利用两种方案实现。方案一:本方案采用 Dallas 公司的专用时钟芯片 DS12887A。该芯片内部采用石英晶体振荡器,其芯片精度不大于 10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然

2、掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。方案二:本方案完全用软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现 1 秒定时中断,每产生一次中断,存储器内相应的秒值加 1;若秒值达到 60,则将其清零,并将相应的分字节值加 1;若分值达到 60,则清零分字节,并将时字节值加 1;若时值达到 24,则将十字节清零。该方案具有硬件电路简单的特点。但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。而且,由于是软件实现,当单片机不上电,程序不执

3、行时,时钟将不工作。基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。2.数码管显示方案方案一:静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。该方式每一位都需要一个 8 位输出口控制。静态显示时较小的电流能获得较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的 I/O 口2太多,造成了资源的浪费。方案二:动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例

4、有关。调整参数可以实现较高稳定度的显示。动态显示节省了 I/O 口,降低了能耗。从节省 I/O 口和降低能耗出发,本设计采用方案二。3 .计时方案利用 AT89S51 单片机内部的定时/计数器进行中断时,配合软件延时实现时、分、秒的计时。该方案节省硬件成本,且能使读者在定时/计数器的使用、中断及程序设计方面得到锻炼与提高,对单片机的指令系统能有更深入的了解,从而对学好单片机技术这门课程起到一定的作用。4. 控制方案AT89S51 的 P0 口和 P2 口外接由八个 LED 数码管(LED8LED1) 构成的显示器,用 P0 口作 LED 的段码输出口,P2 口作八个 LED 数码管的位控输出线

5、,P1 口外接四个按键 A、B、C 构成键盘电路。AT89S51 是一种低功耗,高性能的 CMOS 8 位微型计算机。它带有 8K Flash 可编程和擦除的只读存储器(EPROM ),该器件采用 ATMEL 的高密度非易失性存储器技术制造,与工业上标准的 80C51 和 80C52 的指令系统及引脚兼容,片内 Flash 集成在一个芯片上,可用与解决复杂的问题,且成本较低。简易电子钟的功能不复杂,采用其现有的 I/O 便可完成,所以本设计中采用此的设计方案。三.系统硬件电路的设计根据以上的电子时钟的设计要求可以分为以下的几个硬件电路模块:单片机模块、数码显示模块与按键模块,模块之间的关系图如

6、下面得方框电路图 1所示3图 1 硬件电路方框图1. 单片机模块设计11 芯片分析AT89C51 单片机引脚图如下:图 2 AT89C51 引脚图MCS-51 单片机是标准的 40 引脚双列直插式集成电路芯片,其各引脚功能如下:VCC:+5V 电源。VSS:接地。RST:复位信号。当输入的复位信号延续两个机器周期以上的高电平时即为有效,用完成单片机的复位初始化操作。4XTAL1 和 XTAL2:外接晶体引线端。当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。P0 口:P0 口为一个 8 位漏极开路双向 I/O 口,当作输出口使用时,必须接上

7、拉电阻才能有高电平输出;当作输入口使用时,必须先向电路中的锁存器写入“1”,使 FET 截止,以避免锁存器为“0”状态时对引脚读入的干扰。P1 口:P1 口是一个内部提供上拉电阻的 8 位双向 I/O 口,它不再需要多路转接电路 MUX;因此它作为输出口使用时,无需再外接上拉电阻,当作为输入口使用时,同样也需先向其锁存器写“1”,使输出驱动电路的 FET 截止。P2 口:P2 口电路比 P1 口电路多了一个多路转接电路 MUX,这又正好与P0 口一样。P2 口可以作为通用的 I/O 口使用,这时多路转接电路开关倒向锁丰存器 Q 端。P3 口:P3 口特点在于,为适应引脚信号第二功能的需要,增加

8、了第二功能控制逻辑。当作为 I/O 口使用时,第二功能信号引线应保持高电平,与非门开通,以维持从锁存器到输出端数据输出通路的畅通。当输出第二功能信号时,该位应应置“1”,使与非门对第二功能信号的输出是畅通的,从而实现第二功能信号的输出。MCS-51 单片机共有 4 个双向的 8 位并行 I/O 端口(Port) ,分别记作 P0-P3,共有 32 根口线,各口的每一位均由锁存器、输出驱动器和输入缓冲器所组成。实际上 P0-P3 已被归入特殊功能寄存器之列。这四个口除了按字节寻址以外,还可以按位寻址。由于它们在结构上有一些差异,故各口的性质和功能有一些差异。P0 口是双向 8 位三态 I/O 口

9、,此口为地址总线(低 8 位)及数据总线分时复用口,可驱动 8 个 LS 型 TTL 负载。P1 口是 8 位准双向 I/O 口,可驱动 4 个 LS 型负载。P2 口是 85位准双向 I/O 口,与地址总线(高 8 位)复用,可驱动 4 个 LS 型 TTL 负载。P3 口是 8 位准双向 I/O 口,是双功能复用口,可驱动 4 个 LS 型 TTL 负载。P1 口、P2 口、P3 口各 I/O口线片内均有固定的上拉电阻,当这 3 个准双向 I/O 口做输入口使用时,要向该口先写“1”,另外准双向 I/O 口无高阻的 “浮空”状态,故称为双向三态 I/O 口。时钟电路用于产生 MCS-51

10、单片机工作时所必需的时钟信号。MCS-51 单片机本身就是一个复杂的同步时序电路,为保证同步工作方式的实现,MCS-51 单片机应在唯一的时钟信号控制下,严格地按时序执行进行工作,而时序所研究的是指令执行中各个信号的关系。在执行指令时,CPU 首先要到程序存储器中取出需要执行的指令操作码,然后译码,并由时序电路产生一系列控制信号去完成指令所规定的操作。CPU 发出的时序信号有两类,一类用于片内对各个功能部件的控制,这列信号很多。另一类用于片外存储器或 I/O 端口的控制,这部分时序对于分析、设计硬件接口电路至关重要。这也是单片机应用系统设计者普遍关心的问题。1.2 数码显示模块设计系统采用动态

11、显示方式,用 P0 口来控制 LED 数码管的段控线,而用 P2 口来控制其位控线。动态显示通常都是采用动态扫描的方法进行显示,即循环点亮每一个数码管,这样虽然在任何时刻都只有一位数码管被点亮,但由于人眼存在视觉残留效应,只要每位数码管间隔时间足够短,就可以给人以同时显示的感觉。6图 3 数码显示电路1.3 按键模块下图为按键模块电路原理图,A 为复位键,B 为时钟调控键, C 为分钟调控键。图 4 按键模块电路原理图7四系统程序的设计软件设计分析显示的效果为动态显示,利用 CPU 控制数码管显示的选通和停止,通过定时器中断不断扫描,从而实现数据的动态显示。在编程上,首先进行了初始化,定义程序

12、的的入口地址以及中断的入口地址,在主程序开始定义了一组固定单元用来储存计数的时.分.秒,在显示初值之后,进入主循环。在主程序中,对不同的按键进行扫描,实现秒表,时间调整,复位清零等功能,系统总流程图如下图 5:图 5 系统总体流程图8五.调试及性能分析电子时钟主要的设计要求是能够实现时钟的一般功能,以及包括时间的调整功能,这个基于单片机的电子时钟基本上实现了上述功能,能够通过时间调整电路对时间进行调整以及复位。下述为 18:30:30 的仿真图:首先确保各器件的完好性,其次检测各芯片的电源线和地线是否接触良好,然后焊接器件,接好电源用万用表检测各电源端、地端的状态是否正常。检查无误后插上 AT

13、89S51并烧写一简易的程序,观察电路是否能协同工作。最后烧写工作程序,根据显示现象调试程序直至成功。上电运行时,数码管开始显示 00:00:00,时钟开始走时。程序的编写和调试是一个比较复杂的过程。由于对 C 语言知识的薄弱,所以在编译过程中总是有很多语法上的错误,但是在和同学一起讨论研究后,程序是编写出来了,但结合到硬件调试中又出现各种问题。在调试过程中出现了很多问题,在第一次把程序烧到单片机里,通电运行时,虽然控制时、分、秒的按钮能够对数码管显示进行调整,但是数码管全亮,不能通过按键变化显示,更改程序中的问题,但是调时设置又没有用了。经过检查及修改,终于完成了所做的设计,不容易啊。六控制

14、源程序清单#include9#include#define uchar unsigned char#define uint unsigned int/*七段共阴管显示定义*/uchar code dispcode =0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF;/*定义并初始化变量*/uchar seconde=0;uchar minite=0;uchar hour=12;uchar mstcnt=0;sbit P1_0=P10; / sec

15、ond 调整定义sbit P1_1=P11; /minite 调整定义sbit P1_2=P12; /hour 调整定义/*函数声明*/void delay(uchar k ); /延时子程序void time_pro( ); /时间处理子程序void display( ); /显示子程序void keyscan( ); /键盘扫描子程序/*/*延时子程序*/*/void delay (uchar k)uchar j;while(k-)!=0)for(j=0;j125;j+);/*/*时间处理子程序*/*/void time_pro( void)if(seconde=60) /秒钟设为 60

16、进制 seconde=0;minite+;if( minite=60) /分钟设为 60 进制 minite=0;hour+;if(hour=24) /时钟设为 24 进制hour=0; 10/*/* 显示子程序*/*/void display(void)P2=0xfe;P0=dispcodehour/10; /显示小时的十位delay(4);P2=0xfd;P0=(dispcode(hour%10)|0X80; /显示小时的个位delay(4);P2=0xfb;P0=dispcodeminite/10; /显示分的十位delay(4);P2=0xf7;P0=(dispcodeminite%10)|0X80; /显示分的个位delay(4);P2=0xef;P0=dispcodeseconde/10; /显示秒的十位delay(4);P2=0xdf;P0=dispcodeseconde%10; /显示秒的个位delay(4);/*/*键盘扫描子程序*/*/void keyscan (void)if(P1_0=0) /按键 1 秒的调整delay(30);if(P1_0=0)seconde+;if(seconde=60)seconde=0; if(P1_1=0) /按键 2 分的调整

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。