单片机数字电子时钟_第1页
单片机数字电子时钟_第2页
单片机数字电子时钟_第3页
单片机数字电子时钟_第4页
单片机数字电子时钟_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、目目 录录 摘摘 要要 .1 前前 言言 .2 第一章第一章 .3 1.1 概述.3 1.2 单片机的发展历程.3 1.3 时钟的特性.3 第第 2 2 章章 系统原理与硬件设计系统原理与硬件设计 .4 2.1 硬件选择.4 2.2 单片机的构成.4 2.3 AT89C52 单片机的引脚说明.5 2.4LED 简介.7 第三章第三章软件设计软件设计.10 3.1 框架图.10 第第 4 4 章章 调试过程及数据分析调试过程及数据分析 .23 4.1 硬件调试.23 4.2 KEIL 调试 .23 4.3 开发板调试.24 结论结论 .24 参考文献参考文献 .25 单片机单片机 C C 语言程

2、序设计语言程序设计. .新余新余: :新余高专新余高专 .25 李光飞等李光飞等. .单片机单片机 C C 程序设计实例指导程序设计实例指导. .北京北京: : 北京航空航天大学出版社北京航空航天大学出版社 .25 胡汉才胡汉才. . 单片机原理及系统设计单片机原理及系统设计M.M. 北京北京: :清华大学出版社清华大学出版社 .26 附录附录 .26 1.1.电路图电路图.26 2.2.程序调试程序调试 .27 .3.3.实物连接图实物连接图 .28 摘摘 要要 本次设计采用 AT89c52 内部定时器、中断等功能,和外部数码管,驱动器等构成。 电子时钟电路采用 24 小时制记时方式,时间用

3、 6 位数码管动态显示。使用 5V 电源供电, 并且在按键的作用下可以进入省电(不显示 LED 数码管)和正常显示两种状态。 关键词:数码管、关键词:数码管、AT89c52AT89c52 The design of the adjustable digital clock base on AT89S52 Abstract This paper introduced the design of the adjustable digital clock based on AT89S52, the specific process of how the system hardware and sof

4、tware 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 design use the same method, consists

5、 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 microcontroller; 前前 言言 一块单片机芯片就是一台计算

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

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

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

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

10、2.1 硬件硬件选择选择 (2)单片机的选择 选用 AT89c52 单片机,并配备 12MHz 晶振,复位电路 采用上电复位。 (3)显示电路选择 采用软件译码动态显示,P3.0-P3.3 作数码管的位选 口。P1.0-P1.6 作数码管的段选口。考虑直接用单片机 I/O 口作位选时驱动功 率不够,用 ULN2803 作为 6 个共阴数码管的位增强驱动器。 (4)电源选择 采用直流 5V 电源供电。 (5)选择器的选择 74ls04(实际物理硬件用 ULN2803 代替)。 (6)AT89C52 是一个低电压,高性能 CMOS 8 位单片机,片内含 8k bytes 的可反复擦写的 Flash

11、 只读程序存储器和 256 bytes 的随机存取数据存储器 (RAM) ,器件采用 ATMEL 公司的高密度、非易失性存储技术生产,兼容标准 MCS-51 指令系统,片内置通用 8 位中央处理器和 Flash 存储单元,功能强大的 AT89C52 单片机可为您提供许多较复杂系统控制应用场合。 芯片上的 FLASH 允许在线编程或采用通用的非易失存储编程器对存储器重 复编程。 2.2 单片机的构成单片机的构成 AT89c51 单片机是在一块芯片中集成了 CPU、RAM、ROM、定时器/计数器和 多种功能的 I/O 线等一台计算机所需要的基本功能部件,AT89C52 单片机单片 机内包含下列几个

12、部件: (1) 一个 8 位 CPU; (2)一个片内振荡器及时钟电路; (3)可反复擦写(1000 次)的 8K 字节 ROM 程序存储器; (4)256 字节 RAM 数据存储器; (5)3 个 16 位定时器/计数器; (6)可寻址 64K 外部数据存储器和 64K 外部程序存储器空间的控制电路; (7)32 条可编程的 I/O 线(四个 8 位并行 I/O 端口) ; (8)一个可编程全双工串行口; (9)2 个外部中断源, 共 6 个中断源; 其内部机构框图如图 2.2 所示: 图 2.2 MCS-51 单片机内部机构框图 2.3 AT89c52单片机的引脚说明单片机的引脚说明 AT

13、89c52 单片机采用 40 条引脚双列直插式器件,引脚除 5V( 40 脚) 和电源地( 20 脚)外,其功能分为时钟电路、控制信号、输入/输出三大 部分,逻辑框图及引脚图分别如图 2.4(a)(b)所示 (a) (b) 图 2.4 AT89c52 单片机逻辑图与引脚图 AT89C52 单片机的内部硬件结构中除了程序存储器由 FLASH 取代了 87C51 单片机的 EPROM 外,其余部分完全相同,其管脚说明如下: (1)VCC:供电电压 (2)GND:接地 (3)时钟电路 XTAL1(19 脚)芯片内部振荡电路(单级反相放大器)输入端。 XTAL2(18 脚)芯片内部振荡电路(单级反相放

14、大器)输出端。 (4)控制信号 RST(9 脚)复位信号:时钟电路工作后,在此引脚上将出现两个机器周期 的高电平,芯片内部进行初始复位,P0 口P3 口输出高电平,将初值 07H 写入 堆栈指针。 ALE(30 脚)地址锁存信号:当访问外部存储器时,P0 口输出的低 8 位地 址由 ALE 输出的控制信号锁存到片外地址锁存器,P0 口输出地址低 8 位后,又 能与片外存储器之间传送信息。另外,ALE 可驱动 4 个 TTL 门。 (29 脚)片外程序存储器读选通:低电平有效,作为PSENPSENPSEN 程序存储器的读信号,输出负脉冲,将相应的存储单元的指令读出并送到 P0 口, 可驱动 8

15、个 TTL 门。PSEN /Vpp(30 脚):当为高电平且 PC 值小于 0FFFH 时,CPU 执行内部程序存储器EAEA 程序;当为低电平时,CPU 仅执行外部程序存储器程序。EA 2.4LED 简介简介 LED 数码管根据 LED 的接法不同分为共阴和共阳两类,了解 LED 的这些特 性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异 外,编程方法也是不同的。图 2.7(a)是共阴和共阳极数码管的内部电路图,它 们的发光原理是一样的,只是它们的电源极性不同而已。 将多只 LED 的阴极连在一起即为共阴式,而将多只 LED 的阳极连在一起即 为共阳式。以共阴式为例,如把

16、阴极接地,在相应段的阳极接上正电源,该段 即会发光。当然,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)

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

18、 静态显示电路 LDE 显示器工作在静态显示时,其公共阳极(或阴极) 接 VCC(或 GND) ,一 直处于显示有效状态,所以每一位的显示内容必须由锁存器加以锁存,显示各 位相互独立。 (2) 动态显示电路 将所有位的段选线的同名端联在一起,由一个 8 位 I/O 口控制,形成段选 线的多位复用。而各位的公共阳极或公共阴极则分别由相应的 I/O 口线控制, 实现各位的分时选通,即同一时刻只有被选通位是能显示相应的字符,而其他 所有位都是熄灭的。由于人眼有视觉暂留现象,只要每位显示间隔足够短,则 会造成多位同时点亮的假象。这就需要单片机不断地对显示进行控制,CPU 需 要不断地进行显示刷新,动态

19、显示电路参见图 2.8,图 2.8 中是扩展了五位的 LED 数码管显示,用一个 74LS04 作为五个 LED 的段选输入,采用动态显示的方 式连接。类似地,16 位的 LED 数码管显示也可以用这种方法来实现。 图 2.8 五位 LED 数码管的动态显示 第三章第三章软件设计软件设计 3.1 框架图框架图 显示时钟 显示闹钟 2S 长击 P2 切换 开关闹钟 P2 IN 2 P1 显示日历 2S P3 IN 2开关显示 P0 秒表功能 P1 开始 P1 停止 P2 短 击 P0 长 击 P0 时钟分调节 P1 分加一长按连加分减一长按连减 P2 时钟时调节 P1 时加一长按连加时减一长按连

20、减 P2P0 闹钟分调节 P1 分加一长按连加分减一长按连减 P2P0 闹钟时调节 P1 时加一长按连加时减一长按连减 P2P0 同理年月日调 节固定 20 xx 年开始 P0 按键流程与工作状态的转变 按键用到:闭合动作、断开动作 单击、连击、短击、 长击 闹钟开 时间到 开始闹铃 (45s) P0 P1 P2 退 去 整点报时 (0:00- 23:00) 闹钟关(ON XX XX)如 00:00 闹钟开(OF XX XX)如 00:00 关显示(省电模式) 显示日历格式(20XX XX XX) 如:2010-04-21 程序清单如下程序清单如下 /* 电子时钟设计 功能描述: 时钟 日历

21、秒表 闹钟(有问题) 整点报时(有问题)等功能 */ #include #define com P2 sbit w=P10; /功能转换按键 sbit w1=P11; /加与秒表开始与暂停键 sbit w2=P12; /减与秒表复位键 sbit pin=P13; /显示开关键 sbit nao=P15; /整点报时信号输出 unsigned char leab10=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f; char times11=0,0,0,0,0,0,0,100,1,1,10; /数组 #define s ti

22、mes0 /显示时钟秒存放位置 #define f times1 /显示时钟分存放位置 #define h times2 /显示时钟时存放位置 #define nf times3 /显示闹钟分存放位置 #define nh times4 /显示闹钟时存放位置 #define dnf times5 /定时闹钟分存放位置 #define dnh times6 /定时闹钟时存放位置 #define dnsw times7 /定时开始/关闭 100 为关,101 为开 #define day times8 /显示 DAY 存放位置 #define mon times9 /显示月存放位置 #define

23、 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) /判断这月有多少天 case 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

24、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 次产生一秒 */ void time(void) interrupt 1 using 1 unsigned char a; TH0=55556/256 ; /10ms 55536 TL0=55

25、556%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(); / 判断闰年的公式 yeal%400|(yeal%4mon+; if(mon12) /月大于 12 年加一月等于 1 mon=1;yeal+ ; if(ye

26、al99) yeal=0; /固定从 20002099 年之间调整 if(n=1 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;x0;x-) for(y=10;y0;y-); /* 扫描函数 x 控制选中调整数码管闪烁 n 判断选中的位闪烁 */ void disp(unsigned char a,b,c) com=0 x00; P3=0 x00; if(q) if(n=4|n=7) else co

27、m=leabc/10; delay(20); com=0 x00; P3=0X02; if(c=100) com=0 x52; else if(c=101) com=0 x71; else com=leabc%10; delay(20); if(n=3|n=6|n=8) else com=0 x00; P3=0X04; com=leabb/10; delay(20); com=0 x00; P3=0X08; com=leabb%10; delay(20); if(n=5|n=9) / 切换日历显示 if(w1=0 while(w1); sss=0; while(sss200)z=210; wh

28、ile(w2); if(z200) nw=nw; if(nw) dnsw=101;else dnsw=100; sss=0; while(sss3)disp(dnf,dnh,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

29、); 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(z200)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(

30、w1=0) dnf+; do if(dnf=60)dnf=0; if(z200)z=180,dnf+; disp(dnf,dnh,dnsw); while(w1); z=0; disp(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); w

31、hile(w1); z=0; disp(dnf,dnh,dnsw); if(w2=0) dnh-; do if(dnh200)z=180,dnh-; disp(dnf,dnh,dnsw);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, y

32、eal-; if(yeal200)z=180, mon+; if(mon12)mon=1; disp(day,mon,yeal); while(w1); z=0; disp(day,mon,yeal); if(w2=0) mon-; do if(z200)z=180, mon-; if(mon200)z=180, day+; if(daya) day=1;disp(day,mon,yeal); while(w1); z=0; disp(day,mon,yeal); if(w2=0) day-; do if(z200)z=180, day-; if(day1) day=a; disp(day,m

33、on,yeal); while(w2); if(w=0) break; /闹钟判断 45s if(f=dnf delay(1); disp(s,f,h); 第第 4 章章 调试过程及数据分析调试过程及数据分析 4.1 硬件调试硬件调试 硬件调试的调试比较困难。因为是调试所以不能对元件进行焊接,只能把 各个元件用导线连接起来。调试的整体过程是:各个系统逐个调试,各部分调 试成功后再进行组装后的整体调试。 调试过程包括: 1. 显示部分的调试 问题:数码管的显示不稳定,最左边的一个数码管显示亮度明显比其他 5 个的亮,受干扰影响比较大。 分析:应该是 ULN2803 的问题,更换为反相器 74LS

34、04 可解决。 2. 控制部分的调试 问题:按下按键后数据有时正常有时又不正常,数据的加减不稳定。 分析:根据分析有两个问题可以导致此种现象,一是按键接触不良可能有 短路,二是程序部分有问题。用万用表测量后发现按键按下后不稳定,更换质 量更好的按键后故障即排除。 4.2 KeiL 调试调试 启动 Keil 软件,选择“Project”菜单下的“New Project”命令,输入项 目的文件名,选择存储路径,点击“保存”按钮。 在“Select Device”窗口中选择“Atmel”下的“AT89C51” 芯片,单击 “确定”按钮。展开“Project Workspace”窗口中的“Target 1”, 右击 “Target 1” ,选择“Options for Target Target 1 ”,选择“Target”选 项在 Keil (MHZ)右边输入“12m” 。选择“Debug”选项,选择“Use Keil Monitor-51 Driver” 。单击“Settings”按钮,串口选择“COM1”,波特率选择 “38400” ,单击“OK”按钮。 右击“Source Group 1” ,选择“Add files to Group Source

温馨提示

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

评论

0/150

提交评论