单片机数字电子时钟.doc

上传人:飞****2 文档编号:60201140 上传时间:2022-11-15 格式:DOC 页数:29 大小:986.50KB
返回 下载 相关 举报
单片机数字电子时钟.doc_第1页
第1页 / 共29页
单片机数字电子时钟.doc_第2页
第2页 / 共29页
点击查看更多>>
资源描述

《单片机数字电子时钟.doc》由会员分享,可在线阅读,更多相关《单片机数字电子时钟.doc(29页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、目 录摘 要1前 言2第一章31.1概述31.2 单片机的发展历程31.3 时钟的特性3第2章 系统原理与硬件设计42.1 硬件选择42.2 单片机的构成42.3 AT89c52单片机的引脚说明52.4LED简介7第三章软件设计103.1 框架图10第4章 调试过程及数据分析234.1 硬件调试234.2 KeiL调试234.3开发板调试24结论24参考文献25单片机C语言程序设计.新余:新余高专25李光飞等.单片机C程序设计实例指导.北京: 北京航空航天大学出版社25胡汉才. 单片机原理及系统设计M. 北京:清华大学出版社26附录261.电路图262.程序调试27.3.实物连接图28摘 要本

2、次设计采用AT89c52内部定时器、中断等功能,和外部数码管,驱动器等构成。电子时钟电路采用24小时制记时方式,时间用6位数码管动态显示。使用5V电源供电,并且在按键的作用下可以进入省电(不显示LED 数码管)和正常显示两种状态。关键词:数码管、AT89c52The design of the adjustable digital clock base on AT89S52AbstractThis paper introduced the design of the adjustable digital clock based on AT89S52, the specific process

3、of how the system hardware and software achieved were detailed description through the design of adjustable digital clock. The modular design and production, which consisted of MCU module, clock module and the associated control module, were mainly recounted;As well as hardware designing,software de

4、sign use the same method, consists suspension module, time adjust module, and that use the C language to achieve because of its simple and strong negotiability. In this design the functions of time run and change, functions of the year, month and day display have been achieved. Key words :AT89S52 mi

5、crocontroller;前 言一块单片机芯片就是一台计算机,由于单片机以其集成度高、体积小、可靠性高、控制功能强、低电压、低功耗等特点使它应用于智能仪器仪表、机电一体化、实时程控、人类生活中。除此之外还广泛应用办公自动化领域、商业营销领域、汽车及通信系统、计算机外部设备等各领域中,并且单片机已成为计算机发展和应用的一个重要方面。由此可见掌握单片机的使用方法和利用单片机解决实际问题具有重要的意义。本次设计根据AT89c51单片机系统扩展的基本原理和方法、常用总线标准和典型接口电路的应用,结合本次设计的题目要求进行系统扩展,通过单片机驱动时、分、秒显示,最后通过74LS04驱动LED动态显示的

6、方式完成设计任务,设计论文中附有电路图、程序清单、各数据存储单元的所在地址和输入输出口对应表。因水平有限,难免有疏落不足之处,恳请老师和同学能给予批评指正。 第一章1.1概述随着电子技术的迅速发展,特别是随着大规模集成电路产生而出现的微型计算机,给人类生活带来了极大的方便。走入家庭,从洗衣机、微波炉到音响、汽车,到处都可以见到单片机应用的踪影。如果说微型计算机技术的出现使现代科学研究得到了质的飞跃,那么也可以毫不夸张的说:“单片机技术的出现则是给现代工业测控领域带来了一次新的工业革命”。目前,单片机以其可靠性高和智能性等特点被广泛应用到工业控制系统、数据采集系统、智能化仪器仪表、办公自动化等领

7、域中,并已经进入家庭,因此,单片机技术的开发和应用水平已经逐步成为一个国家自动化发展水平的标志之一。1.2 单片机的发展历程单片机是微型计算机的一个重要分支,也是一种非常活跃和颇具生命力的机种,特别适用于工业控制领域。1971年微处理器研制成功不久,就出现了单片机,但最早的单片机是1位的,处理能力有限。单片机的发展共分四个阶段:第一阶段是初级阶段,功能非常简单;第二阶段是低性能阶段, 16位定时器/计数器,片内ROM、RAM容量加大,直到现在仍被广泛应用,是目前应用数量较多的单片机。、32位单片机推出阶段,以满足不同的用户需要。纵观单片机几十年的发展历程,单片机的今后发展方向将向多功能、高性能

8、、高速度、低功耗、低价格、外围电路内装化以及内存储器容量增加和FLASH存储器化方向发1.3 时钟的特性1.省电(关闭显示)功能2.以24h(小时)计时方式3.整点报时4.用六位共阴LED数码管显示时、分、秒5.使用按键开关可实现时分调整、秒表功能转换6.使用按键开关可实现时分调整、时钟功能转换等功能。这里用到中断,50ms的产生一次。然后累加到20次,秒表就加1.。每60秒分值加1。每60分时加1,每24小时日加1.以此类推。第2章 系统原理与硬件设计2.1 硬件选择(2)单片机的选择 选用AT89c52单片机,并配备12MHz晶振,复位电路采用上电复位。(3)显示电路选择 采用软件译码动态

9、显示,P3.0-P3.3作数码管的位选口。P1.0-P1.6作数码管的段选口。考虑直接用单片机I/O口作位选时驱动功率不够,用ULN2803作为6个共阴数码管的位增强驱动器。(4)电源选择 采用直流5V电源供电。(5)选择器的选择 74ls04(实际物理硬件用ULN2803代替)。(6)AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT

10、89C52单片机可为您提供许多较复杂系统控制应用场合。芯片上的FLASH允许在线编程或采用通用的非易失存储编程器对存储器重复编程。2.2 单片机的构成AT89c51单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多种功能的I/O线等一台计算机所需要的基本功能部件,AT89C52单片机单片机内包含下列几个部件:(1) 一个8位CPU;(2)一个片内振荡器及时钟电路;(3)可反复擦写(1000次)的8K字节ROM程序存储器;(4)256字节RAM数据存储器;(5)3个16位定时器/计数器;(6)可寻址64K外部数据存储器和64K外部程序存储器空间的控制电路;(7)32条可编程的I

11、/O线(四个8位并行I/O端口);(8)一个可编程全双工串行口;(9)2个外部中断源, 共6个中断源;其内部机构框图如图2.2所示: 图2.2 MCS-51单片机内部机构框图2.3 AT89c52单片机的引脚说明AT89c52单片机采用40条引脚双列直插式器件,引脚除5V( 40脚)和电源地( 20脚)外,其功能分为时钟电路、控制信号、输入/输出三大部分,逻辑框图及引脚图分别如图2.4(a)(b)所示 (a) (b) 图2.4 AT89c52单片机逻辑图与引脚图AT89C52单片机的内部硬件结构中除了程序存储器由FLASH取代了87C51单片机的EPROM外,其余部分完全相同,其管脚说明如下:

12、(1)VCC:供电电压(2)GND:接地(3)时钟电路 XTAL1(19脚)芯片内部振荡电路(单级反相放大器)输入端。 XTAL2(18脚)芯片内部振荡电路(单级反相放大器)输出端。 (4)控制信号RST(9脚)复位信号:时钟电路工作后,在此引脚上将出现两个机器周期的高电平,芯片内部进行初始复位,P0口P3口输出高电平,将初值07H写入堆栈指针。ALE(30脚)地址锁存信号:当访问外部存储器时,P0口输出的低8位地址由ALE输出的控制信号锁存到片外地址锁存器,P0口输出地址低8位后,又能与片外存储器之间传送信息。另外,ALE可驱动4个TTL门。(29脚)片外程序存储器读选通:低电平有效,作为程

13、序存储器的读信号,输出负脉冲,将相应的存储单元的指令读出并送到P0口,可驱动8个TTL门。/Vpp(30脚):当为高电平且PC值小于0FFFH时,CPU执行内部程序存储器程序;当为低电平时,CPU仅执行外部程序存储器程序。2.4LED简介LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。图2.7(a)是共阴和共阳极数码管的内部电路图,它们的发光原理是一样的,只是它们的电源极性不同而已。将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。以共阴式为例,如把阴极

14、接地,在相应段的阳极接上正电源,该段即会发光。当然,LED的电流通常较小,一般均需在回路中接上限流电阻。假如我们将b和c段接上正电源,其它端接地或悬空,那么b和c段发光,此时,数码管显示将显示数字“1”。而将a、b、d、e和g段都接上正电源,其它引脚悬空,此时数码管将显示“2”。其它数字的显示原理与此类同。LED的7段数码管利用单只LED组合排列成“8”字型的数码管,分别引出它们的电极,点亮相应的点划来显示出0-9的数字。在这次的设计中采用的均是共阴极的LED显示,当I/O口输出为高电平的时候,对应段就被点亮。LED数码管的结构图如图2.7(b)所示。 (a)(b)图2.7 LED分类结构图和

15、结构图这次设计的显示部分采用AT89c51单片机动态扫描完成,在多数的应用场合中,我们并不希望使用多I/O端口的单片机,原则上是使用尽量少引脚的器件。在没有富余端口的情况下,应通过优化设计程序和扩展电路达到预期的目的。动态扫描的频率有一定的要求,频率太低,LED将出现闪烁现象。如频率太高,由于每个LED点亮的时间太短,LED的亮度太低,肉眼无法看清,所以一般均取几个ms左右为宜,这就要求在编写程序时,选通某一位LED使其点亮并保持一定的时间,程序上常采用的是调用延时子程序。LED显示电路(1)静态显示电路LDE显示器工作在静态显示时,其公共阳极(或阴极) 接VCC(或GND) ,一直处于显示有

16、效状态,所以每一位的显示内容必须由锁存器加以锁存,显示各位相互独立。(2) 动态显示电路 将所有位的段选线的同名端联在一起,由一个8位I/O口控制,形成段选线的多位复用。而各位的公共阳极或公共阴极则分别由相应的I/O口线控制,实现各位的分时选通,即同一时刻只有被选通位是能显示相应的字符,而其他所有位都是熄灭的。由于人眼有视觉暂留现象,只要每位显示间隔足够短,则会造成多位同时点亮的假象。这就需要单片机不断地对显示进行控制,CPU需要不断地进行显示刷新,动态显示电路参见图2.8,图2.8中是扩展了五位的LED数码管显示,用一个74LS04作为五个LED的段选输入,采用动态显示的方式连接。类似地,1

17、6位的LED数码管显示也可以用这种方法来实现。 图2.8 五位LED数码管的动态显示第三章 软件设计3.1 框架图整点报时(0:00-23:00)显示时钟显示闹钟2S长击P2切换开关闹钟P2IN2P1显示日历2SP3IN2开关显示P0秒表功能P1开始P1停止P2短击P0长击P0时钟分调节P1分加一长按连加分减一长按连减P2时钟时调节P1时加一长按连加时减一长按连减P2P0闹钟分调节P1分加一长按连加分减一长按连减P2P0闹钟时调节P1时加一长按连加时减一长按连减P2P0同理年月日调节固定20xx年开始P0按键流程与工作状态的转变按键用到:闭合动作、断开动作 单击、连击、短击、长击闹钟开时间到开

18、始闹铃(45s)P0P1P2退去 闹钟关(ON XX XX)如00:00闹钟开(OF XX XX)如00:00关显示(省电模式)显示日历格式(20XX XX XX) 如:2010-04-21程序清单如下 /* 电子时钟设计 功能描述: 时钟 日历 秒表 闹钟(有问题) 整点报时(有问题)等功能 */ #include #define com P2 sbit w=P10; /功能转换按键 sbit w1=P11; /加与秒表开始与暂停键 sbit w2=P12; /减与秒表复位键 sbit pin=P13; /显示开关键 sbit nao=P15; /整点报时信号输出 unsigned char

19、 leab10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; char times11=0,0,0,0,0,0,0,100,1,1,10; /数组 #define s times0 /显示时钟秒存放位置 #define f times1 /显示时钟分存放位置 #define h times2 /显示时钟时存放位置 #define nf times3 /显示闹钟分存放位置 #define nh times4 /显示闹钟时存放位置 #define dnf times5 /定时闹钟分存放位置 #define dnh times6 /定时闹钟时存

20、放位置 #define dnsw times7 /定时开始/关闭 100为关,101为开 #define day times8 /显示DAY存放位置 #define mon times9 /显示月存放位置 #define yeal times10 /显示年存放位置,固定从20002099年之间调整 unsigned char x=0,y=0,n=0,z,k,j,sss; /X为中断次数,y秒表计数器,z为hao秒计数器,n为状态值 bit v,q=1,nw;/v表示秒表起停状态 NW表示闹钟开停状态 char days_sum() char a; switch(mon) /判断这月有多少天 c

21、ase 1:a=31;break; case 3:a=31;break; case 5:a=31;break; case 7:a=31;break; case 8:a=31;break; case 10:a=31;break; case 12:a=31;break; case 4:a=30;break; case 6:a=30;break; case 9:a=30;break; case 11:a=30;break; case 2: if(yeal%4=0) a=29;else a=28; break; /是润年二月加一天 return a; /* 中断函数每过10ms中断一次,每经过100次

22、产生一秒 */ void time(void) interrupt 1 using 1 unsigned char a; TH0=55556/256 ; /10ms 55536 TL0=55556%256 ; /考虑中断响应时间 x+; if(w=0|w2=0|w1=0) z+; if(x=100) /产生100次中断秒加一 10ms*100=1S sss+; x=0;s+; if(s=60) /秒大于60分加一秒等于0 s=0,f+; if(f=60) /分大于60时时加一分等于0 f=0,h+; if(h=24) /时大于24时DAY加一 时等于0 h=0;day+; a=days_sum

23、(); / 判断闰年的公式 yeal%400|(yeal%4&yeal%100!=0) if(daya)/大于这月的天数月加一DAY等于1 day=1;mon+; if(mon12) /月大于12年加一月等于1 mon=1;yeal+ ; if(yeal99) yeal=0; /固定从20002099年之间调整 if(n=1&v) /秒表计数器y y+; if(y=100) y=0;k+; if(k=60) k=0;j+; if(j=60) j=0; /* 延时函数 1ms延时 */ void delay(unsigned char z) unsigned char x,y; for(x=z;

24、x0;x-) for(y=10;y0;y-); /* 扫描函数 x 控制选中调整数码管闪烁 n判断选中的位闪烁 */ void disp(unsigned char a,b,c) com=0x00; P3=0x00; if(q) if(n=4|n=7)&x=100) / c=100|c=101 com=0x3f; else com=leabc/10; delay(20); com=0x00; P3=0X02; if(c=100) com=0x52; else if(c=101) com=0x71; else com=leabc%10; delay(20); if(n=3|n=6|n=8)&x5

25、0&w1=1&w2=1) ; else com=0x00; P3=0X04; com=leabb/10; delay(20); com=0x00; P3=0X08; com=leabb%10; delay(20); if(n=5|n=9)&x10) n=0; / 切换日历显示 if(w1=0&q) do disp(day,mon,yeal); while(w1); sss=0; while(sss200)z=210; while(w2); if(z200) nw=nw; if(nw) dnsw=101;else dnsw=100; sss=0; while(sss3)disp(dnf,dnh,

26、dnsw); disp(s,f,h);/显示时钟 /显示开关控制模块 if(pin=0) do disp(s,f,h);while(pin); q=q; /n=1为秒表功能 while(n=1) if(w1=0) v=v; dodisp(y,k,j); while(w1); if(w2=0)y=0,k=0,j=0,v=0; disp(y,k,j); z=0; if(w=0) do disp(y,k,j); while(w); if(z200)z=180,f+; if(f=60) f=0; while(w1); z=0; disp(s,f,h); if(w2=0) f=f-1; do if(z2

27、00)z=180,f-; disp(s,f,h); if(f=24) h=0; if(z200)z=180,h+; disp(s,f,h); while(w1); z=0; disp(s,f,h); if(w2=0) h=h-1; do if(h200)z=180,h-; disp(s,f,h); while(w2); if(w=0) break; /n=5为d定闹分调节功能 while(n=5) z=0; if(w1=0) dnf+; do if(dnf=60)dnf=0; if(z200)z=180,dnf+; disp(dnf,dnh,dnsw); while(w1); z=0; dis

28、p(dnf,dnh,dnsw); if(w2=0) dnf-; do if(dnf200)z=180,dnf-; disp(dnf,dnh,dnsw); while(w2); if(w=0) break; /n=6为定闹时调节功能 while(n=6) z=0; if(w1=0) dnh+; do if(dnh23) dnh=0; if(z200)z=180,dnh+; disp(dnf,dnh,dnsw); while(w1); z=0; disp(dnf,dnh,dnsw); if(w2=0) dnh-; do if(dnh200)z=180,dnh-; disp(dnf,dnh,dnsw

29、);while(w2); if(w=0) break; /n=7 年调整功能 while(n=7) z=0; if(w1=0) yeal+; do if(z200)z=180, yeal+; if(yeal=100) yeal=0; disp(day,mon,yeal); while(w1); z=0; disp(day,mon,yeal); if(w2=0) yeal-; do if(z200)z=180, yeal-; if(yeal0) yeal=99; disp(day,mon,yeal); while(w2); if(w=0) break; /n=8 月调整功能 while(n=8)

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

当前位置:首页 > 教育专区 > 教案示例

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com