基于STC89C52智能定时器设计毕业论文_第1页
基于STC89C52智能定时器设计毕业论文_第2页
基于STC89C52智能定时器设计毕业论文_第3页
基于STC89C52智能定时器设计毕业论文_第4页
基于STC89C52智能定时器设计毕业论文_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

智能定时器设计摘要:定时器的数字化给人们生产生活带来了极大的方便,同时定时器的集成化受广大消费的喜爱,因此得到了广泛的使用。定时器是采用数字电路实现对“时”、“分”、“秒”数字显示的计时装置。定时器的精度、稳定度远远超过老式定时器。在这次设计中,我们采用LED数码管显示时、分、秒,以24小时计时方式,根据数码管动态显示原理来进行显示,用12MHz的晶振产生振荡脉冲,定时器计数。在此次设计中,电路具有显示时间的其本功能,还可以实现对时间的调整。本次设计定时器主要通过单片机系统将传输的数据显示在数码显示管和LED灯上,从而实现的闹钟、整点报时、时间显示、校对时间等一系列的的操作。关键词:定时器;单片机;STC89C52目录摘要.11引言.11.定时器的背景.11.2定时器的意义.11.3定时器的应用.11.4主要设计任务.22整体设计方案.32.1定时器的功能及设计要求.32.2定时器的实现形式.32.3实现定时器计时的基本方法.43定时器硬件系统的设计.63.1定时器主控电路CPU的选择.63.2定时器主控电路最小应用系统.103.3键盘及其接口.113.3.1按键的去抖处理.113.3.2定时器按键电路.113.4蜂鸣器电路.123.5数码管显示电路.134定时器软件系统的设计.164.1主程序流程图.164.2中断流程图.174.3定时程序设计.195定时器的系统调试仿真与测试.205.1调试.205.2仿真.215.3测试.236总结.25致谢.26参考文献.27附件一:定时器电路图.28附件二:元器件清单.29附件三:源程序.310第1章引言1.1数字定时器的背景20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。1.2数字定时器的意义定时器是采用数字电路实现对时、分、秒。数字显示的计时装置,广泛用于个人家庭、车站,、码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式定时器,定时器的数字化给人们生产生活带来了极大的方便,而且大大地扩展了定时器原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以定时器数字化为基础的。因此,研究定时器及扩大其应用,有着非常现实的意义。出售10元2000个财富值,足够大学4年的使用。+威信(mk6689866)。感谢您对我们的信任.已帮助多名毕业生完成毕业设计,顺利通过毕业.在本工作室定做,请认真阅读以下注意事项:11.承接毕业设计/论文类型专科/本科/工硕1.1PLC毕业设计,单片机毕业设计1.2.电子|通信|电力|电气|机电|自动化类1.3.图像处理类/地理信息GIS类2.认真如实填写论文定做报表。因为我们是根据你的定做需求收费,并按此需求,作为毕业设计制作完成时验收的依据.3.填写完成后。或发邮箱请发至邮箱:我们将在一日之内回复你,并与你联系.1.3数字定时器的应用数字定时器已成为人们日常生活中的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使定时器具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。1.4主要设计任务本次设计需要完成的设计不仅仅是完成毕业设计而已,更主要的是通过本次本次的设计更好的来回顾三年所学的知识,老师们的辛勤奉献自己究竟学到了什么,同时也是自己对自己即将结束的大学生活画个句号,为即将来到的工作作出了是实际性的准备,不仅仅是以往那种只学习书面知识而已,更多的是锻炼自己实际操作的能力,也算是在进入工作前给自己的一个启发。然而就本次设计的定时器而言要完成的任务有:(1)完成硬件电路的设计,包括数字钟最小系统设计、按键电路、电源电路、蜂鸣器电路、二极管指示灯和LED数码管显示电路。(2)完成软件程序的编写和编译,使系统具备如下功能:时间显示、校对时间、闹铃、报时等功能。(3)完成电路的模拟仿真。(4)完成实物的焊接及测试。2第2章整体设计方案2.1定时器的功能及设计要求(1)通过单片机内定时器控制走时,准确持续走时,调时不影响走时。(2)在六个数码管上显示时、分、秒及两个小数点。(3)含有闹钟功能,可以选择闹钟开关,可以设定闹铃时间。(4)到达闹钟时刻蜂鸣器警报,可以关掉警报。(5)当时间到整点时,蜂鸣器会短响一声,可以关掉报时。2.2定时器的实现形式利用单片机的智能性,可方便的实现具有智能定时器的设计。而且,微处理系统具有时钟振荡系统,利用系统时钟并借助微处理器的定时/计数器功能可以实现数字定时器的功能。定时器电路主要由单片机(STC89C52)主控电路、电源电路、按键控制电路、数码管显示电路、蜂鸣器电路、以及二极管指示灯等几个部分组成,它主要实现时钟的显示,以及对时、分、秒进行调整,即实现调时的功能,其数字定时器系统整体结构如图2-1所示。图2-1数字定时器的系统框架3(1)显示方案方案一:静态显示就是CPU将要显示的字或字段码送到输出口,显示器就可以显示出所要显示的字符,如果CPU不去改写它,它将一直保持下去;静态显示硬件开销大,电路复杂,信息刷新速度慢。方案二:动态显示则是一位一位的轮流点亮显示器的各个位(扫描)。对于显示器的每一位而言,每隔一段时间点亮一次;动态显示耗能较小,但编写程序较复杂。动态显示硬件连接简单,信息刷新速度快。由于本次设计是对时间进行显示,所以在此选择的是方案二,采用动态显示。(2)键盘方案方案一:独立式键盘。独立式键盘的各个按键相互独立,每个按键独立的与一根数据输入线(单片机并行接口或其他芯片的并行接口)连接。独立式键盘配置灵活,软件结构简单。但每个按键必须占用一根接口线,在按键数量不多时,接口占用多。所以,独立式按键常用于按键数量不多的场合。方案二:矩阵式键盘。矩阵式键盘采用的是行列式结构,按键设置在行列的交点上。(当数量接口为8时,可以将4根接口定义为行线,另4根定义为列线,形成4*4键盘,可以配置16个按键。)由于本设计只用了6个按键,不需要采用矩阵式键盘,所以选择第一种方案,采用独立式键盘。(3)计时方案采用软件控制:利用单片机内部的定时/计数器进行定时,配合软件定时实现时、分、秒的计时,该方案能够使设计者在设计过程中容易实现,且节省硬件成本,因此本系统将采用软件方法实现计时。2.3实现定时器计时的基本方法用STC89C52单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1。STC89C52单片机的内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式。只要通过设置特殊功能寄存器TMOD,即可完成。定时/计数器何时工作也是通过TCON特殊功能寄存器来设置的。在此设计中,选择16位定时工作方式。对于T0来说,系统时钟为12MHz,最大4定时也只有65536us,即65.536ms,无法达到我们所需要的1秒的定时,因此,必须通过软件来处理这个问题,假设取T0的最大定时为50ms,即要定时1秒需要经过20次的50ms的定时。对于这20次计数,就可以采用软件的方法来统计了。设定TMOD00000001B,即TMOD01H,设置定时/计数器0工作在方式1。下面我们要给T0定时/计数器的TH0,TL0装入预置初值,通过下面的公式可以计算出:TH0(21650000)/256TL0(21650000)MOD取摸256这样,当定时/计数器0计满50ms时,产生一个中断,我们可以在中断服务程序中,对中断次数加以统计,以实现数字钟的逻辑功能。5第3章定时器硬件系统的设计3.1定时器主控电路CPU的选择主控电路CPU是系统的核心单元,在执行程序中其关键作用,它的优劣直接关系到系统的性能。本次设计主要以STC89C52单片机为研究核心,分析其内部结构,硬件资源分配等,下面是对STC89C52单片机的介绍:STC89C52RC单片机是新一代高速、低功耗、超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。主要特性如下:(1)增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051(2)工作电压:5.5V3.3V(5V单片机)/3.8V2.0V(3V单片机)(3)工作频率范围:040MHz,相当于普通8051的080MHz,实际工作频率可达48MHz(4)用户应用程序空间为8K字节(5)片上集成512字节RAM(6)通用I/O口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。(7)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片(8)具有EEPROM功能(9)具有看门狗功能(10)共3个16位定时器/计数器。即定时器T0、T1、T2(11)外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒(12)通用异步串行口(UART),还可用定时器软件实现多个UART(13)工作温度范围:-40+85(工业级)/075(商业级)(14)PDIP封装STC89C52RC单片机的工作模式:6掉电模式:典型功耗#defineuintunsignedint#defineucharunsignedchar/*定义数码管*/#defineSMG_XSP0/数码管数据显示#defineSMG_KZP2/数码管控制显示#defineSpeakP3_7/定义蜂鸣器接口#defineLED1P3_4/定义LED1接口(走时提示指示灯)#defineLED2P3_5/定义LED2接口(闹钟指示灯亮)#defineLED3P3_6/定义LED3接口(整点报时指示灯)#defineKey1P1_0/时间调整允许按键#defineKey2P1_1/时、分加按键#defineKey3P1_2/时、分减按键#defineKey4P3_1/闹钟时间调整允许按键#defineKey5P3_2/开/关闹钟按键#defineKey6P3_3/开/关整点报时按键ucharcodeData=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF;/没有小数点/定义数组数码管0123456789-ucharcodeData1=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x3F;/带小数点/定义数组数码管0123456789-ucharhour=12,min=0,sec=0;/系统上电默认时间是12.00.00ucharhour1=6,min1=0,sec1=0;/系统上电默认闹铃是06.00.00charnum=0;/时间基数numuintt=3;/数码管动态扫描延时时间基数源数据3ucharflag=0;/显示标志位(0:走时正常1:调整时钟2:调整分钟)uinti=0;j=0;/循环变量i,jbitnao_z=0;/闹钟标志位(0:关闭闹钟1:开启闹钟)ucharflag_nao_z=0;/闹钟显示模式(0:显示正常走时时间1:显示闹钟时间2:调整闹钟时钟3:调整闹钟分钟)bitbao_shi=0;/整点报时标志位(0:不允许整点报时1:允许整点报时)31voiddelay(uinttime)/扫描延时函数uintx,y;for(x=time;x0;x-)for(y=110;y0;y-);voiddelay_fmq(uinttime)/延时函数(蜂鸣器)uintx,y;for(x=time;x0;x-)for(y=5;y0;y-);voidfmq()/蜂鸣器函数(按键提示)for(i=0;i100;i+)Speak=0;delay_fmq(10);Speak=1;voidTime0_init()/定时器0初始化函数TMOD=0x01;/定时器0为方式1TL0=(65536-50000)%256;TH0=(65536-50000)/256;/12M晶振定时时间50msET0=1;/开定时器0中断EA=1;/开总中断TR0=0;/先不启动定时器0voidTime0()interrupt1/定时器0中断服务函数TH0=(65536-50000)/256;/重新载装初值,设置50ms中断一次TL0=(65536-50000)%256;num+;/时间基数加1while(num=20)/1秒时间到num=0;/num清0sec+;/秒加132if(flag_nao_z!=0)/闹钟显示模式不等于0(不显示正常走时时间,即显示闹钟时间)LED1=LED1;/指示灯按照2Hz频率闪烁(在调整闹钟时间时,提示正在走时)else/否则闹钟显示模式等于0(显示正常走时时间)LED1=1;/在正常走时的时候,指示灯不亮if(nao_z=1)/当闹钟标示位为1:开启闹钟LED2=0;/闹钟指示灯亮if(hour=hour1&min=min1)/当时,分和闹钟时,分相同Speak=Speak;/蜂鸣器接口取反(2Hz频率响)else/否则时,分和闹钟时,分不相同Speak=1;/关闭蜂鸣器else/否则关闭闹钟LED2=1;/闹钟指示灯不亮while(sec=60)/1分时间到sec=0;/秒清0min+;/分加1while(min=60)/1小时时间到min=0;/分清0hour+;/时加1while(hour=24)/24小时到hour=0;/时清033voiddisp(hour,min,sec)/数码管正常显示模式SMG_XS=Datahour/10;/小时十位SMG_KZ=0xdf;/控制第1个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Data1hour%10;/小时个位SMG_KZ=0xef;/控制第2个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datamin/10;/分十位SMG_KZ=0xf7;/控制第3个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Data1min%10;/分个位SMG_KZ=0xfb;/控制第4个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datasec/10;/秒十位SMG_KZ=0xfd;/控制第5个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datasec%10;/秒个位SMG_KZ=0xfe;/控制第6个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;voiddisp1(hour,min,sec)/数码管模式1:调小时模式(时钟在数码管上闪烁)j+;/j加1while(j=40)j=0;/j为40时,j清0if(j20)/j小于20时,分,秒都显示SMG_XS=Datahour/10;/小时十位SMG_KZ=0xdf;/控制第1个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Data1hour%10;/小时个位34SMG_KZ=0xef;/控制第2个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datamin/10;/分十位SMG_KZ=0xf7;/控制第3个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Data1min%10;/分个位SMG_KZ=0xfb;/控制第4个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datasec/10;/秒十位SMG_KZ=0xfd;/控制第5个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datasec%10;/秒个位SMG_KZ=0xfe;/控制第6个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;else/否则20j40时不显示;分,秒都显示SMG_XS=Datahour/10;/小时十位SMG_KZ=0xff;/控制第1个数码管不亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Data1hour%10;/小时个位SMG_KZ=0xff;/控制第2个数码管不亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datamin/10;/分十位SMG_KZ=0xf7;/控制第3个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Data1min%10;/分个位SMG_KZ=0xfb;/控制第4个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datasec/10;/秒十位SMG_KZ=0xfd;/控制第5个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;35SMG_XS=Datasec%10;/秒个位SMG_KZ=0xfe;/控制第6个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;voiddisp2(hour,min,sec)/数码管模式2:调分钟模式(分钟在数码管上闪烁)j+;/j加1while(j=40)j=0;/j为40时,j清0if(j20)/j小于20时,分,秒都显示SMG_XS=Datahour/10;/小时十位SMG_KZ=0xdf;/控制第1个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Data1hour%10;/小时个位SMG_KZ=0xef;/控制第2个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datamin/10;/分十位SMG_KZ=0xf7;/控制第3个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Data1min%10;/分个位SMG_KZ=0xfb;/控制第4个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datasec/10;/秒十位SMG_KZ=0xfd;/控制第5个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datasec%10;/秒个位SMG_KZ=0xfe;/控制第6个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;else/否则20j40时显示,分不显示,秒显示SMG_XS=Datahour/10;/小时十位SMG_KZ=0xdf;/控制第1个数码管亮36delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Data1hour%10;/小时个位SMG_KZ=0xef;/控制第2个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datamin/10;/分十位SMG_KZ=0xff;/控制第3个数码管不亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Data1min%10;/分个位SMG_KZ=0xff;/控制第4个数码管不亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datasec/10;/秒十位SMG_KZ=0xfd;/控制第5个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datasec%10;/秒个位SMG_KZ=0xfe;/控制第6个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;voiddisp3(hour1,min1,sec1)/数码管模式3(显示闹钟时间)SMG_XS=Datahour1/10;/闹钟时十位SMG_KZ=0xdf;/控制第1个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Data1hour1%10;/闹钟时个位SMG_KZ=0xef;/控制第2个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datamin1/10;/闹钟分十位SMG_KZ=0xf7;/控制第3个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Data1min1%10;/闹钟分个位SMG_KZ=0xfb;/控制第4个数码管亮delay(t);/延时一下(消隐)37SMG_KZ=0xff;SMG_XS=Datasec1/10;/闹钟秒十位SMG_KZ=0xfd;/控制第5个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datasec1%10;/闹钟秒个位SMG_KZ=0xfe;/控制第6个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;voiddisp4(hour1,min1,sec1)/数码管模式4:调整闹钟时钟(闹钟时钟在数码管上闪烁)j+;/j加1while(j=40)j=0;/j为40时,j清0if(j20)/j小于20闹钟时,分,秒都显示SMG_XS=Datahour1/10;/闹钟时十位SMG_KZ=0xdf;/控制第1个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Data1hour1%10;/闹钟时个位SMG_KZ=0xef;/控制第2个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datamin1/10;/闹钟分十位SMG_KZ=0xf7;/控制第3个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Data1min1%10;/闹钟分个位SMG_KZ=0xfb;/控制第4个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datasec1/10;/闹钟秒十位SMG_KZ=0xfd;/控制第5个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datasec1%10;/闹钟秒个位SMG_KZ=0xfe;/控制第6个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;38else/否则20j40闹钟时不显示,分显示,秒显示SMG_XS=Datahour1/10;/闹钟时十位SMG_KZ=0xff;/控制第1个数码管不亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Data1hour1%10;/闹钟时个位SMG_KZ=0xff;/控制第2个数码管不亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datamin1/10;/闹钟分十位SMG_KZ=0xf7;/控制第3个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Data1min1%10;/闹钟分个位SMG_KZ=0xfb;/控制第4个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datasec1/10;/闹钟秒十位SMG_KZ=0xfd;/控制第5个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datasec1%10;/闹钟秒个位SMG_KZ=0xfe;/控制第6个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;voiddisp5(hour1,min1,sec1)/数码管模式5:调整闹钟分钟(闹钟分钟在数码管上闪烁)j+;/j加1while(j=40)j=0;/j为40时,j清0if(j20)/j小于20闹钟时,分,秒都显示SMG_XS=Datahour1/10;/闹钟时十位SMG_KZ=0xdf;/控制第1个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Data1hour1%10;/闹钟时个位39SMG_KZ=0xef;/控制第2个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datamin1/10;/闹钟分十位SMG_KZ=0xf7;/控制第3个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Data1min1%10;/闹钟分个位SMG_KZ=0xfb;/控制第4个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datasec1/10;/闹钟秒十位SMG_KZ=0xfd;/控制第5个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datasec1%10;/闹钟秒个位SMG_KZ=0xfe;/控制第6个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;else/否则20j40闹钟时显示,分不显示,秒显示SMG_XS=Datahour1/10;/闹钟时十位SMG_KZ=0xdf;/控制第1个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Data1hour1%10;/闹钟时个位SMG_KZ=0xef;/控制第2个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datamin1/10;/闹钟分十位SMG_KZ=0xff;/控制第3个数码管不亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Data1min1%10;/闹钟分个位SMG_KZ=0xff;/控制第4个数码管不亮delay(t);/延时一下(消隐)SMG_KZ=0xff;SMG_XS=Datasec1/10;/闹钟秒十位SMG_KZ=0xfd;/控制第5个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;40SMG_XS=Datasec1%10;/闹钟秒个位SMG_KZ=0xfe;/控制第6个数码管亮delay(t);/延时一下(消隐)SMG_KZ=0xff;voidkey_cl()/按键处理(调整时间)if(Key1=0)/当时间调整允许按键按下delay(5);/延时去抖if(Key1=0)/再判断时间调整允许按键是否按下TR0=0;/关闭定时器0num=0;/时间基数清0sec=0;/秒清零TL0=(65536-50000)%256;TH0=(65536-50000)/256;/12M晶振定时时间50msflag+;/显示标志位加1(0:走时正常1:调整时钟2:调整分钟)if(flag=3)/当flag为3flag=0;/flag清0SMG_KZ=0xff;/关闭数码管显示fmq();/按键提示音while(Key1=0);/等待按键松开if(flag=1)/当flag为1(调整时钟)if(Key2=0)/当时、分加按键按下delay(5);/延时去抖if(Key2=0)/再判断时、分加按键是否按下hour+;/时加1while(hour=24)hour=0;/当hour为24,hour清0SMG_KZ=0xff;/关闭数码管显示fmq();/按键提示音41while(Key2=0);/等待按键松开if(Key3=0)/当时、分减按键按下delay(5);/延时去抖if(Key3=0)/再判断时、分减按键是否按下hour-;/时减1while(hour=-1)hour=23;/当hour为-1,hour设置为23SMG_KZ=0xff;/关闭数码管显示fmq();/按键提示音while(Key3=0);/等待按键松开if(flag=2)/当flag为2(调整分钟)if(Key2=0)/当时、分加按键按下delay(5);/延时去抖if(Key2=0)/再判断时、分加按键是否按下min+;/分加1while(min=60)min=0;/当min为60,min清0SMG_KZ=0xff;/关闭数码管显示fmq();/按键提示音while(Key2=0);/等待按键松开if(Key3=0)/当时、分减按键按下delay(5);/延时去抖if(Key3=0)/再判断时、分减按键是否按下min-;/分减1while(min=-1)min=59;/当min为-1,min设置为59SMG_KZ=0xff;/关闭数码管显示42fmq();/按键提示音while(Key3=0);/等待按键松开voidkey_cl1()/按键处理1(闹钟设置)if(Key4=0)/当闹钟时间调整允许按键按下delay(5);/延时去抖if(Key4=0)/再判断闹钟时间调整允许按键是否按下flag_nao_z+;/闹钟显示模式加1(0:显示正常走时时间1:显示闹钟时间2:调整闹钟时钟3:调整闹钟分钟)if(flag_nao_z=4)flag_nao_z=0;/当flag_nao_z为4,flag_nao_z清0SMG_KZ=0xff;/关闭数码管显示fmq();/按键提示音while(Key4=0);/等待按键松开if(flag_nao_z=2)/当进入调整闹钟时钟if(Key2=0)/当时、分加按键按下delay(5);/延时去抖if(Key2=0)/再判断时、分加按键是否按下hour1+;/闹钟时钟加1while(hour1=24)hour1=0;/当闹钟时钟为24,闹钟时钟清0SMG_KZ=0xff;/关闭数码管显示fmq();/按键提示音while(Key2=0);/等待按键松开if(Key3=0)/当时、分减按键按下delay(5);/延时去抖if(Key3=0)/再判断时、分减按键是否按下hour1-;/闹钟时钟减143while(hour1=-1)hour1=23;/当闹钟时钟为-1,闹钟时钟设置为23SMG_KZ=0xff;/关闭数码管显示fmq();/按键提示音while(Key3=0);/等待按键松开if(flag_nao_z=3)/当进入调整闹钟分钟if(Key2=0)/当时、分加按键按下delay(5);/延时去抖if(Key2=0)/再判断时、分加按键是否按下min1+;/闹钟分钟加1while(min1=60)min1=0;/当闹钟分钟为60闹钟分钟清0SMG_KZ=0xff;/关闭数码管显示fmq();/按键提示音while(Key2=0);/等待按键松开if(Key3=0)/当时、分减按键按下delay(5);/延时去抖if(Key3=0)/再判断时、分减按键是否按下min1-;/闹钟分钟减1while(min1=-1)min1=59;/当闹钟分钟为-1闹钟分设置为59SMG_KZ=0xff;/关闭数码管显示fmq();/按键提示音while(Key3=0);/等待按键松开voidkey_cl2()/按键处理2(闹钟,整点报时按键处理)if(Key5=0)/当闹钟按键按下44delay(5);/延时去抖if(Key5=0)/再判断闹钟按键是否按下nao_z=nao_z;/闹钟标志位取反(0:关闭闹钟1:开启闹钟)SMG_KZ=0xff;/关闭数码管显示fmq();/按键提示音while(Key5=0);/等待按键

温馨提示

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

评论

0/150

提交评论