数字钟设计89844_第1页
数字钟设计89844_第2页
数字钟设计89844_第3页
数字钟设计89844_第4页
数字钟设计89844_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、数字钟设计 专业:计算机控制 班级:计控0901 姓名:汪青 目 录一、任务目的.3二、系统方案选择 1、单片机选型 2、设计方案.4 3、显示方案 4、系统方案确定.55、系统硬件设计.6 6、系统软件设计.77、总结.10三、数字钟源程序.12任务目的很多单片机产品具有实时时钟的功能,例智能化仪器仪表、工业过程控制系统及家用电器等。这里要求实现一个具有实时时钟显示和闹钟控制功能的数字钟。通过数字钟的设计与制作,将前面所学的单片机内部定时器资源、I/O端口、键盘和显示接口等知识融会贯通,锻炼独立设计、制作和调试应用系统的能力,深入领会单片机应用系统的硬件设计、模块化程序设计及软硬件调试方法等

2、,并掌握单片机应用系统的开发过程。产品的设计要求: (1)自动计时,由6位LED显示器显示时、分、秒。 (2)具备校准功能,可以设置当前时间。 (3)具备定时启闹功能,可以设置启闹时间,启闹1分钟后自动关闭闹铃,也可以按退出按钮退出闹铃。 (4)设计时间或闹铃时要求有加一和减一功能。 系统方案选择1、 单片机选型选用MCS-51系列主流芯片AT89S51,内部带有4KB Flash ROM,无须扩展程序存储器。由于数字钟没有大量运算和暂存数据,片内128B的RAM可以满口设计要求,无须外扩片外RAM。2、 设计方案(1) 采用实时时钟芯片。针对应用系统对实时时钟的普遍需求,各大芯片生产厂家陆续

3、推出了一系列实时时钟集成电路,如DS1287、DS112887、DS1302、PCF8563、S35190等。这些实时时钟芯片具备年、月、日、时、分、秒计时功能和多点定时功能和多点定时功能,计时数据每秒自动更新一次,不需程序干预。单片机可通过中断或者查询方式读取计时数据。实时时钟芯片的计时功能无须占用CPU时间,功能完善,精度高,软件程序设计简单,在实时工业测控系统中多采用这一类专用芯片来实现。(2) 软件控制。利用AT89S51内部定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时。该方案节省硬件成本,且能够使读者对前面所学知识进行综合运用,因此,本系统设计采用这一方案。3、 显示方

4、案(1) 利用串行口扩展LED,实现LED静态显示。(2) 利用单片机并行I/O端口,实现LED动态显示。本方案就是选用了这一显示方案。4、 系统方案确定综合上述方案分析,本系统选用主流芯片AT89S51单片机作为主控制器,采用单片机内部定时器实现计时、用七个按键控制时钟的各项功能和动态LED显示(6位)。按键功能定义。与P1口相连的7个按键定义如下: K1键:启动设置时间的功能。K2键:实现分位加一功能。K3键:实现时位加一功能。K4键:启动设置闹钟的功能。K5键:实现分为减一功能。K6键:实现时位减一功能。K8键:实现退出设置和闹铃功能。5、 系统硬件设计 系统硬件设计电路如下图所示,单片

5、机的P0口作为6位LED显示的段选口,P0.0P0.7分别接6个LED的ag。,单片机P2口的P2.0P2.5分别连接6个LED的段选口。P0.6口作为蜂鸣器的引脚。电子元器件列表序号名称数量序号名称数量1单片机AT89S511片92.7K电阻7只212M晶振1个10104瓷片电容4只3共阳数码管6只1130P瓷片电容2只4PNP管85507只12200电阻1只574LS2441片13560电阻8只6蜂鸣器1个1410K电阻12只7微动按键5个15100电阻4只810UF电容1只数字钟硬件电路图技术帮助:七段数码管分共阳管和共阴管,使用时要注意区分,本项目使用共阳数码管即公共端接正极。数码管引

6、脚示意图如下:6、 系统软件设计主程序函数LED显示函数设置时间函数设置闹铃函数启动闹铃函数加一修改函数减一修改函数定时器函数闹钟响铃图在程序执行的时候,由于在protus中不容易看到闹钟响铃的情形,所以我在显示上加了一个闪烁程序,只要闹铃定时一到,6个LED 就会同时闪烁,一分钟后就会停止,当然,在中途过程中你也可以按K8退出键,退出响铃程序。程序说明:第一步:主程序开始时,显示23:59:00。第二步:当需要修改时间时,可以按下K1键,程序跳到调时函数。此时6个LED显示的时间暂停,定时器被关闭。按下K2键可以让分位加一。按下K3键可以让时位加一。按下K5键可以让分位减一。按下K6键可以让

7、时位减一。如修改好后,可以按下K8键退出。定时器被打开,计时正常显示第三步:当需要定闹钟时,可以按下K4键,程序跳到调闹函数。此时6个LED显示的时间暂停,定时器被关闭。按下K2键可以让分位加一。按下K3键可以让时位加一。按下K5键可以让分位减一。按下K6键可以让时位减一。如修改好后,可以按下K8键退出,定时器被打开,同时恢复时钟时间,计时正常显示。部分程序截图如下:时间设置:按下K1键后,秒位停止走动分位加一两次为1,时位加一一次为1,秒位开始走动闹钟设置:K4键按下后,并将分位加一按下K8键后退出闹钟设置函数,显示恢复正常总 结通过完成数字钟的设计与制作调试,掌握单片机应用系统的设计过程。

8、单片机应用系统开发的一般工作流程包括:项目任务的需求分析(确定任务),制定系统软件、硬件方案(总体设计),系统硬件设计与制作,系统软件模块划分与设计,系统软、硬件联调,程序固化,脱机运行等。 学习自顶向下的模块化程序设计方法,构建出程序设计的整体框架,包括主程序流程和子模块流程的设计、各功能模块之间的调用关系。在细化流程图的基础上,合理分配系统变量资源,即可轻松编写程序代码。在调试程序前,一定要先将源程序分析透彻,这有助于再系统调试过程中,通过现象分析判断产生故障的原因及故障可能存在的大致范围,快速有效地排查和缩小故障范围。 虽然我的这个程序比老师的要差的很远,不够精炼,而且也不够完整,但基本

9、功能都可以实现,我觉得自己编出来的不管怎么说也是我自己的东西,让我对以后的学习更加有信心了。我认真分析了一下与老师的程序差距有以下几点:1、 对定时器中断的能理解还是不够。2、 对C语言的学习依然不够,例如切换按键,我不会用,不免使得电路按键过多,操作麻烦。其实,只要定义几个变量,就可以解决这个问题,可以帮我节省三个按键。3、 在调时间上,每次加一或减一,LED总是同时闪烁,而且无法实现让所调的位闪烁。这一点我虽然知道原因,但不好改,我只用了一个定时器,没法改他,除非再用一个定时器。这说明,我对定时器中断认识还不够深入,没有充分利用,还需要好好学习一下。4、 按键抖动问题,我也没解决好,若需做

10、好,还要努力。数字钟源程序#include<reg51.h>unsigned char sec, msec, fen, hou, mhou, mfen;unsigned char led1=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10;unsigned char led=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;unsigned char naomfen,naomhou,naofen,naohou,naomsec,naosec;unsigned char a,b,naow

11、ei; sbit k1=P10; /调时sbit k2=P13; /加一sbit k3=P14; /换位sbit k4=P11; /调闹sbit k8=P17; /退出sbit k5=P12; /jianyisbit k6=P15; sbit naoling=P16;void jiayi();void tiaoshi();void tiaonao();void naozhong();void display();void jianyi();void delay(unsigned char k) /延时 unsigned char i,j; for(i=0;i<k;i+) for(j=0;

12、j<100;j+);void int0() interrupt 1 /中断 TH0=0x3c; TL0=0xb0; msec+; if(msec=20) msec=0; sec+; if(sec=60) sec=0; fen+; if(fen=60) fen=0; hou+; if(hou=24) hou=0; void main()/主函数 sec=0; fen=59; hou=23; TMOD=0x01; TH0=0x3c; TL0=0xb0; EA=1; ET0=1; TR0=1; while(1) display(); if(k1=0) tiaoshi(); if(k4=0) t

13、iaonao(); void display() /显示 P2=0x01; P0=ledhou/10; delay(10); P2=0x02; P0=led1hou%10; delay(10); P2=0x08; P0=led1fen%10; delay(10); P2=0x04; P0=ledfen/10; delay(10); P2=0x20; P0=ledsec%10; delay(10); P2=0x10; P0=ledsec/10; delay(10); if(naowei=1) if(sec<60) if(naohou=hou) if(naofen=fen) naozhong

14、(); void tiaonao() /调闹 a=hou; b=fen; TR0=0; naowei=1; while(TR0=0) P2=0x01; P0=ledhou/10; delay(10); P2=0x02; P0=led1hou%10; delay(10); P2=0x08; P0=led1fen%10; delay(10); P2=0x04; P0=ledfen/10; delay(10); P2=0x20; P0=ledsec%10; delay(10); P2=0x10; P0=ledsec/10; delay(10); if(k2=0) jiayi(); if(k3=0)

15、jiayi(); if(k8=0) TR0=1;hou=a;fen=b;break; if(k5=0) jianyi(); if(k6=0) jianyi(); naohou=hou; naofen=fen; void naozhong()/响铃 if(naohou=hou) if(naofen=fen) P2=0xff; delay(200); P2=0x01; P0=ledhou/10; delay(10); P2=0x02; P0=led1hou%10; delay(10); P2=0x08; P0=led1fen%10; delay(10); P2=0x04; P0=ledfen/10

16、; delay(10); P2=0x20; P0=ledsec%10; delay(10); P2=0x10; P0=ledsec/10; delay(10); P2=0x00; delay(200); naoling=0;delay(50);naoling=1;delay(50);if(k8=0) naowei=0; void tiaoshi() /调时 TR0=0; while(TR0=0) P2=0x01; P0=ledhou/10; delay(10); P2=0x02; P0=led1hou%10; delay(10); P2=0x08; P0=led1fen%10; delay(1

17、0); P2=0x04; P0=ledfen/10; delay(10); P2=0x20; P0=ledsec%10; delay(10); P2=0x10; P0=ledsec/10; delay(10); if(k2=0) jiayi(); if(k3=0) jiayi(); if(k8=0) TR0=1; if(k5=0) jianyi(); if(k6=0) jianyi(); void jiayi()/加一 if(k2=0) delay(250); if(k2=0) if(fen=60) fen=0; fen+; if(fen=60) fen=0; hou+; if(hou=24) hou=0; if(k3=0) delay(250); if(k3=0) hou+; if(hou=24) hou=0; void jianyi()/减一 if(k5=0) delay(250); if(k5=0) if(fen=0) fen=59; fen-; if(fen=0)

温馨提示

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

评论

0/150

提交评论