基于单片机89C51的数码管显示时钟设计.docx
- 文档编号:5122345
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:16
- 大小:140.22KB
基于单片机89C51的数码管显示时钟设计.docx
《基于单片机89C51的数码管显示时钟设计.docx》由会员分享,可在线阅读,更多相关《基于单片机89C51的数码管显示时钟设计.docx(16页珍藏版)》请在冰豆网上搜索。
基于单片机89C51的数码管显示时钟设计
基于单片机的数字时钟
摘要
单片机在多功能数字钟中的应用已是非常普遍的,人们对数字钟的功能及工作顺序都非常熟悉。
但是却很少知道它的内部结构以及工作原理。
由单片机作为数字钟的核心控制器,可以通过它的时钟信号进行实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。
通过键盘可以进行校时、定时等功能。
输出设备显示器可以用液晶显示技术和数码管来显示技术。
本系统利用单片机实现具有计时、校时等功能的数字时钟,是以单片机AT89C51为核心元件同时采用LED数码管显示器动态显示“时”,“分”,“秒”的现代计时装置。
与传统机械表相比,它具有走时精确,显示直观等特点。
另外具有校时功能,秒表功能,和定时器功能,利用单片机实现的数字时钟具有编程灵活,便于功能的扩充等优点。
关键词:
数字钟系统;单片机;数码管显示
Digitalclocksystem
Abstract
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
设计任务书………………………………………………………………………….………
摘要…………………………………………………………………………………….……
ABSTRACT…………………………………………………………………………….……
1.系统方案…………………………………………………………………………….…..
系统概述设计任务书……………………………………………………….……………
摘要……………………………………………………………………………….…….……
ABSTRACT…………………………………………………………………………………..
1.系统方案………………………………………………………………………….………1
1.1系统概述………………………………………………………………….…………1
1.2方案论证…………………………………………………………………………….1
1.3扩展功能…………………………………………………………………………….2
2.设计过程………………………………………………………………………………….2
2.1设计原理……………………………………………………………………………2
2.2所需元器件……………………………………………………………………….…2
3.电路与程序………………………………………………………………………….…….2
3.1电路设计……………………………………………………………………………2
3.2程序设计……………………………………………………………………………3
3.2.1程序流程图………………………………………………………………….3
3.2.2主要程序分析……………………………………………………………….7
参考文献……………………………………………………………………………6
4.总结体会…………………………………………………………………………………..16
1、系统方案
1.1系统概述
本系统可模拟电子时钟,实现时钟,秒表,倒计时定时器功能,主从CPU数据处理、键盘控制与数据显示。
主控系统能响应按键,并对其进行相应的处理,再把其对应的结果数据在数码管LED上显示。
具体设计基本任务是:
1.用LED数码管显示时间,且能显示时、分、秒的24小时制的数字钟。
2.具有校时功能,具体方法:
设置三个按钮,其中两个按钮分别对“时”、“分”进行校时,另一个按钮则实现对“秒”位清零
系统结构框图如图1.1所示:
图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程序流程图。
图3-2-1主程序流程图
此为主程序流程图,初始化后,就一直在while里循环,并把秒,分,时分别拆成各位和十位两个数,放到相应的数码管上显示,并检测是否有按键按下,和定时器T0,T1溢出,来执行相应的键盘子程序和定时器0,1的中断程序。
图3-2-2定时器0程序流程图
此为定时器0流程图,在主程序检测到T0溢出时执行该子程序,该中断主要执行数码管循环显示数字,并检测到一秒后秒加一的功能。
图3-2-3定时器1程序流程图
此为定时器1流程图,在主程序检测到T1溢出时执行该子程序,该中断程序主要执行数码管循环显示数字,并检测到一秒后秒减一的功能。
参考文献
[1]康华光,邹寿彬,秦臻.电子技术基础——数字部分.北京——高等教育出版社,2006.1
[2]张毅刚,彭喜元,董继成.单片机原理及应用.高等教育出版社,2003.12
[3]刘鲲,刘春亮,黄焱.单片机C语言入门.人民邮电出版社,2008年4月第1版.
3.2.2源程序
1.开始函数的定义:
#include
#defineucharunsignedchar//宏定义
#defineuintunsignedint//宏定义
#include
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;//如果时时钟,断码初始置0
P1=0xff;//键盘初始
t=0;//1S时,t=700
t0=0;//数码管动态显示一次,t0=2,10ms左右
TH0=(65536-10001)/256;
TL0=(65536-10001)%256;
TH1=(65536-10001)/256;
TL1=(65536-10001)%256;
EA=1;
ET1=0;//开定时器0
TR1=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;
else
j=10;
TH0=(65536-10001)/256;//重新初始化T0
TL0=(65536-10001)%256;
t++;
t0++;
if(P2==0xdf)//如果数码管显示到第6个下一个显示第1个数码管11011111->01111111->11111110
P2=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=0
hh=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;
else
ds--;
TH1=(65536-10001)/256;//重新初始化T1
TL1=(65536-10001)%256;
t++;
t0++;
if(P2==0xdf)//如果数码管显示到第6个下一个显示第1个数码管11011111->01111111->11111110
P2=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;
else
ss++;
}
break;
case0xfd:
//秒个位减1
{
while(P1!
=0xff)
{
}
if(ss==00)
ss=59;
else
ss--;
}
break;
case0xfb:
//分个位加1
{
while(P1!
=0xff)
{
}
if(mm==59)
mm=00;
else
mm++;
}
break;
case0xf7:
//分个位减1
{
while(P1!
=0xff)
{
}
if(mm==00)
mm=59;
else
mm--;
}
break;
case0xef:
//时个位加1
{
while(P1!
=0xff)
{
}
if(hh==23)
hh=00;
else
hh++;
}
break;
case0xdf:
//时个位减1
{
while(P1!
=0xff)
{
}
if(hh==00)
hh=23;
else
hh--;
}
break;
case0xbf:
{
ss=0;
}
break;
case0x7f:
{
while(P1!
=0xff)
{
}
if(p30==1)
{hh=0;mm=0;ss=0;}
else
{hh=23;mm=59;ss=59;}
}
break;
}
}
4.总结体会
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
本系统是以单片机AT89C52芯片为核心部件,实现了时钟、倒计时、秒表的功能。
此次在软件上是花费时间最多的,我们上网找资料,上图书馆,尽可能的了解有关于单片机这方面的知识。
通过这次课程设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。
使我初步了解了单片机的原理,学会了使用仿真软件进行仿真,以及在常用编程设计思路技巧(特别是C语言)的掌握方面都能向前迈了一大步。
通过本次电子技术课程设计,我们充分认识到了课程设计的理要性和必要性,本次设计使们对已学过的基础知识有了更深入的理解。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 89 C51 数码管 显示 时钟 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)