毕业论文基于AT89C51单片机的多功能数字钟电路的设计.doc_第1页
毕业论文基于AT89C51单片机的多功能数字钟电路的设计.doc_第2页
毕业论文基于AT89C51单片机的多功能数字钟电路的设计.doc_第3页
毕业论文基于AT89C51单片机的多功能数字钟电路的设计.doc_第4页
毕业论文基于AT89C51单片机的多功能数字钟电路的设计.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

吉林师范大学毕业论文(设计)论文分类号:密 级:公开基于at89c51单片机的多功能数字钟电路的设计学院、专业:信息技术学院电子信息工程姓名学号:年 级 班:2011级2班指导教师:2015年1月2日不要删除行尾的分节符,否则将会出现页码格式错误!此行不必删除,打印不显示。吉林师范大学信息技术学院本科毕业论文基于单片机的多功能数字钟电路的设计中文摘要在这个多元化的社会上,人们的时间概念越来越强,对于时间的精准性以及数字钟功能的要求也越来越高。老式钟表简单的走时功能已经因为人们多样化的需求而被淘汰,因此,对多功能数字钟的研究势在必行。本文所研究的多功能数字钟是基于51单片机,外加lcd1602显示模块,按键模块,ds1302时钟模块,ds18b20温度采集模块以及蜂鸣器发声模块等五大硬件部分。利用c语言编写软件部分,分为时钟模块,温度模块,显示模块,按键模块以及发声模块等不同子程序来对硬件模块进行处理,实现走时、预置时间和日期、整点报时、自动区分瑞年是大小月、闹铃、生日提醒以及测温等功能,在现实生活中给人们带来很大的方便。关键词多功能数字钟;ds1302;lcd1602;ds18b20;蜂鸣器。idesign circuit of multifunctional digital clock based mcuzheng zi peng abstract in this pluralistic society, peoples concept of time is growing, as well as the requirements for precision digital time clock functions are also increasing. vintage watches simply because people go when the function has diversified needs to be eliminated, and therefore, the study of multi-function digital clock is imperative. this paper is based on 51 microcontroller, plus lcd1602 display module, key module, ds1302 clock module, ds18b20 temperature acquisition module and the buzzer five modules and other components of the hardware part. use c language software part, divided clock module, temperature module, display module, the key modules and sound modules, different routines for processing hardware module, travel time, preset time and date, the whole point of time, automatically distinguish swiss on the size of months, alarm, birthday reminders, and temperature and other functions, in real life, to bring great convenience.keywords: multifunctional digital clock; ds1302; lcd1602; ds18b20; buzzer.ii-不要删除行尾的分节符,此行不会被打印iii目 录中文摘要iabstractii第1章 绪论11.1多功能数字钟的研究背景11.2多功能数字钟的发展状况11.3多功能数字钟研究的目的及意义2 1.4论文的主要内容2第2章多功能数字钟的总体设计32.1多功能数字钟的组成模块32.2多功能数字钟的功能介绍3 2.2.1时间和日历的显示3 2.2.2时间和日期的手动设置4 2.2.3温度的采集及显示4 2.2.4闹钟的设置4第3章多功能数字钟电路的硬件设计53.1系统硬件总图53.2at89c51的介绍53.3时钟模块的介绍63.4温度模块的介绍83.5lcd显示模块的介绍83.6晶振电路和复位电路的介绍9第4章多功能数字钟的软件设计114.1设计框架图114.2源程序代码114.3keil软件程序的调试224.4proteus仿真224.5应用前景展望及改进24参考文献25致谢26千万不要删除行尾的分节符,此行不会被打印。在目录上点右键“更新域”,然后“更新整个目录”。打印前,不要忘记把上面“abstract”这一行后加一空行5第1章 绪论1.1 多功能数字钟的研究背景在现实生活中,时间对于人们来说已经越来越重要了。人们有时候会因为忙碌工作而把一些重要的日子忘了,如生日、纪念日等,在有约的时候不能迟到。对于只能显示时间及日期的传统时钟,功能简单而无法满足人们的需求。因此,人们在生活中拥有一个集记时、走时、报时、定时等功能于一体的多功能数字钟是很重要的。他可以为我们提醒时间,少错过重要的事。多功能数字钟的开发具有重大意义,它能给人们的生活带来很大的便利。现代的数字钟需要在硬件及软件方面工体提升,以加强数字钟的功能,方便人们的生活。其硬件电路由时钟模块、温度检测模块、按键模块、显示模块以及报警模块等部分组成。利用c语言编写程序使硬件电路尽量简单稳定,减小来自环境的干扰,尽可能减小元器件精度不够而带来的误差,然而数字钟依然可以得到改进和提高如选用精度更高的元器件。与以前的时钟相比,多功能数字钟走时更准确,使用寿命更长,功能更强大,因此受到人们的喜爱而得到广泛的使用。数字钟的基本功能是记时,走时,广泛应用电影院,火车站,汽车站等公共场所。而数字钟的单一功能不能再满足人们多元化的生活需要了。因此急切需要研究出多功能数字钟,以能满足生活中不同场所下各种不同的需要。例如:在时钟的基础上添加温湿度检测,噪声的检测,而在工业生产中,可以通过温度的变化来控制锅炉是否加热,在量产的产业中,我们可以在时钟的基础上加上计数功能。1.2 多功能数字钟的发展状况 改革开放以后,数字钟和数字电路在我国同时发展起来。经过30多年的发展,集成电路产业形成了百家左右的规模。其中北京大唐、华大、深圳华威等几家设计公司的销售额度超过亿元。许多外国的著名公司也都纷纷来中国建立集成电路的设计公司。 目前,我们要走的是尽量完善数字钟的各种功能,并且根据不同的使用场合来开发出各种功能,使其摆脱普通时钟功能简单的局限,得到大众的接受,从而广泛的应用于现实生活以及工业生产中,给人们带来方便。 多功能数字钟相对于一般时钟来说,功能更强,外观新颖等优点而占据了大部分市场。而其走时精准,为生活中忙碌的人们提供了精准的时间,使人们对时间有了高度的把握,从而不会因时间问题出事。1.3 多功能数字钟研究的目的及意义传统的的时钟功能简单,无法满足人们的需求,因此,人们开始研究多功能数字钟的目的是为了更好地满足人们生活需求。而在现实生活中,时间对于人们来说很重要,在火车站、汽车站以及工业生产车间等地方。而在生产车间里,生产的东西各不相同,因此有些特别的技术需求。例如:有的产品生产是量化的,因此人们需要一个能计数的工具,这里我们可以在时钟的基础上加上计数功能。因此,根据应用的环境来研究不同功能的数字钟,这样才能使其更好的满足人们生活及生产的需要。因此,多功能数字钟的各种功能还待研究,使其在生活及生产的各方面得到人们的认可,真正成为人们的小助手。1.4 论文的主要内容论文研究的是多功能数字钟的设计,使得数字钟具有走时、预置时间和日期、整点报时、自动区分瑞年是大小月、闹铃、生日提醒以及测温等功能。论文设计中,利用温度传感器ds18b20对温度进行检测,通过时钟芯片中的数据对时间进行更新。at89c51单片机利用程序来读取温度传感器和时钟芯片内的寄存器数据,通过程序将数据转换成点阵字模,然后传输给lcd1602液晶显示器,利用其内部的点阵将其显示在屏幕上。闹铃功能则由蜂鸣器实现,而时间及日期的更改可通过按键模块实现。第2章 多功能数字钟的总体设计2.1 多功能数字钟的组成模块多功能数字钟的硬件部分由五个模块组成,温度采集模块采集外部温度,时钟模块更新时间,显示模块则是将温度传感器采集到的温度以及时钟芯片的时间日期显示出来,方便观察,按键模块设置时间日期以及闹铃,发声模块则是由蜂鸣器组成,利用其发声的特点达到闹铃的目的。这五个硬件模块通过核心控制器单片机的控制有效的结合起来,通过单片机内部程序的调节,将五个硬件模块有效的结合在一起,从而达到时钟的显示、温度的采集与显示以及闹铃等目的。2.2 多功能数字钟的功能介绍 多功能数字钟是通过硬件电路搭建和软件配合显示时间的装置。硬件部分利用ds1302时钟芯片作为时钟模块,通过软件设定和读取芯片里的时间,是时间得到更新,然后通过软件将读取的时间通过显示模块lcd1602液晶显示器上显示出来。通过ds18b20的温度感应部分将温度数据采集到,然后经过程序读取出来,再经过程序将其转换为点阵字模在液晶显示器上显示。通过按键模块设置时间以及闹铃。当时间达到设定值时,利用蜂鸣器发声,告诉人们设置的时间已到,该做自己安排的事情了。2.2.1 时间和日历的显示在显示模块的设计过程中,我考虑了两种方案:第一、通过八段数码管显示,在这种显示方案中,采用动态显示的方法点亮数码管,利用74hc138译码器控制数码管的八个笔端,然而考虑到年、月、日、星期、时、分、秒以及温度全部显示需要的数码管太多,如果采用此方案,硬件电路将会很复杂,因此放弃这种方案;第二、通过lcd1602液晶显示器显示,利用每个点阵的亮与不亮来显示需要显示的内容。lcd1602是指显示器上可以显示两行,每行为十六个字符。这个方案相对于第一种方案来说使用更加方便,多种控制指令可以控制显示器的各种显示功能:光标的左右移动以及清屏等。于是我采用了第二种方案,通过lcd1602进行显示,在程序复杂一些的情况下简化了硬件电路的设计。 2.2.2 时间和日期的手动设置 按键的变化通过电路转换成高低电平的变化,单片机通过引脚电平的高低来判断按键是否按下。p2.0脚到p2.3脚为按键引脚,四个按键的功能为设置键,加数键,减数键以及以为键。在程序中判断哪个按键按下,然后实现对应按键的功能,从而达到设置时间和日期的目的。但是,按键按下的时候会有抖动,因此在程序中要进行按键去抖操作。2.2.3 温度的采集及显示温度传感器内部有两个温度系数晶振,它们分别为提供脉冲,让温度传感器内部的两个减计数器进行计数。在阀门打开时开始计数,两个减数计数器的预置值同时开始减1。当减数计数器1的预置值减到0的时候,温度寄存器内的值将自动加1,预置值重装,重新开始计数;而当减数计数器2的预置值减到0的时候,停止计数。此时温度寄存器内的值就是当前测得的温度值。这样就完成了测温的过程。然后单片机通过程序将测得的温度读取出来,经过程序的转化变化为点阵字模,让其可以在lcd1602上显示出来。这样就完成了温度的显示过程。2.2.4 闹钟的设置p2.0到p2.3四个端口为按键端口,在按键没动作的时候,四个端口的电平都为高,而在按键有动作时,对应的端口电平就会被拉低。因此,在判断是否有按键按下时,我们只需判断每个端口的电平即可,十分方便。然而,在按键闭合和释放的过程中,都要经过一定的时间才能达到稳定,在这段时间内,端口电平会在高、低电平之间处于一种不稳定的状态,这种状态我们称为抖动。为了消除因抖动而带来的影响,在程序中需要一个去抖操作,就是在按键电平变化时加上一个10ms左右的延时。由于本系统中按键较少,因而没有采用矩阵按键二十采用了独立按键,这样每个按键占用一个i/o口线,每个按键工作时都是互不影响的。第3章 多功能数字钟电路的硬件设计3.1 系统硬件总图图3-1多功能数字钟电路图3.2 at89c51的介绍图3-2at89c51引脚图如图3-2所示为单片机的40个引脚,各引脚功能如下:vcc:at89c51 电源正端输入,接+5v。gnd:电源地端。p0口:p0口是一个8位漏极开路双向i/o口。在数据输出时,外接上拉电阻才能使“1”信号正常输出。p1口:p1口是准双向口,它只能作为通用i/o接口使用。p2口:p2口是准双向口,两种用途:通用i/o接口和高八位地址线。p3口:p3口除了作为准双向通用i/o接口使用外,它的每根线都具有第二功能。xtal1:系统时钟的反相放大器输入端。xtal2:系统时钟的反相放大器输出端。在xtal1 和xtal2 之间接上一个晶振就可以运行了。为了系统更加稳定,且避免因噪声干扰而容易死机,可以用一个小电容将两个引脚与地连上。reset:复位输入引脚。ea/vpp:片外程序存储器选用端。ale/prog:地址锁存信号输入端。p3口各引脚的第二功能:p3.0:rxd,串行通信输入。p3.1:txd,串行通信输出。p3.2:int0,外部中断0输入。p3.3:int1,外部中断1输入。p3.4:t0,计时计数器0输入。p3.5:t1,计时计数器1输入。p3.6:wr:外部数据存储器的写入信号。p3.7:rd,外部数据存储器的读取信号。3.3 时钟模块的介绍1、ds1302的性能特性实时时钟,拥有对年、月、日、时、分、秒计时的功能,同时还具有对闰年 补偿的功能;用于存放临时数据的ram;最少引脚的串行i/o;2.55.5v 电压工作范围;当在2.5v电压下工作时,每小时的耗电量小于300na;具有便捷多样的传输方式;3线接口简单;可选的慢速充电的能力。 ds1302时钟芯片供电方式有两种:一种是主电源供电,而在主电源掉电的情况下,则由备用电源为其供电,使其能够继续工作。而在备用电源供电 的情况下,时钟芯片只有走时的功能,而不能进行读写操作。当两个电源同时供电时,ds1302会选择电压较高的那个为电源,而拒绝电压较小的电源为其供电。ds1302时钟芯片的引脚示意图如图3-3所示。图3-3 ds1302 引脚示意图 如图3-3所示,vcc1为主电源引脚,vcc2为备用电源引脚,x1与x2外接晶振,rst为复位/片选线,i/o引脚为串行数据输入/输出端(双向),sclk引脚为串行数据输入端。2、ds1302数据操作原理时钟芯片与单片机的数据传输是双向的,时钟芯片的动作由单片机控制。单片机通过向时钟芯片发送控制字来控制时钟芯片的动作。如果控制字节的第八位是逻辑0,就不能往时钟芯片写入数据。如果第七位是0 ,就可以对日历时钟数据进行存取。第六位到第二位是操作单元的地址。第一位控制读写操作,为1进行读操作,为0进行写操作。总是从第一位开始输出控制字节。暂停时钟:当我们在进行时钟调整的时候,需要对时钟芯片进行时钟暂停操作。而在时钟的秒寄存器的控制位中,其第八位就是时钟暂停位。要想时钟暂停,将时钟暂停位置1即可。当其为0时,时钟将开始启动。12-24/am-pm记时方式:12或者24小时方式定义位为小事寄存器的第八位,当其为高电平时,选择的是12小时制,为低电平时,选择的是24小时制。3.4 温度模块介绍温度传感器ds18b20有三个引脚,分别是电源正,地以及数据传输端。其测温范围在-55c到+125c之间,为其3到5v电压就能正常工作。它支持“一线总线”接口,这种方式能大大挺高系统的抗干扰性。图3-4ds18b20接线图如图3-4所示为ds18b20的接线图,它的1,3脚分别是电源地和电源正,中间的2脚是ds18b20的数据输入/输出端,单片机正是通过这个引脚与ds18b20进行数据传输的。3.5 lcd显示模块的介绍lcd1602主要技术参数:显示容量:162个字符。芯片工作电压:4.5-5.5v。工作电流:2.0ma(5.0v)。模块最佳工作电压:5.0v。字符尺寸:2.954.35(wh)mm。引脚功能说明:第1脚:vss为电源地。第2脚:vdd为电源正。第3脚:液晶显示器对比度调整端。接地时对比度最高。第4脚:寄存器选择。置高选择数据寄存器,否则选择指令寄存器。第5脚:读写信号线。置高进行读操作,否则进行写操作。第6脚:使能端。当其产生下降沿时,液晶模块执行命令。第7-14脚:8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。其接线如图3-5所示:图3-5 液晶显示模块的硬件接线图3.6 晶振电路和复位电路的介绍1、晶振电路 单片机的运行速度由其内部时钟频率决定,而晶振的好坏则决定了其时钟频率。因此晶振电路对单片机来说十分重要,它对单片机的正常运行起到了决定性作用。时钟电路分为内部时钟、外部时钟两种方式。本文采用的就是内部时钟方式。电路图如下:图3-6晶振电路2、复位电路 at89c51单片机有一个复位引脚rst,它的作用是将单片机系统复位。其复位方式有2种,上电复位、按钮复位。两种方式的原理都是一样的,就是使rst引脚得到高电平。如图3-7:当系统上电时,电容会有一个短暂的充电过程,而这个短暂的过程中,复位引脚为高电平,系统完成复位。当按钮按下时,rst复位引脚与电源短接,被拉高复位。但要想成功复位,必须要保证按钮按下时间达到两个机器周期。电路图如下:图3-7复位电路第4章 多功能数字钟的软件设计4.1 设计框架图图4-1设计框架图 此图清楚的表现出了多功能数字钟的组成部分以及数据传输情况。ds1302时钟芯片以及ds18b20温度采集模块与单片机之间数据传输是双向的。按键模块只需要将数据传送给单片机,由单片机出来得到的数据就行,而不需要单片机给它们发送数据,因此数据是从它们传送向单片机,是单向传输。lcd1602显示模块及发声模块不会传输数据给单片机,它们只需要接受来自单片机的数据,根据数据的不同来显示以及发声就行,因此数据是由单片机发送给它们,是单向传输。4.2 源程序代码#include#include#define uchar unsigned char#define uint unsigned int #define time (0x10000-50000)#define flag 0xef /闹钟标志 /引脚连接图sbit rst=p35;sbit clk=p34;sbit dat=p33;sbit rs=p15;sbit rw=p16;sbit e=p17;sbit dq=p14; /温度输入口sbit p3_2=p32;sbit acc_7=acc7;/全局变量及常量定义uchar i=20,j,time116;uchar alarm2,time215,time3; uchar code day=31,28,31,30,31,30,31,31,30,31,30,31;uint code table1=64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178,65217;/发声部分的延时时间uchar code table2=0x82,1,0x81,0xf4,0xd4,0xb4,0xa4,0x94,0xe2, 0xe1,0xd4,0xb4,0xc4,0xb4,4,0; /lcd自建字 uchar code tab=0x18,0x1b,5,4,4,5,3,0, 0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,/年 0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00,/月 0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00;/日 /*温度小数部分用查表法*/uchar code ditab16=0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06, 0x07,0x08,0x08,0x09,0x09;/闹钟中用的全局变量uchar th1,tl1; uchar temp_data2=0x00,0x00; / 读出温度暂放 bit flag; /18b20存在标志位 /*11微秒延时函数*/delay(uint t)for(;t0;t-);/*18b20复位函数*/ow_reset(void)uchar i; dq=1;_nop_();_nop_();dq=0;delay(50);/550usdq=1; delay(6);/66usfor(i=0;i0;i-)/dq=1;_nop_();_nop_();dq=0;_nop_();_nop_();_nop_();_nop_();_nop_();/5usdq=val&0x01;/最低位移出delay(6);/66usval=val/2; /右移一位dq=1;delay(1);/*18b20读1个字节函数*/从总线上读取一个字节uchar read_byte(void) uchar i,value=0;for(i=8;i0;i-)dq=1;_nop_();_nop_();value=1;dq=0;_nop_();_nop_();_nop_();_nop_();/4usdq=1;_nop_();_nop_();_nop_();_nop_();/4usif(dq)value|=0x80;delay(6);/66usdq=1;return(value);/*读出温度函数*/read_temp() ow_reset();/总线复位 if(!flag)/判断ds1820是否存在 若ds18b20不存在则返回?return;write_byte(0xcc);write_byte(0x44);/发转换命令 delay(70); write_byte(0xcc);write_byte(0xbe);/发读命令 temp_data0=read_byte();/温度低8位temp_data1=read_byte();/温度高8位ow_reset();write_byte(0xcc);write_byte(0x44);/发转换命令/*温度数据处理函数*/work_temp()uchar n=0,m;if(temp_data1127)/负温度求补码temp_data1=(256-temp_data1);temp_data0=(256-temp_data0);n=1;time213=ditabtemp_data0&0x0f+0;time212=.;m=(temp_data0&0xf0)4)|(temp_data1&0x0f)4);if(n)m-=16;time29=m/100+0;time211=m%100;time210=time211/10+0;time211=time211%10+0;if(time29=0)/最高位为0时都不显示time29=0x20;if(n)/负温度时最高位显示-time29=-;if(time210=0)if(n)time210=-;time29=0x20;elsetime210=0x20;if(time211=0&time213=0)time211=time212=0x20;delay1ms(uchar time) /延时1ms uchar i,j; for(i=0;itime;i+)for(j=0;j250;j+);enable()/lcd驱动部分rs=0;rw=0;e=0;delay1ms(3);e=1;write(uchar i)p0=i;rs=1;rw=0;e=0;delay1ms(2);e=1;write1(uchar data *address,m)uchar i,j; for(i=0;im;i+,address+)j=*address;write(j);/lcd显示lcdshow()p0=0xc; /显示器开、光标关enable();p0=0x80;/写入显示起始地址enable();write1(time1,16);p0=0xc1;/写入显示起始地址enable();write1(time2,15);zijianzi()/自建字uchar i;p0=0x40;enable();for(i=0;i32;i+)write(tabi);delay1ms(2);writetime(uchar address)/ds1302读写子程序uchar i;clk=0;_nop_();rst=1;_nop_();for(i=0;i=1;clk=0;uchar read() uchar i,j=0;for(i=0;i=1;_nop_();clk=0;_nop_();if(dat)j|=0x80;_nop_();clk=1;return(j); timestart()/部分显示数据初始化time11=time113=time28=time29=time210=0x20,time214=0;time16=1,time19=2,time112=3,time12=2,time13=0;time114=w,time22=time25=:;write(0xc1);alarm0=read();rst=0;write(0xc3);alarm1=read();rst=0;write(0xc5);time10=read();rst=0;readtime()/读取时间uchar i,m,n; writetime(0x8d); /读取年份m=read();rst=0;time14=m/16+0x30;time15=m%16+0x30;writetime(0x8b);/读取星期 m=read();rst=0;time115=m+0x30; for(i=7,n=0x89;i11;i+=3,n-=2) /读取月份和日期write(n);m=read();rst=0;time1i=m/16+0x30;time1i+1=m%16+0x30;for(m=0,i=0,n=0x85;i7;i+=3,n-=2,m+)/读取时,分,秒writetime(n);timem=read();rst=0;time2i=timem/16+0x30;time2i+1=timem%16+0x30;time0() interrupt 1 using 1i-;if(i=0)if(j!=0)j-;i=20; th0=time/256,tl0=time%256;intime1() interrupt 3/闹钟部分th1=th1,tl1=tl1;p3_2=!p3_2;showalarm()uchar i,j,a,b,n;et1=1;for(j=0;j=4;if(a=0)tr1=0;goto d1; a=(-a)1)/2; th1=th1=table1a/256,tl1=tl1=table1a%256;tr1=1;d1: dob-;for(n=0;n2)i+;j=(time110&0xf)*10+(time111&0xf);i+=j;i%=7;if(i=0)i=7;return(i);settime()/设置时间uchar i=0x85,year,month,day,n;time26=time27=0x30,time114=time115=0x20;lcdshow();while(1)p0=0xe;/显示器开、光标开enable();p0=i;/定光标enable();p2=0xf7;if(p2!=0xf7)delay1ms(100);/延时0.1s去抖动if(p2!=0xf7)j=7;if(p2=0x77)i+=3;if(i=0x8e)i=0xc2;else if(i0xc5) i=0x85; else if(p2=0xb7)year=(time14&0xf)*10+(time15&0xf);month=(time17&0xf)*10+(time18&0xf);day=(time110&0xf)*10+(time111&0xf);if(i=0x85)year+;if(year99)year=0;if(year%4)!=0&month=2&day=29)day=28;else if(i=0x88)month+;if(month12)month=1;if(daydaymonth-1)day=daymonth-1;if(month=2&(year%4)=0)day=29;else if(i=0x8b)day+;if(daydaymonth-1)if(month=2&(year%4)=0)if(day29)day=1;if(month!=2)day=1;else if(i=0xc2)n=(time20&0xf)*10+(time21&0xf);n+;if(n23)n=0;time20=n/10+0x30;time21=n%10+0x30;elsen=(time23&0xf)*10+(time24&0xf);n+;if(n59)n=0;time23=n/10+0x30;time24=n%10+0x30;time14=year/10+0x30;time15=year%10+0x30;time17=month/10+0x30;time18=month%10+0x30;time110=day/10+0x30;time111=day%10+0x30;lcdshow();else if(p2=0xd7)write(0x8c);write(time14&0xf)*16+(time15&0xf);rst=0; write(0x8a); write(setweek();rst=1;for(i=7,n=0x88;i11;i+=3,n-=2)write(n);write(time1i&0xf)*16+(time1i+1&0xf);rst=0;for(i=0;i7;i+=3,n-=2)write(n);write(time2i&0xf)*16+(time2i+1&0xf);rst=0;tr0=0;time114=w;return;elsetr0=0;time114=w;return;if(j=0)tr0=0;time114=w;return;setalarm()/设置闹钟uchar i,n;for(i=1;i0xc5)i=0xc2;else if(p2=0xb7)if(i=0xc2)n=(time20&0xf)*10+(time21&0xf);n+;if(n23)n=0;time20=n/10+0x30;time21=n%10+0x30;elsen=(time23&0xf)*10+(time24&0xf);n+;if(n59)n=0;time23=n/10+0x30;time24=n%10+0x30;lcdshow();else if(p2=0xd7)write(0xc0);write(time20&0xf)*16+(time21&0xf);rst=0;write(0xc2);write(time23&0xf)*16+(time24&0xf);rst=0;time10=flag;write(0xc4);write(time10);rst=0;tr0=0;timestart();return;elsetr0=0;timestart();return;if(j=0)tr0=0;timestart();return;main()ie=0x82;tmod=0x11;write(0x8e);/禁止写保护write(0);rst=0;p0=1;/清屏并光标复位enable();p0=0x38;/设置显示模式:8位2行5x7点阵enable();p0=6;/文字不动,光标自动右移enable();zijianzi();/自建字timestart();while(1)readtime();/读取时间read_temp();/读出18b20温度数据work_temp();/处理温度数据lcdshow();/显示时间if(time10!=0x20&time0=alarm0&time1=alarm1&time2=0)showalarm();p2=0xf7;if(p2&0xf0)!=0xf0)delay1ms(100);/延时0.1s去抖动if(p2&0xf0)!=0xf0)j=7;th0=time/256,tl0=time%256;tr0=1;if(p2=0x77)settime();else if(p2=0xb7)setalarm(); else if(p2=0xd7)tr0=0;if(time10=flag)time10=0x20;elsetime10=flag;write(0xc4);write(time10);rst=0;delay1ms(100);4.3 keil软件程序的调试图4-2keil软件程序调试图4.4 proteus仿真图5-2上电显示图5-3日期调节图5-4时间调节图5-5闹铃设置4.5 应用前景展望及改进多功能数字钟的研究具有重大意义,目前的多功能数字钟还无法完全满足人们生活的需要,但是我们可以根据应用场合的不同而给多功能数字钟添加不同的功能。例如:在需要安静的场合,在显示时钟的基础上,我们可以给它添加一个噪声测试功能;在工业应用中,有量产的产品需要计数,我们可以给它添加一个计数功能;在需要对温度有严格控制的环境下,如工业冶炼,在这种情况下,ds18b20就不行了,我们需要找个耐高温的温度传感器来对温度就行监控,因此在这种情况下,我们可以在时钟的基础上添加高温监控功能,让工业生产更加安全。多功能数字钟的应用方向还有很多,只有想不到的,没有做不到的。只要有心人愿意在这方面花时间,我相信多功能数字钟将会得到更广泛的应用,成为人们日常生活以及工业生产中不可或缺的一部分。参考文献1

温馨提示

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

评论

0/150

提交评论