毕业设计论文基于AT81S51单片机的数字万年历设计

上传人:无*** 文档编号:72351793 上传时间:2022-04-08 格式:DOC 页数:44 大小:1.03MB
收藏 版权申诉 举报 下载
毕业设计论文基于AT81S51单片机的数字万年历设计_第1页
第1页 / 共44页
毕业设计论文基于AT81S51单片机的数字万年历设计_第2页
第2页 / 共44页
毕业设计论文基于AT81S51单片机的数字万年历设计_第3页
第3页 / 共44页
资源描述:

《毕业设计论文基于AT81S51单片机的数字万年历设计》由会员分享,可在线阅读,更多相关《毕业设计论文基于AT81S51单片机的数字万年历设计(44页珍藏版)》请在装配图网上搜索。

1、摘 要 本文介绍了一款基于AT89S51单片机数字钟的设计,通过多功能数字钟的设计思路,详细叙述了系统硬件、软件的具体实现过程。论文重点阐述了数字钟硬件中MCU模块、语音模块、时钟模块和相关控制模块等的模块化设计与制作;软件同样采用模块化的设计,包括中断模块、闹钟模块、时间调整模块设计,并采用简单流通性强的C语言编写实现。本设计实现了时间与闹钟的修改功能、年、月、日和星期的显示功能。并且通过对比实际的时钟,查找出了误差的来源,确定了调整误差的方法,尽可能的减少误差,使得系统可以达到实际数字钟的允许误差范围内。关键词:AT89S51单片机;数字钟;闹钟AbstractThis paper int

2、roduced the design of digital clock based on SCM of AT89S51, the specific process of how the system hardware and software achieved were detailed description through the design of multifunction digital clock. The modular design and production, which consisted of MCU module, clock module and the assoc

3、iated control module, were mainly recounted;As well as hardware designing,software design use the same method, consists suspension module,alarm clock 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 tim

4、e and alarm clock run and change, voice broadcast,functions of the year, month, day and week display have been achieved. And by comparing the actual clock, find out the source of the error and determined the method of adjusting error, reduce errors as much as possibly, so this system can achieve a p

5、ractical digital clock with error within the permissible range.Key words:AT89S51 microcontroller; Digital clock; alarm目 录引言 51 绪论51.1课题背景51.2课题意义51.3 数字钟的应用62 整体设计方案72.1 单片机的选择72.2 单片机的基本结构93 数字钟的设计 103.1 数字钟外围电路设计 103.1.1时钟电路103.1.2LCD显示电路113.1.3电源电路123.2 数字钟的软件设计133.2.1数字钟主程序设计133.2.2LCD显示程序设计133.

6、2.3时钟设置程序134 调试与功能说明144.1 硬件调试144.2 软件调试问题及解决154.3 系统原理图及PCB图 165 结论 17谢辞 18参考文献 19附录 20引言本文介绍了一款基于AT89S51单片机数字钟的设计,通过多功能数字钟的设计思路,详细叙述了系统硬件、软件的具体实现过程。1 绪论这里首先介绍一下课题背景以及课题意义。1.1 课题背景单片机自1976年由Intel公司推出MCS-48开始,迄今已有二十多年了。由于单片机集成度高、功能强、可靠性高、体积小、功耗地、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎“无处不在,无所不为”。单片机的

7、应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通讯等广大领域。单片机有两种基本结构形式:一种是在通用微型计算机中广泛采用的,将程序存储器和数据存储器合用一个存储器空间的结构,称为普林斯顿结构。另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,一般需要较大的程序存储器,目前的单片机以采用程序存储器和数据存储器截然分开的结构为多。本文讨论的单片机多功能定时器的核心是目前应用极为广泛的51系列单片机,配置了外围设备,构成了一个可编程的计时定时系统,具有体积小,可靠性高,功能强等特点。不仅能满足所需要求,而且还有很多功能可供开发

8、,有着广泛的应用领域。20世纪80年代中期以后,Intel公司以专利转让的形式把8051内核技术转让给许多半导体芯片生产厂家,如ATMEL、PHILIPS、ANALOG、DEVICES、DALLAS等。这些厂家生产的芯片是MCS-51系列的兼容产品,准确地说是与MCS-51指令系统兼容的单片机。这些兼容机与8051的系统结构(主要是指令系统)相同,采用CMOS工艺,因而,常用80C51系列来称呼所有具有8051指令系统的单片机,它们对8051单片机一般都作了一些扩充,更有特点。其功能和市场竞争力更强,不该把它们直接称呼为MCS-51系列单片机,因为MCS只是Intel公司专用的单片机系列型号。

9、MCS-51系列及80C51单片机有多种品种。它们的引脚及指令系统相互兼容,主要在内部结构上有些区别。目前使用的MCS-51系列单片机及其兼容产品通常分成以下几类:基本型、增强型、低功耗型、专用型、超8位型、片内闪烁存储器型。1.2课题意义在日常生活和工作中,我们常常用到定时控制,如扩印过程中的曝光定时等。早期常用的一些时间控制单元都使用模拟电路设计制作的,其定时准确性和重复精度都不是很理想,现在基本上都是基于数字技术的新一代产品,随着单片机性能价格比的不断提高,新一代产品的应用也越来越广泛,大可构成复杂的工业过程控制系统,完成复杂的控制功能。小则可以用于家电控制,甚至可以用于儿童电子玩具。它

10、功能强大,体积小,质量轻,灵活好用,配以适当的接口芯片,可以构造各种各样、功能各异的微电子产品。随着电子技术的飞速发展,家用电器和办公电子设备逐渐增多,不同的设备都有自己的控制器,使用起来很不方便。根据这种实际情况,设计了一个单片机多功能定时系统,它可以避免多种控制器的混淆,利用一个控制器对多路电器进行控制,同时又可以进行时钟校准和定点打铃。它可以执行不同的时间表(考试时间和日常作息时间)的打铃,可以任意设置时间。这种具有人们所需要的智能化特性的产品减轻了人的劳动,扩大了数字化的范围,为家庭数字化提供了可能。1.3数字钟的应用数字电子钟具有走时准确,一钟多用等特点,在生活中已经得到广泛的应用。

11、虽然现在市场上已有现成的电子钟集成电路芯片出售,价格便宜、使用也方便,但是人们对电子产品的应用要求越来越高,数字钟不但可以显示当前的时间,而且可以显示日期、农历 、以及星期等,给人们的生活带来了方便。另外数字钟还具备秒表和闹钟的功能,且闹钟铃声可自选,使一款电子钟具备了多媒体的色彩。时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。电子钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及车站、码头、剧院、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的

12、方便。由于数字集成电路技术的发展和采用了先进的石英技术,使电子钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。2 整体设计方案主要设计思想是:整个系统用单片机为中央控制器,由单片机执行采集时钟芯片的时间信号并通过显示模块来输出信号及相关的控制功能。时钟芯片产生时钟信号,利用单片机的I/O口传给单片机;并通过I/O口实现LCD的显示。系统设有16个按键可以对时间星期年月日进行调整,还可以设置闹钟。整体框架如下图所示。LED灯LCD显示单片机电源模块复位电路时钟模块按键模块2.1 单片机的选择AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k

13、Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。 AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,

14、2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。主要功能特性为:兼容MCS-51指令系统;4k可反复擦写(1000次)ISP Flash ROM;32个双向I/O口;4.5-5.5V工作电压;2个16位可编程定时/计数器;时钟频率0-33MHz;全双工UART串行中断口线;128x8bit内部RAM;2个外部中断源;低功耗空闲和省电模式;中断唤醒省电模

15、式;看门狗(WDT)电路;灵活的ISP字节和分页编程;双数据寄存器指针。AT89S51单片机与其他品牌单片机相比有着性价比高,性能稳定的特点。(1) 51单片机的优点如果是作低成本的智能产品,51构架单片机的成本优势,还是无人能敌的。比如一片AT89S51和AT89S52单片机的批量价格大概是5元左右,STC89C52单片机的批量价格大概是6元多,这样的芯片价格是很低的。一片简单的74系列通用数字逻辑芯片还要1元左右,而一片51单片机内部集成有成千上万个晶体管开关电路。51构架已经诞生很多年了,到目前依然有着强大的生命力和实用性,从1976年51构架成功面市,多少年过去了,从90年代初全新闪存

16、结构的AT89C51要90元一片,到现在AT89S51只要5元多一片,51依然大量的使用着。使用51单片机能够有效的控制智能产品整机的成本, 51系列还是有着无法替代的重要地位。(2) AT89S51与AT89C51的比较AT89S51具有ISP在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境上拔除,可以在线烧写。AT89S51的最高工作频率为33MHz, 89C51的极限工作频率是24M,就是说S51具有更高工作频率,从而具有了更快的计算速度。AT89S51具有双工UART串行通道。AT89S51内部集成看门狗计时器,不再需要像89C51那样外接看门狗计时器单元

17、电路。 AT89S51具有双数据指示器。 AT89S51具有电源关闭标识。 AT89S51具有全新的加密算法,这使得对于89S51的解密变为不可能,程序的保密性大大加强,这样就可以有效的保护知识产权不被侵犯。 AT89S51与AT89C51就如同INTEL的P3向P4升级一样,虽然都可以跑Windows98,不过速度是不同的。总之,无论是比其他品牌同类产品相比,还是与同品牌产品相比都显示出了AT89S51优良的性能,更高的性价比。所以AT89S51芯片成为了本系统的首选。2.2 单片机的基本结构AT89S51单片机基本结构主要包括了以下主要部件:(1) 控制器控制器是单片机的指挥控制部件,控制

18、器的主要任务是识别指令,并根据指令的性质控制单片机各功能部件,从而保证单片机各部分能自动而协调地工作。单片机执行指令是在控制器的控制下进行的。首先从程序存储器中读出指令,送指令寄存器保存,然后送至指令译码器进行译码,译码结果送定时控制逻辑电路,由定时控制逻辑产生各种定时信号和控制信号,再送到单片机的各个部件去进行相应的操作。这就是执行一条指令的全过程,执行程序就是不断重复这一过程。控制器主要包括程序计数器、程序地址寄存器、指令寄存器IR、指令译码器、条件转移逻辑电路及时序控制逻辑电路。(2) 存储器AT89S51单片机存储器采用的是哈佛结构,即程序存储器空间和数据存储器空间截然分开,程序存储器

19、和数据存储器各有自己的寻址方式,寻址空间和控制系统。这种结构对于单片机面向控制的实际应用极为方便,有利.在8051/8751弹片击中,不仅在片内集成了一定容量的程序存储器和数据存储器及众多的特殊功能寄存器,而且还具有极强的外存储器的扩展能力,寻址能力分别可达64KB,寻址和操作简单方便。(3) 并行I/O口MCS-51单片机共有4个双向的8位并行I/O端口(Port),分别记作P0-P3,共有32根口线,各口的每一位均由锁存器、输出驱动器和输入缓冲器所组成。实际上P0-P3已被归入特殊功能寄存器之列。这四个口除了按字节寻址以外,还可以按位寻址。由于它们在结构上有一些差异,故各口的性质和功能有一

20、些差异。(4) 时钟电路与时序时钟电路用于产生MCS-51单片机工作时所必需的时钟信号。MCS-51单片机本身就是一个复杂的同步时序电路,为保证同步工作方式,MCS-51单片机应在唯一的时钟信号控制下,严格地按时序执行进行工作,而时序所研究的是指令执行中各个信号的关系。3 数字钟的设计从本章开始着手数字钟的设计,包括硬件和软件两部分。3.1 数字钟外围电路设计3.1.1时钟电路(1) 单片机时钟时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊的一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。常用的时钟电路有两种方式:一种是

21、内部时钟方式,另一种为外部时钟方式。本文用的是内部时钟方式。电路设计如图所示。AT89S51单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反向放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体振荡器和微调电容,就构成一个稳定的自激振荡器。(2) 时钟芯片采用带RAM的时钟芯片DS1302。该芯片可以进行时分秒的计数,具有100年日历,可编程接口,还具有报警功能和掉电保存功能,并且可以对其方便的进行程序控制DS1302它通过串行方式与单片机进行数据传送,向单片机提供包括秒、分、时、日、月、年等在内的实时时间信息,并可对月末日期、闰年天数自动进行调整;还

22、拥有用于主电源和备份电源的双电源引脚,在主电源关闭的情况下,也能保持时钟的连续运行。另外,它还能提供31字节的用于高速数据暂存的RAM。有了这些特点,DS1302已在许多单片机系统中得到应用。 DS1302的引脚排列如图所示,各引脚的功能见下表 DS1302功能表引脚功能X1,X232768HZ晶振引脚端RST复位端I/O数据输入/输出端SCLK串行时终端GND地VCC2,VCC1主电源与后备电源引脚端DS1302时钟芯片内主要包括移位寄存器、控制逻辑电路、振荡器、实时时钟电路以及用于高速暂存的31字节RAM。DS1302与单片机系统的数据传送依靠RST,I/O,SCLK三根端线即可完成。其工

23、作过程可概括为:首先系统RST引脚驱动至高电平,然后在作用于SCLK时钟脉冲的作用下,通过I/O引脚向DS1302输入地址/命令字节,随后再在SCLK时钟脉冲的配合下,从I/O引脚写入或读出相应的数据字节。因此,其与单片机之间的数据传送是十分容易实现的。DS1302与单片机电路相连如下图所示。3.1.2LCD显示电路液晶显示模块具有体积小、功耗低、显示内容丰富等特点,现在字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件了。 1602B可以显示2行16个字符,有8位数据总线D0-D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。该模块也可以只用D4

24、-D7作为四位数据分两次传送。这样的话可以节省MCU的I/O口资源。各引脚的功能见下表LCD引脚功能图编号符号引脚说明编号符号引脚说明1VSS电源地9D2双向数据口2VDD电源正极10D3双向数据口3VL对比度调节11D4双向数据口4RS数据/命令选择12D5双向数据口5R/W读/写选择13D6双向数据口6E模块使能端14D7双向数据口7D0双向数据口15BLK背光源地8D1双向数据口16BLA背光源正极 从该模块的正面看,引脚排列从右向左为:15脚、16脚,然后才是114脚。VDD:电源正极,4.55.5V,通常使用5V电压;VL:LCD对比度调节端,电压调节范围为05V。接正电源时对比度最

25、弱,接地电源时对比度最高,但对比度过高时会产生“鬼影”,因此通常使用一个10K的电位器来调整对比度,或者直接串接一个电阻到地;RS:MCU写入数据或者指令选择端。MCU要写入指令时,使RS为低电平;MCU要写入数据时,使RS为高电平;R/W:读写控制端。R/W为高电平时,读取数据;R/W为低电平时,写入数据;E:LCD模块使能信号控制端。写数据时,需要下降沿触发模块。D0D7:8位数据总线,三态双向。如果MCU的I/O口资源紧张的话,该模块也可以只使用4位数据线D4D7接口传送数据。本充电器就是采用4位数据传送方式;BLA: LED背光正极。需要背光时,BLA串接一个限流电阻接VDD,BLK接

26、地,实测该模块的背光电流为50mA左右;BLK: LED背光地端。3.1.3电源电路 3.2 数字钟的软件设计3.2.1数字钟主程序设计主程序主要由main()组成通过对相关子程序的调用,实现了对时间的设置与修改、闹钟的设置与修改、LCD显示等主要功能。相关的调整是靠对功能键的判断来实现的。如对set键的判断,对up键的判断。 注:程序参考附录部分。3.2.2LCD显示程序设计 LCD显示子程序可对DS1302的时间进行设置和读取DS1302内部的时间、连续的读写操作、RAM的应用、充电部分的应用、写保护、抗干扰等可以实现上述功能。在编写中应注意的是进制的转换,下面是BCD码到十进制数的转换函

27、数。注:程序参考附录部分。3.2.3时钟设置程序时钟的修改首先要按功能键并停止时间的输出显示,否则系统继续刷新时间则无法修改,所以时间是不输出到LCD的。修改的部分以修改的为准,没有修改的通过中断保护起来。等修改成功后继续显示。注:程序参考附录部分。4 调试与功能说明4.1 硬件调试在实际使用中,我们发现DS1302的工作情况不够稳定,主要表现在实时时间的传送有时会出现误差,有时甚至整个芯片停止工作。我们对DS1302的工作电路进行了分析,其与单片机系统的连接如图2所示。从图中可以看出,DS1302的外部电路十分简单,惟一外接的元件是32768Hz的晶振。通过实验我们发现:当外接晶振电路振荡时

28、,DS1302计时正确;当外接晶振电路停振时,DS1302计时停止。因此,可能是32768Hz晶振是造成 DS1302工作不稳定的主要原因。 DS1302与单片机系统的连接图DS1302时钟的产生基于外接的晶体振荡器,振荡器的频率为32768Hz。该晶振通过引脚X1、X2直接连接至DS1302,即DS1302是依靠外部晶振与其内部的电容配合来产生时钟脉冲的。由于DS1302在芯片本身已经集成了6pF的电容,所以,为了获得稳定可靠的时钟,必须选用具有6pF负载电容的晶振。然而,许多人在选用晶振时仅仅注意了晶振的额定频率值,而忽视了晶振的负载电容大小,甚至连许多经销商也不能提供所售晶振的负载电容。

29、所以即使在使用中选用了符合32768Hz的晶振,但如果该晶振的负载电容与DS1302提供的6pF不一致时,就会影响晶振的起振或导致振荡频率的偏移,出现问题。利用辅助电容实现负载匹配的方法来解决当所选的晶振负载电容不是6pF时,可以采用增加辅助电容的方法提高或降低DS1302振荡器的电容性负载,使之与晶体所需的电容值匹配。如果已知晶体的负载电容为CI,若CI6pF,则可以在晶体的一端增加一个串联电容CS,以产生所需的负载电容CI,即1/CI=1/6pF+1/CS,通过计算即可得出应增加的辅助电容大小。辅助电容的接法如图所示。 辅助电容连接图对于晶体振荡器来说,其振荡频率与负载电容之间的关系是确定

30、的。以本文讨论的DS1302使用的32768Hz晶振为例:当它工作于所要求的负载电容时,能较准确地产生 32768Hz的频率;当它的负载电容小于6pF时,其振荡频率会正向偏移;当它的负载电容大于6pF时,其振荡频率就会负向偏移。因此,对于未知负载电容的晶体应首先采用实验的方法,在其两端加入辅助电容使晶体起振,然后用频率计测出振荡频率。若测得频率大于32768Hz,说明负载电容偏小;若测得频率小于32768Hz,说明负载电容偏大。对辅助电容逐步调整,最终使振荡频率尽可能接近32768Hz,则此时晶体端所接负载电容的总和就是适合该晶体的负载电容。以上方法经多次使用,证明确实有效。它放宽了DS130

31、2在使用中对晶振的条件要求,增强了DS1302在工作中的稳定性,对DS1302更广泛地应用具有积极的意义。4.2 软件调试问题及解决显示程序开始怎么调试就是不通,后来看了一位网友的文章写的是关于DS1302调试过程中应注意的事项,指出了ds1302的datasheet中的一些错误,这才使我恍然大悟,原来读数据的时间要求是非常严格的。要求在命令字之后的第一个下降沿就要读数据,否则读出的数据就是错误的,也不能说完全错误,那就必须作必要的调整。下次一定要注意:别人的程序很可能有缺陷,能参考,但不能够完全照抄,数据手册一定要细读。这告诉我,自己的c语言功夫还不够,具体地说差得好远。提醒自己要努力。一定

32、要学会应用汇编,汇编与c的相互调用4.3 系统原理图及PCB图5 结论 本设计主要介绍了单片机的历史发展,以及数字钟在日常生活中的具体应用给日常生活带来的方便。在第二章介绍了系统的整体构思方案,有几个模块组成,以及每个模块的连接方法。核心芯片单片机的基本资料介绍,着重介绍了单片机的对比与选择。AT89S51单片机最小系统的架构与实验。多功能数字钟系统的硬件模块组成。详细介绍了各个模块的组成及功能。MCU的组成和特点、专门的时钟芯片和单片机时钟、显示模块的构建与运用、语音芯片的选择。基本上是完成了作为单片机所需的硬件结构。同时也显示了对软件支持的强烈要求。本章介绍了本设计的软件设计,所有的功能在

33、流程图里清晰的表现了出来。包括整体流程图、时钟及闹钟修改流程图、中断流程图等。并附有相关程序的主要部分。系统的功能基本符合设计任务的要求,经过大量的测试数据显示, 系统的可靠性已经能够达到了实际电子钟的设计要求。同时系统具有很强的扩展性。在此次的数字钟设计过程中,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和其具体的使用方法。在涉及到2进制与十进制转换时出现了错误最终准确地找出错误所在并及时纠正了。在设计电路中,往往是先仿真后连接实物图,但有时候仿真和电路连接并不是完全一致的。例如仿真的连接示意图中,往往没有接高电平的16脚或14脚以及接低电平的7脚或8脚,因此在实际的电路连接中往往容易

34、遗漏。在仿真电路中必须连接反馈线才能正常显示,而在实际电路中无需再连接,因此仿真图和电路连接图还是有一定区别的。在设计电路的连接图中出错的主要原因都是接线和芯片的接触不良以及接线的错误所引起的。设计是一个漫长而充满挑战的过程,在发现错误与解决错误的过程中我发现自己的能力得到了很大的提高。但是也留下了些遗憾:由于资金和本地的市场条件语音功能还没有完全实现。希望在以后的扩展中能够不断的完善。参考文献1 张专成 赵怀勋.单片机测控系统中的监视定时器M.武警技术学院.Mar1997:286-354.2 张景元.基于单片机的多用途定时器的设计与实现J.电子工程师2000年第8期.3 ATMEL.Micr

35、ocontroller Data bookM.2002:108-243.4 Mark1.Montrose.PRINTED Circuit Board Design Techniques for EMC ComplianceM.IEE Press series.2000:348-492.5 范立南.单片微机接口与控制技术M.沈阳:辽宁大学出版社.1996:78-206.6 张友德.单片微型机原理、应用与实践M.上海:复旦大学出版社.1992:347-468.7胡汉才.单片机原理及接口技术M.北京:清华大学出版社.1996;546-643.8余永权.单片机与家用电器智能化设计M.北京:电子工业出版

36、社.1995:347-502.9房小翠,王金凤.单片微型计算机与机电接口技术M.北京国防工业出版社.2002:278-422.10皮红梅,李英顺.单片机开发中的定时方法J.沈阳石油化工高等专科学校学报.2002年12月.11Maxim公司.Newreleases Data Book 1996J.12 Chris Nagy.Texas Instruments IncorporatedM.2003:292-302.13Mark .Research on the Problems of Designing Digital Clock Based on FPGAJ.2005.附 录以下为部分设计程序1

37、.主程序main部分(1)头文件#ifndef _MAIN_H#define_MAIN_H#include Init51.h#include key.h#include DS1302.h#include LCD1602.h#endif(2)C程序部分#include main.huint8 AbolishFlag = 1 ; /取消标志,作为是否需要改变原值的时候的标志。=1:改变 =0: 不改变 (用于第18行)uint8 Count50ms =0 ; /用于定时器sbit LED = P20 ; /指示灯int Enter_A_Numb(uint8 x, uint8 y ) /非负数 ui

38、nt8 Keyvalue,FirstFlag=1,Flag=1; int Numb=0; while( Flag ) Keyvalue = key() ; if( Keyflag=1 ) Keyflag = 0; if( Keyvalue = 14 ) AbolishFlag = 1 ; / 切记用过一次后要还原 AbolishFlag= 0 ; return Numb ; else if( Keyvalue 11 ) Numb = Numb * FirstFlag + Keyvalue - 1 ; FirstFlag = 10 ; /Flag 第一次为1 ,之后都为 10 Show_Nub(

39、x,y,Numb); else if( Keyvalue = 11 ) AbolishFlag= 0 ; Flag = 0 ; /确定键,输入完毕 else if( Keyvalue = 12 )/消除键 Numb = ( Numb - ( Numb % 10 ) ) /10 ; ShowPeachur(x, y ,table_9 ); /先消除原来的数 Show_Nub(x,y,Numb); return Numb;uint8 ChangNumber_int_To_char_(int IntNumber) /只限于 099 之间的数 : 89 - 0x89 uint8 CharNumber=

40、0; CharNumber = IntNumber / 10 ; CharNumber = CharNumber =0 ; i - ) Keyflag=0; KeyValue=0; /恢复初态。 write_com(0x01); switch( i ) case 6 : p = table_6;break ; case 5 : p = table_5;break ; case 4 : p = table_4;break ; case 3 : p = table_3;break ; case 2 : p = table_2;break ; case 1 : p = table_1;break ;

41、 case 0 : p = table_0 ;break ; ShowPeachur(1, 1, p ); write_com ( 0x80+40 ); /光标 TempChangValue = ChangNumber_int_To_char_( Enter_A_Numb(2,1) ); if( AbolishFlag = 0 ) SetTimeFlag= 1; AbolishFlag = 1 ; Timetablei = TempChangValue ; if( SetTimeFlag ) set_time() ; write_com(0x01); void SetRingTime() ch

42、ar i; /必须为 char uint8 KeyValue=0,TempChangValue,*p; for(i=6; i=0 ; i - ) Keyflag=0; KeyValue=0; /恢复初态。 write_com(0x01); switch( i ) case 6 : p = table_6;break ; case 5 : p = table_5;break ; case 4 : p = table_4;break ; case 3 : p = table_3;break ; case 2 : p = table_2;break ; case 1 : p = table_1;br

43、eak ; case 0 : p = table_0 ;break ; ShowPeachur(1, 1, p ); write_com ( 0x80+40 ); /光标 TempChangValue = ChangNumber_int_To_char_( Enter_A_Numb(2,1) ); if( AbolishFlag = 0 ) AbolishFlag = 1 ; RingTimetablei = TempChangValue ; write_com(0x01);void Show_Time() uint8 KeyValue=0; write_com(0x01); while(1)

44、 get_time(); Displaytime(); KeyValue = key(); if( Keyflag = 1 ) Keyflag =0; switch(KeyValue) case 15 : SetTime();break; case 16 : SetRingTime();break; if( RingTimetable6 = Year & RingTimetable5 = Week & RingTimetable4 = Month & RingTimetable3 = Day & RingTimetable2 = Hour & RingTimetable1 = Minit &

45、RingTimetable0 = Second) TR0 = 1 ; void InitTimeCount() TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1;void main() LED = 0 ; / 灯灭 InitTimeCount(); Init_LCD1602(); DS1302_init(); set_time(); Show_Time();void Time() interrupt 1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; +Count

46、50ms; if( ( Count50ms % 5 ) = 0 ) LED = !LED ; if( Count50ms = 200 ) / 10秒结束 TR0=0; /关中断,停止计时 LED=0; Count50ms=0; /恢复初值0 2.按键设计程序(1)头文件#ifndef _KEY_H#define _KEY_H#include Init51.h#defineKeyCome P1extern uint8 Keyflag;extern uint8 key();extern void _delay_ms(uint8 z);#endif(2)C文件#include main.huint8

47、 AbolishFlag = 1 ; /取消标志,作为是否需要改变原值的时候的标志。=1:改变 =0: 不改变 (用于第18行)uint8 Count50ms =0 ; /用于定时器sbit LED = P20 ; /指示灯int Enter_A_Numb(uint8 x, uint8 y ) /非负数 uint8 Keyvalue,FirstFlag=1,Flag=1; int Numb=0; while( Flag ) Keyvalue = key() ; if( Keyflag=1 ) Keyflag = 0; if( Keyvalue = 14 ) AbolishFlag = 1 ; / 切记用过一次后要还原 AbolishFlag= 0 ; return Numb ; else if( Keyvalue 11 )

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

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

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


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