版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
...wd......wd......wd...目录TOC\o"1-3"\h\u17144前言1194141.设计任务和要求1112261.1设计要求130521.2设计思路1234342.总体设计方案232322.1方案论证228752.1.1核心控制模块2176022.1.2显示模块2305552.1.3计时模块211422.1.4按键模块2264032.2系统框图和原理分析3304853.硬件设计4239373.1单片机最小系统4278763.2按键控制电路598423.3时钟显示电路6295863.4电源模块6194624.软件设计7152644.1键盘扫描程序流程图763054.2数码管显示程序流程图8312674.3中断服务程序流程图9143965.关键代码分析11126745.1闹钟程序11227045.2显示程序11248525.3中断服务函数12269606.软件调试12232497.设计总结1423647参考文献1514197附录一:电路图和PCB图158482附录二:源程序1625792附录三:局部实物运行图25前言时钟,自从它创造的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断开展,人们对时间计量的精度要求越来越高,应用越来越广。怎样让时钟更好的为人民服务,怎样让我们的老朋友焕发青春呢这就要求人们不断设计出新型时钟。现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时,译码代替机械式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进展时和分的校对,片选的灵活性好。时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的根基。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。本文主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机AT89S51芯片和LED数码管为核心,辅以必要的电路,构成了一个单片机电子时钟。电子时钟作为单片机根基学习的一个重要的典型,是很多初学的学习单片机的很好的例子,是对单片机的定时器的一个重要的应用。可以说,学习单片机的两个重点就是中断和定时器,学会了数字时钟的编程就是对单片机学习的一个很好的综合应用。1.设计任务和要求1.1设计要求应用知识:I/O口应用、数码显示、定时/计数器、中断、按键。根本要求:该时钟系统具有时钟功能,能准确显示时、分、秒。系统还应具有校正功能,如准点报时,能够修改当前的时间。扩展局部:具备设定闹钟和定时闹钟响功能。1.2设计思路通过软件程序的编程,硬件电路的调试,实现了简单时钟系统的设定,使得该系统具有正常走时,能够正确的显示时、分、秒;能够进展调时,修改当前的时间,并且能够设定闹钟,使闹钟能够定时响。首先是时间的调试:假设要进展正常的时间调试,需要有进入时间的调时试状态按键以及调试是加或者是减的按键,即每个状态要3个按键,共有时、分、秒三个状态,,可通过同一个按键来控制定时器的走与停,以及通过按键的次数来控制所进入的调试状态是时、分还是秒。当调试进入某一状态时,需要分别通过两个按键来控制时间的加与减,而此时的加与减的按键相当于是局部变量,可以在三个状态中分别使用。这样一共就只需要3个按键,大大节省了硬件并且简化了软件的编程。其次是闹钟设定:基于时间调试的设置思路,同样将进入闹钟状态以及闹钟设定的按键分开,考虑到此时闹钟设置时,数码管的显示问题以及定时器的走时问题,故将进入闹钟的设定状态和时设定、分设定的按键分开,key4为进入闹钟状态按键,key4键切换时分秒和闹铃时间的显示。2.总体设计方案2.1方案论证2.1.1核心控制模块方案1:采用FPGA作为核心控制模块。由于FPGA具有强大的资源,使用方便灵活,易于进展功能扩展,特别是结合了EDA,可以到达很高的效率。此方案逻辑虽然简单一点,但是一块FPGA的价格很高,对于做数字钟来说有一点浪费,而且FPGA比拟难掌握,本设计中不作过多研究,不采用此方案。方案2:采用AT89C51作为核心控制模块。此方案中AT89C51单片机的入门学习相对交容易,易于理解,外围电路比拟简单,本钱比拟低,此系统控制灵活能很好地满足本课题的根本要求和扩展要求。因此选用该方案。2.1.2显示模块方案1:采用LCD1602液晶显示屏。液晶极其省电,但是使用有温度范围限制,且因是反光式的,在外界光线很明亮的情况下很容易看不清楚。液晶是分子偏转引起的暗影效果,显示不是很清晰。方案2:采用LED数码管显示。数码管在低电压小电流的驱动下就能够发光,发光响应时间短,高频性好,单色性好,亮度高,显示相对而言比拟清晰。而且体积小,重量轻,抗冲击性能好,寿命长,本钱低。因此选用该方案。2.1.3计时模块方案1:采用实时时钟芯片。现在市场上有很多实时时钟集成电路,如DS1287、DS12887、DS1302等。这些实时时钟芯片具备年、月、日、时、分、秒计时功能和多点定时功能,计时数据的更新每秒自动进展一次,不需要程序干预。因此,在工业实时测控系统中多采用这一类专用芯片来实现实时时钟功能。方案2:使用单片机内部的可编程定时器。利用单片机内部的定时计数器进展中端定时,配合软件延时实现时、分、秒的计时。该方案节省硬件本钱,但程序设计较为复杂。因此选用该方案。2.1.4按键模块方案1:采用矩阵按键,矩阵按键需要通过扫描控制和译码,设计时需要有数值移位存放器对已有数值进展存储和调用。软件程序设计比拟繁琐,硬件连接复杂。方案2:采用独立按键。单片机仿真板上有专用独立按键,连接方便,使用简单。且易于软件编程,适合本系统的设计。因此选用该方案。2.2系统框图和原理分析本电子钟的所有的软件、参数均存放咋AT98C52的FlashROM和内部RAM中减少了芯片的使用数量简化了整体电路也降低了整机的工作电流。由于AT98C52芯片内部的FlashROM有8KB,RAM有256个字节,故软件下载编译时有足够的存储空间。键盘采用动态扫描方式。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据,同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。AT89C52AT89C52时钟电路复位电路电源驱动电路数码管显示按键控制图1电子时钟系统框图3.硬件设计3.1单片机最小系统单片机最小化模块由时钟电路、复位电路和AT89S52单片机构成。时钟电路由振荡电路和分频电路组成。其中振荡电路由高增益反相器以及并联外接的石英晶体和电容构成产生振荡脉冲。而分频电路则用于把振荡脉冲分频,已得到所需的时钟信号。振荡电路由单片机芯片的XTAL1端输入,XTAL2端输出。通过这两个引脚并接一个石英晶体振荡器和两个电容〔电容一般取22pF)。而AT89S52中自带有分频电路所以不需要外接电路对脉冲信号进展分频。复位是单片机的硬件初始化操作,经复位操作后,单片机系统才能开场正常工作。复位电路用于产生复位信号,通过RET引脚送入单片机,进展复位操作。图2单片机最小系统3.2按键控制电路输入模块由六个按键构成,一个电源开关键,一个复位键,。键盘通过程序控制来完成电子钟的启、停及时间调整。电源开关键控制电源的闭合和断开。复位键控制单片机系统的复位操作。〔1〕key1用于设置时钟和闹钟时间。时钟:key1按下第1次,时间停顿,可调节秒;key1按下第2次,可调节分;key1按下第3次,可调节时;key1按下第4次,退出时间设置,时间以设置时间为起始。闹钟:当key4按下后,key1按下第1次,可调节秒;key1按下第2次,可调节分;key1按下第3次,可调节时;〔2〕A.key2用于调节时间的加;B.key2还可用于查看设置的闹钟。key2按下第1次,从时钟界面切换到闹钟界面,查看第1组闹钟;key2按下第2次,查看第2组闹钟;key2按下第3次,查看第3组闹钟;key2按下第4次,退出查看闹钟界面,时间回到时钟界面。〔3〕key3用于调节时间的减。〔4〕key4用于时钟界面和闹钟界面的切换。key4按下,进入闹钟设置界面,当key4再次按下时回到时钟界面。图3按键3.3时钟显示电路时钟显示电路为2个四位一体的LED所组成的八位数码管显示器。数码管都为共阳极接法,由74LS2573芯片进展驱动和阻值都为510Ω的八个电阻进展限流,提高显示亮度,数码管显示电路采用动态显示方式。图4数码管显示电路3.4电源模块直流稳压电源一般由电源变压器、整流滤波电路及稳压电路组成。直流稳压电源设计的主要内容是根据性能指标,选择适宜的电源变压器、集成稳压器、整流二极管及滤波电容。本设计中所需要的电源有PC机的USB口直接供电。图5电源电路4.软件设计4.1键盘扫描程序流程图时钟开场计时后,如果有按键按下,则进展按键消抖,否则完毕程序。再一次进展判断,如果没有按键按下就完毕本次循环,如果确实有按键按下,保存按键的值,然后判断按键是否松开,如果按键松开,完毕本次程序循环。如果按键没有松开,系统调用显示程序,进展按键操作。开始开始是否有按键按下调用显示程序消抖是否有按键按下保存键值按键是否已释放结束调用显示程序NNYYNYNYNNYY图6键盘扫描程序流程图4.2数码管显示程序流程图程序开场运行进入中断时采取保护现场,由程序选择存放器组存放相关数据,通过查表的方法获得段码和位码,由延时程序进展延时,又通过延时,改变段码和位码,实现数码管动态显示时间,如果数码管显示到达最高位,则回到选择数据,否则恢复现场。完毕循环。开场开场保护现场选择存放器组查表取段控码送段/位码延时改变段/位控码恢复现场完毕Y数码管最高位NNN图7数码管显示流程图4.3中断服务程序流程图进入中断服务函数首先保护现场,选择相关的存放器存放数据。把计数器重装初值进展计数,翻开中断。计数器是否计数到20,如果到20则秒加一,如果秒到60,把秒清零,分加一。否则退出循环,如果分到达60分,就把分清零,时加一。否则退出循环,如果小时到达24时,小时清零,否则退出循环。最后恢复现场,完毕中断。NNNN秒加一秒是否到60S分加一分是否满60min分清零时加一时是否到24H恢复现场开场时清零完毕保护现场秒清零重装计数器初值中断次数加一中断次数是否满20次NYYYYNNYYNNYYYY图8中断服务函数流程图5.关键代码分析5.1闹钟程序/****************闹钟判断函数*****************************/voidalarm_judgement(void){if(flag==1)//判断是否设置有闹钟{if(((miao==xx1)&&(fen==yy1)&&(shi==zz1))||((miao==xx2)&&(fen==yy2)&&(shi==zz2))||((miao==xx3)&&(fen==yy3)&&(shi==zz3))){//判断时间是否到达设置闹钟的时间,如果是就翻开蜂鸣器、继电器。一共可设三组闹钟。shu=1;buzzer(1);relay(1);//shu=1闹铃已响标志}}}5.2显示程序/****************显示函数*****************************/voiddisplay(ucharge,ucharshi){HC138Set(6);P0=0x00;HC138Set(0);//消隐delay(1);HC138Set(7);P0=duan[ge];HC138Set(0);//把数值入数码管HC138Set(6);P0=wei[cc];HC138Set(0);delay(1);cc++;HC138Set(7);P0=duan[shi];HC138Set(0);HC138Set(6);P0=wei[cc];HC138Set(0);delay(1);}/****************显示函数,数的别离和位的改变*****************************/voidshow(ucharmiao,ucharfen,ucharshi){display(miao%10,miao/10);cc++;display(fen%10,fen/10);cc++;display(shi%10,shi/10);if(cc==5){cc=0;}}5.3中断服务函数/****************中断函数*****************************/voidtimer0(void)interrupt1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;t0++;if(t0==20)//1s到,秒加1{t0=0;miao++;if((shu==1)&&(fen!=0))//如果闹铃响5s后关闭{aa++;if(aa==5){aa=0;shu=0;buzzer(0);relay(0);}}if(fen==0)//如果闹钟设置时间为整点,闹铃优先{if(shu==1){aa++;if(aa==5){aa=0;shu=0;buzzer(0);relay(0);6.软件调试通过keiluVision4编写源程序并进展编译,当出现零错误、零警告时程序根本没有问题〔如图9〕,然后软件调试出现图10界面进展调试,当程序全速运行时。可以看到P0口数据不断改变则程序正常图9keiluVision4编译界面图10程序调试界面7.设计总结在此次的课程设计中,我了解到了自己能力的缺乏之处,在PCB制板过程中,我体会到了自己所学的知识是远远的不够,需要学习的方面还有很多。在PCB制板过程中我遇到了一些问题,有的是我不会的或者是容易忽略的东西,导致结果不理想,通过资料的收集和文件的检索以及组员和同学的帮助,我找到了设计过程中出现的问题及问题的解决方法,从而完成了此次课程设计的任务。此次的课程设计使我学到了很多新的,课堂上无法学到的知识,同时也加深了课堂上学到的知识,并且增强了自己理论联系实际的操作能力。我取得了一些珍贵的经历,比方,理论必须和实际结合才能承购,知识必须通过应用才能实现其价值。我要感谢在这次制板设计过程中组员和同学给了我很大的帮助,让我完成了这次实验。参考文献[1]张毅刚.单片机原理及应用〔第二版〕[M].北京:高等教育出版社.2004[2]郭天祥.新概念51单片机C语言教程[M].北京:电子工业出版社.2007[3]杨欣.电子设计从零开场[J].北京.清华大学出版社.2005[4]谢自美.电子线路设计·实验·测试[M].武汉:华中理工大学出版社,1992[5]何立民.单片机应用系统设计[M].北京:北京航空航天大学出版社,1993[6]李光才.单片机课程设计实例指导[M].北京:北京航空航天大学出版社,2004附录一:电路图和PCB图图12系统硬件电路图13系统硬件PCB图附录二:源程序#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitkey1=P3^0;sbitkey2=P3^1;sbitkey3=P3^2;sbitkey4=P3^3;ucharxx1,yy1,zz1,xx2,yy2,zz2,xx3,yy3,zz3;//用于存放闹钟uchart0,aa,bb,cc,dd,shu,num,flag,temp,scan,table;charmiao,fen,shi,amiao,afen,ashi;ucharcodewei[]={0x80,0x40,0x10,0x08,0x02,0x01};ucharcodeduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//****************延时函数*****************************voiddelay(uintx){inta,b;for(a=x;a>0;a--)for(b=123;b>0;b--);}/****************38译码***********************************/voidHC138Set(ucharx){P2=(x<<5)|(P2&0x1f);}/****************继电器控制函数*****************************/voidrelay(bitStatus){if(Status)table|=0x10;elsetable&=~0x10;P0=table;HC138Set(5);HC138Set(0);}/****************蜂鸣器控制函数*****************************/voidbuzzer(bitStatus){if(Status)table|=0x40;elsetable&=~0x40;P0=table;HC138Set(5);HC138Set(0);}/****************分隔线函数*****************************/voidSeparator(void){HC138Set(7);P0=0xbf;HC138Set(0);HC138Set(6);P0=0x24;HC138Set(0);delay(1);}/****************闹钟判断函数*****************************/voidalarm_judgement(void){if(flag==1)//判断是否设置有闹钟{if(((miao==xx1)&&(fen==yy1)&&(shi==zz1))||((miao==xx2)&&(fen==yy2)&&(shi==zz2))||((miao==xx3)&&(fen==yy3)&&(shi==zz3))){//判断时间是否到达设置闹钟的时间,如果是就翻开蜂鸣器、继电器。一共可设三组闹钟。shu=1;buzzer(1);relay(1);//shu=1闹铃已响标志}}}/****************初始化函数*****************************/voidinit(void){t0=0,aa=0,bb=0,cc=0,dd=0,num=0,shu=0,flag=0,table=0,temp=0;miao=55,fen=59,shi=23;//时钟的初始化时间amiao=0,afen=0,ashi=0;buzzer(0);relay(0);TMOD=0x01;//定时器的初始化设置TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;TR0=1;EA=1;}/****************显示函数*****************************/voiddisplay(ucharge,ucharshi){HC138Set(6);P0=0x00;HC138Set(0);//消隐delay(1);HC138Set(7);P0=duan[ge];HC138Set(0);//把数值入数码管HC138Set(6);P0=wei[cc];HC138Set(0);delay(1);cc++;HC138Set(7);P0=duan[shi];HC138Set(0);HC138Set(6);P0=wei[cc];HC138Set(0);delay(1);}/****************显示函数,数的别离和位的改变*****************************/voidshow(ucharmiao,ucharfen,ucharshi){display(miao%10,miao/10);cc++;display(fen%10,fen/10);cc++;display(shi%10,shi/10);if(cc==5){cc=0;}}/****************按键控制函数*****************************/voidkey_control(void){if(key4==0)//如果key4被按下,进入闹钟设置模式{delay(5);if(key4==0){while(!key4);delay(5);while(!key4);temp++;//控制操作界面bb=1;//bb=1用于查看设置闹钟时间标志if(temp==0)//时钟界面{show(miao,fen,shi);}if(temp==1)//闹钟界面{show(amiao,afen,ashi);flag=1;//flag=1说明已经设置了闹钟scan++;//scan用于存放闹钟组数}if(temp==2){temp=0;num=0;if(scan==1)//存放第1组闹钟{xx1=amiao,yy1=afen,zz1=ashi;}if(scan==2)//存放第2组闹钟{xx2=amiao,yy2=afen,zz2=ashi;}if(scan==3)//存放第3组闹钟{xx3=amiao,yy3=afen,zz3=ashi;scan=0;}}}}if((temp==1)||(temp==2)||(temp==3))//闹钟界面{Separator();show(amiao,afen,ashi);}if(temp==0)//时钟界面{Separator();show(miao,fen,shi);}if(key1==0)//如果key1被按下,进入调时模式{delay(5);if(key1==0){num++;//如果key4被按下一次,调秒。如果key4被按下两次,调分。如果key4被按下三次,调小时。如果key4被按下四次,退出调时模式。while(!key1);delay(5);while(!key1);if(temp==0){if(num==1){TR0=0;}if(num==4){num=0;TR0=1;}}}}if(num!=0)//判断key1是否有按下{if(key2==0)//key2用于时间的加,按下一次加1{delay(5);if(key2==0){while(!key2);delay(5);while(!key2);if(temp==0)//时钟加调整{if(num==1)//时钟秒加调整{miao++;if(miao==60)miao=0;}if(num==2)//时钟分加调整{fen++;if(fen==60)fen=0;}if(num==3)//时钟时加调整{shi++;if(shi==24)shi=0;}}else//闹钟加调整{if(num==1)//闹钟秒加调整{amiao++;if(amiao==60)amiao=0;}if(num==2)//闹钟分加调整{afen++;if(afen==60)afen=0;}if(num==3)//闹钟时加调整{ashi++;if(ashi==24)ashi=0;}}}}if(key3==0)//key3用于时间的减,按下一次减1{delay(5);if(key3==0){while(!key3);delay(5);while(!key3);if(temp==0)//时钟减调整{if(num==1)//时钟秒减调整{miao--;if(miao==-1)miao=59;}if(num==2)//时钟分减调整{fen--;if(fen==-1)fen=59;}if(num==3)//时钟时减调整{shi--;if(shi==-1)shi=23;}}else//闹钟减调整{if(num==1)//闹钟秒减调整{amiao--;if(amiao==-1)amiao=59;}if(num==2)//闹钟分减调整{afen--;if(afen==-1)afen=59;}if(num==3)//闹钟时减调整{ashi--;if(ashi==-1)ashi=23;}}}}}else//如果在key1没有按下且设置了闹铃,key2按下一次查看一组闹铃,共三组,按下第四次回到时钟界面。{if(key2==0){delay(5);if(key2==0){while(!key2);delay(5);while(!key2);if(bb==1)//设置了闹铃{dd++;//dd用于判断返回存放闹钟的组数temp++;if((temp==1)||(temp==2)||(temp==3))//闹钟界面{show(amiao,afen,ashi);}if(temp==4)//时钟界面{show(miao,fen,shi);temp=0;dd=0;}if(dd==1)//查看第1组闹铃{amiao=xx1,afen=yy1,ashi=zz1;}if(dd==2)//查看第2组闹铃{amiao=xx2,afen=yy2,ashi=zz2;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年安顺职业技术学院单招职业倾向性考试必刷测试卷及答案解析(夺冠系列)
- 【地理】植被同步练习2025-2026学年高中地理人教版必修一
- 2026年医院患者就医希望量表常模建立研究合同
- 2026年知识产权维护协议
- 2026年医院建设合作协议
- 毕业论文普洱茶
- 临床专业医学生毕业论文
- 质检部门毕业论文要求
- GIS物流行业应用案例
- 设计专业毕业论文答辩稿
- 药剂证书考试题库及答案
- 前庭大腺囊肿课件
- 四川美术学院2025年设计考研《64中外设计史》真题与试题解析及答案
- 雨课堂学堂云在线《医患沟通与调适(广州医大 )》单元测试考核答案
- 小区游泳池经营承包合同
- 离职手续委托书范本
- HY/T 0330-2022海滩养护与修复工程验收技术方法
- 医疗卫生事业单位结构化面试题打印
- 第11章-量子力学基础
- GB/T 12467.1-2009金属材料熔焊质量要求第1部分:质量要求相应等级的选择准则
- 中药材的采收与加工
评论
0/150
提交评论