基于单片机89C51的数码管显示时钟设计_第1页
基于单片机89C51的数码管显示时钟设计_第2页
基于单片机89C51的数码管显示时钟设计_第3页
基于单片机89C51的数码管显示时钟设计_第4页
基于单片机89C51的数码管显示时钟设计_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

基于单片机的数字时钟摘要单片机在多功能数字钟中的应用已是非常普遍的,人们对数字钟的功能及工作顺序都非常熟悉。但是却很少知道它的内部结构以及工作原理。由单片机作为数字钟的核心控制器,可以通过它的时钟信号进行实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。通过键盘可以进行校时、定时等功能。输出设备显示器可以用液晶显示技术和数码管来显示技术。

本系统利用单片机实现具有计时、校时等功能的数字时钟,是以单片机AT89C51为核心元件同时采用LED数码管显示器动态显示“时〞,“分〞,“秒〞的现代计时装置。与传统机械表相比,它具有走时精确,显示直观等特点。另外具有校时功能,秒表功能,和定时器功能,利用单片机实现的数字时钟具有编程灵活,便于功能的扩充等优点。关键词:数字钟系统;单片机;数码管显示DigitalclocksystemAbstract

SCMinmulti-functiondigitalclockintheapplicationisalreadyverycommon,peopleonthedigitalclockfunctionandareveryfamiliarwiththeworkorder.Butveryfewknowthatitsinternalstructureandworkingprinciples.SCMasadigitalclockfromthecorecontroller,itcanachievetheclocksignaltiming,itstimedatabytheMCUoutput,useofmonitorsdisplayed.Keyboardcanbecarriedoutattheschool,timing,andotherfunctions.Outputdevicescanbeusedliquidcrystaldisplaymonitorsanddigitaltechnologytodisplaythetechnology.

ThesystemusesMCUwithtime,theschoolfeaturessuchasthedigitalclock,SCMAT89C51isalsousedasthecorecomponentsoftheLEDdigitaldisplaydynamicdisplay"when"and"points"and"seconds"ofthemoderntimedevice.Comparedwiththetraditionalmechanicalwatches,ithasaprecisepaththatintuitive,andothercharacteristics.Inadditionaschoolfunction,stopwatchfunction,andthetimerfunctiontoachieveMCUuseofthedigitalclockwithprogrammingflexibilitytofacilitatetheexpansionoffunctionaladvantages.

Keywords:digitalclocksystem;SCM;LEDMonitor目录设计任务书………….………=1\*ROMANI摘要…………………….……=3\*ROMANIIIABSTRACT…………….……=4\*ROMANIV系统方案…………….…..=1\*ROMANI系统概述设计任务书……….……………=1\*ROMANI摘要……………….…….……=3\*ROMANIIIABSTRACT…………………..=4\*ROMANIV系统方案………….………11.1系统概述………………….…………11.2方案论证…………….11.3扩展功能…………….2设计过程………………….22.1设计原理……………22.2所需元器件……………………….…23.电路与程序………….…….23.1电路设计……………23.2程序设计……………33.2.1程序流程图………………….33.2.2主要程序分析……………….7参考文献……………64.总结体会…………………..161、系统方案1.1系统概述本系统可模拟电子时钟,实现时钟,秒表,倒计时定时器功能,主从CPU数据处理、键盘控制与数据显示。主控系统能响应按键,并对其进行相应的处理,再把其对应的结果数据在数码管LED上显示。具体设计根本任务是:1.用LED数码管显示时间,且能显示时、分、秒的24小时制的数字钟。2.具有校时功能,具体方法:设置三个按钮,其中两个按钮分别对“时〞、“分〞进行校时,另一个按钮那么实现对“秒〞位清零系统结构框图如图1.1所示:CPU主机CPU主机键盘控制数码管显示数码管显示开关控制数码管显示形式图1.1数字钟系统结构框图1.2方案论证方案一1.计数局部采用异步2-5-10进制计数器7490,显示局部参考实验七。1.计时用的“秒〞脉冲信号可用实验板中提供的800Hz分频产生。800Hz信号同时作为动态扫描显示电路的时钟信号。2.时、分校时控制,当校时按钮按下时,可对时、分计数器CP端输入秒脉冲来加速计数速度来到达校时目的。方案二1.用单片机定时器中断原理实现数码管动态10ms循环扫描,同时完成计数功能,并经过屡次中断产生“秒〞信号。2.可控制按键实现时,分,秒加一,减一功能。考虑到设计硬件简单原那么,利用单片机实现的数字时钟具有编程灵活,便于功能的扩充等优点,故本设计采用方案二。1.3扩展功能1.实现秒表功能。2.可以用于倒计时定时。3.可以时分秒清零。2.设计过程1.原理本设计主要应用了单片机原理,利用单片机的I/O口,由键盘控制I/O口,进行单片机相应的程序处理,再用I/O口控制数码管的显示。利用开关来控制开启,暂停计时,并切换时钟,秒表,倒计时定时器功能。2.所需元器件六位一体数码管,89C51单片机,7407芯片,12M晶振,按键假设干,开关假设干,电阻假设干,电容假设干,导线3.电路与程序设计3.1电路设计:图3.1总体电路图本系统的设计电路如图3.1所示,左边按键控制时分秒加一减一操作,右边开关切换数码管显示时钟,秒表,倒计时定时器等功能。单片机下方按键有复位功能:当在时钟方式时,此按键有清零作用;当在倒计时定时器方式时,此按键按下,时分秒均付为最大值。右上角是六位一体的数码管LED,用于显示。数码管左边的上拉电阻具有自动拉高P0I/O口的功能。数码管下方的7407芯片有限流作用,用于防止数码管电流过大而烧毁。3.2程序设计3.2.1程序流程图图3-2-1为主程序流程图,图3-2-2为定时器0程序流程图,图3-2-3为定时器1程序流程图。是否有按键是否有按键拆分,即吧两位数放到数码管上跳到按键子程序While死循环初始化程序图3-2-1主程序流程图此为主程序流程图,初始化后,就一直在while里循环,并把秒,分,时分别拆成各位和十位两个数,放到相应的数码管上显示,并检测是否有按键按下,和定时器T0,T1溢出,来执行相应的键盘子程序和定时器0,1的中断程序。重新初始化T0重新初始化T0t++,t0++秒分时计算,ss=60,那么ss=0,mm++。分,时同理计算t0是否为2t0=0数码管循环显示一位显示相应数码管的数值第三个开关是否按下j=10j=610t是否为jt=0开关2是否按下秒加一开关一是否按下开定时器1,关定时器0开定时器0,关定时器1进入主程序图3-2-2定时器0程序流程图此为定时器0流程图,在主程序检测到T0溢出时执行该子程序,该中断主要执行数码管循环显示数字,并检测到一秒后秒加一的功能。重新初始化T1重新初始化T1t++,t0++秒分时计算,ss=-1,那么ss=59,mm减一。分,时同理计算t0是否为2t0=0数码管循环显示一位显示相应数码管的数值t是否为jt=0开关2是否按下秒减一开关一是否按下开定时器1,关定时器0开定时器0,关定时器1进入主程序j=610,图3-2-3定时器1程序流程图此为定时器1流程图,在主程序检测到T1溢出时执行该子程序,该中断程序主要执行数码管循环显示数字,并检测到一秒后秒减一的功能。参考文献[1]康华光,邹寿彬,秦臻.电子技术根底——数字局部.北京——高等教育出版社,2006.1[2]张毅刚,彭喜元,董继成.单片机原理及应用.高等教育出版社,2003.12[3]刘鲲,刘春亮,黄焱.单片机C语言入门.人民邮电出版社,2023年4月第1版.3.2.2源程序开始函数的定义:#include<reg51.h>#defineucharunsignedchar//宏定义#defineuintunsignedint//宏定义#include<intrins.h>//循环左移函数库voidjian_pan();//键盘子函数charcodeduan_ma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//时钟显示数组intss,mm,hh,s_shi,s_ge,m_shi,m_ge,h_shi,h_ge,t,t0,zy,j,ds;//zy为左移的意思sbitp32=P3^2;sbitp31=P3^1;sbitp30=P3^0;sbitp37=P3^7;2.主程序:voidmain(){ds=1;//定时器初始化P2=0xfe;//数码管位初始化P0=0x3f;//如果时时钟,断码初始置0P1=0xff;//键盘初始t=0;//1S时,t=700t0=0;//数码管动态显示一次,t0=2,10ms左右 TH0=(65536-10001)/256; TL0=(65536-10001)%256;TH1=(65536-10001)/256; TL1=(65536-10001)%256;EA=1;ET1=0;//开定时器0TR1=0;//定时器开始工作ET0=1;TR0=1;while(1){if(P1!=0xff)//判断是否有键,有键就执行jian_pan子程序jian_pan();s_shi=ss/10;//拆分s_ge=ss%10;m_shi=mm/10;m_ge=mm%10;h_shi=hh/10;h_ge=hh%10;}}3.定时器0中断程序:voidtimer0()interrupt1{if(p32==1)j=610;elsej=10; TH0=(65536-10001)/256;//重新初始化T0 TL0=(65536-10001)%256; t++;t0++;if(P2==0xdf)//如果数码管显示到第6个下一个显示第1个数码管11011111->01111111->11111110P2=0x7f;//秒分时计算if(ss==60)//假设ss为60,ss=0,同时mm+1{ss=00;mm++;}if(mm==60)//假设mm为60,mm=0,同时hh+1{mm=00;hh++;}if(hh==24)//假设hh为24,hh=0hh=00;//数码管动态显示,t=0~2时左移一位,并显示那一位相应的值if(t0==2){t0=0;//P2循环左移一位zy=P2;zy=_crol_(zy,1);P2=zy;//相应数码管显示相应的数值if(P2==0xfe)P0=duan_ma[s_ge];if(P2==0xfd)P0=duan_ma[s_shi];if(P2==0xfb)P0=duan_ma[m_ge+10];if(P2==0xf7)P0=duan_ma[m_shi];if(P2==0xef)P0=duan_ma[h_ge+10];if(P2==0xdf)P0=duan_ma[h_shi];}if(t==j){t=0;if(p31==1)ss++;}if(t>611)t=0;if(p30==0)//转到timer1上去{ET0=0;TR0=0;ET1=1;TR1=1;t=0;}}4.定时器1中断程序:voidtimer1()interrupt3{j=610;if(ds==1)mm=59;if(ds==0)ds=0;elseds--;TH1=(65536-10001)/256;//重新初始化T1 TL1=(65536-10001)%256; t++;t0++;if(P2==0xdf)//如果数码管显示到第6个下一个显示第1个数码管11011111->01111111->11111110P2=0x7f;//秒分时计算if(ss==-1)//假设ss为60,ss=0,同时mm+1{ss=59;mm--;}if(mm==-1)//假设mm为60,mm=0,同时hh+1{mm=59;hh--;}//数码管动态显示,t=0~2时左移一位,并显示那一位相应的值if(t0==2){t0=0;//P2循环左移一位zy=P2;zy=_crol_(zy,1);P2=zy;//相应数码管显示相应的数值if(P2==0xfe)P0=duan_ma[s_ge];if(P2==0xfd)P0=duan_ma[s_shi];if(P2==0xfb)P0=duan_ma[m_ge+10];if(P2==0xf7)P0=duan_ma[m_shi];if(P2==0xef)P0=duan_ma[h_ge+10];if(P2==0xdf)P0=duan_ma[h_shi];}if(t==j){t=0;if(p31==1){if((ss||hh||mm)!=0)ss--;}}if(t>611)t=0;if(p30==1)//转到timer1上去{ET1=0;TR1=0;ET0=1;TR0=1;t=0;}}5.键盘子程序:voidjian_pan(){uinttemp;temp=P1;switch(temp){case0xfe://秒个位加1{while(P1!=0xff){}if(ss==59)ss=00;elsess++;}break;case0xfd://秒个位减1{while(P1!=0xff){}if(ss==00)ss=59;elsess--;}break;case0xfb://分个位加1{while(P1!=0xff){}if(mm==59)mm=00;elsemm++;}break;case0xf7://分个位减1{while(P1!=0xff){}if(mm==00)mm=59;elsemm--;}break;case0xef://时个位加1{while(P1!=0xff){}if(hh==23)hh=00;elsehh++;

温馨提示

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

评论

0/150

提交评论