单片机数码管时钟电路的设计1.docx

上传人:b****6 文档编号:4946116 上传时间:2022-12-12 格式:DOCX 页数:18 大小:454.84KB
下载 相关 举报
单片机数码管时钟电路的设计1.docx_第1页
第1页 / 共18页
单片机数码管时钟电路的设计1.docx_第2页
第2页 / 共18页
单片机数码管时钟电路的设计1.docx_第3页
第3页 / 共18页
单片机数码管时钟电路的设计1.docx_第4页
第4页 / 共18页
单片机数码管时钟电路的设计1.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

单片机数码管时钟电路的设计1.docx

《单片机数码管时钟电路的设计1.docx》由会员分享,可在线阅读,更多相关《单片机数码管时钟电路的设计1.docx(18页珍藏版)》请在冰豆网上搜索。

单片机数码管时钟电路的设计1.docx

单片机数码管时钟电路的设计1

课程设计报告

 

课程名称:

单片机原理及应用实践

 

题目单片机数码管时钟电路的设计

所在院系电气工程

班级09自动化1班

姓名王强

学号0901050121

指导教师徐曌

设计时间2012/11/5——2012/11/16

 

 

数码管时钟电路的设计

摘要:

时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的要求越来越高,应用越来越广。

怎样让时钟更好的为人民服务,怎样让我们的老朋友焕发青春呢?

这就要求人们设计出新型时钟。

LED数码管时钟电路采用24小时计方式,时、分、秒用六位数码管显示。

电路采用AT89C2051单片机,使用5v电源供电,只使用一个按键即可进入调时、省电(不显示LED数码管)和正常显示三种状态。

现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。

本文利用单片机实现数字时钟计时功能的主要内容,其中AT89C51是核心元件同时采用数码管动态显示“时”,“分”,“秒”的现代计时装置。

与传统机械表相比,它具有走时精确,显示直观等特点。

它的计时周期为24小时,显满刻度为“23时59分59秒”,另外具有校时功能,断电后有记忆功能,恢复供电时可实现计时同步等特点。

单片机SCM(SingleChipMicrocomputer),即MicroController,是把微型计算机主要部分都集成在一个芯片上的单芯片微型计算机。

主要包括了微处理器(CPU)、存储器(ROM、RAM)、输入/输出口(1/0口)和定时器/计数器、中断系统等功能部件[15]。

单片机自70年代出现以来,已经有了很大的发展,被广泛应用于机械、测量控制、工业自动化、智能接口和智能仪表等许多领域。

例如:

单片机与传统的机械产品相结合后简化产品结构,实现控制智能化,成为新一代的机、电一体化产品;利用单片机来构成各种工业控制系统、数据采集系统等;在大型工业测控系统中,单片机进行接口的控制与管理,与计算机主机并行工作,可以大大提高系统运行速度。

 

一数字钟的功能实现与设计方案

LED数码管时钟电路采用24小时计方式,时、分、秒用六位数码管显示。

电路采用AT89C2051单片机,使用5v电源供电,只使用一个按键即可进入调时、省电(不显示LED数码管)和正常显示三种状态。

1.1数字钟的设计要求及功能

利用AT89C2051来实现六位LED数码管的时钟,可以24h(小时)计时方式,分别显示时、分、秒,时分调整可通过触摸按键来实现。

数码管时钟电路,秒表/时钟计时器采用AT89C2051单片机最小化应用设计,采用共阳七段LED显示器,利用P3.7口的S1来对显示的时、分、秒进行调整。

在操作键时,其一对触点闭合或断开,将引起电压的变化。

此时,单片机可根据电压的变化来判断键的通断状态。

采用12MHz晶振可有利于提高秒计时的精确性

1.2方案的确定

LED数码管时钟电路采用24h计时方式,时、分、秒用六位数码管显示。

该电路采用AT89C2051单片机,使用5V电池供电,只使用一个按键开关即可进入调时、省电(不显示LED数码管)和正常显示三种状态。

为了实现LED显示器的数字显示,可以采用静态显示法和动态显示法,由于静态显示法需要数据锁存器等硬件,接口复杂一些,考虑时钟显示只有六位,且系统没有其它复杂的处理任务,所以决定采用动态扫描法实现LED的显示。

单片机采用易购的AT89C2051系列,这样单片机可具有足够的空余硬件资源实现其它的扩充功能,如考虑到要使用电池供电的话可采用LV系列单片机。

秒表/时钟计时器电路系统的总体设计框架如图1所示。

图1硬件系统的总体设计框架

 

二、系统总体方案设计

2.1硬件设计

数码管时钟电路如图图17-10-1所示,其采用动态扫描方式实现,P1口输出段码数据,p3.0~p3.5口作扫描输出,p3。

7接按钮开关。

为了提供LED数码管的驱动电流,用三极管9012作电源驱动输出。

为了提高秒计时器的精度,采用12Mhz晶振。

AT89C2051的功能:

AT89C2051是一个低电压,高性能CMOS8位单片机,片内含2kbytes的可反复擦写的只读Flash程序存储器和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大AT89C2051单片机可为您提供许多高性价比的应用场合。

  AT89C2051是一个功能强大的单片机,但它只有20个引脚,15个双向输入/输出(I/O)端口,其中P1是一个完整的8位双向I/O口,两个外中断口,两个16位可编程定时计数器,两个全双向串行通信口,一个模拟比较放大器。

同时AT89C2051的时钟频率可以为零,即具备可用软件设置的睡眠省电功能,系统的唤醒方式有RAM、定时/计数器、串行口和外中断口,系统唤醒后即进入继续工作状态。

省电模式中,片内RAM将被冻结,时钟停止振荡,所有功能停止工作,直至系统被硬件复位方可继续运行。

图1数码管时钟电路

2.1软件设计

(1)主程序

设计中的计时采用定时器T0中断完成,其余状态循环调用显示子程序,当P3.7口开关按下时,转入调时子程序。

系统主程序流程图如图17-10-2示。

(2)显示子程序

数码管显示的数据存放在内存单元70H~75H中,其中70H~71H存放秒数据,72H~73H存放分数据,74H~75H存放时数据,每一地址单元内均为十进制BCD码。

由于采用软

件动态扫描实现数据显示功能,显示用十进制BCD码数据的对应段码存放在ROM表中。

显示时,先取出70H~75H某一地址中的数据,然后查得对应的显示用段码从P1口输出。

P3口将对应的数码管选中就能显示该地址单元的数据值。

(3)定时器T0中断服务程序

定时器T0用于时间计时。

定时溢出中断周期设为50ms,中断累计20次(即1s)是对秒单元进行加1操作。

时间计数单元分别在70H~71H(s)、72H~73H(min)、70H~71H(h),7AH单元内存放“熄灭符”数据(#0AH)。

在计数单元采用十进制BCD码计数,满60进位。

T0中断服务程序流程图如图17-10-3示。

(4)T1中断服务程序

T1中断服务程序用于指示调整单元数字的亮闪。

在时间调整状态下,没过0。

3秒,将对应单元的显示数据换成“熄灭符”数据(#0AH)。

这样,在调整时间时,对应调整单元的显示数据就会间隔闪亮。

(5)调时功能程序

调试功能程序的设计方法是:

按下按键,若按下时间小于1秒,进入省电状态(数码管不亮,时钟不停),否则进入调分状态,等待操作,此时计时器停止走动。

当再次按下按钮时,若按下时间小于0.5秒则,则时间加1分钟;若按下时间大于0.5秒则进入小时调整状态。

在小时调整状态下,当按键按下的时间大于0.5秒退出调整状态,时钟继续走动。

 

三、系统软件工作流程图

3.1系统软件工作流程图

图2-系统软件工作流程图

LED数码管时钟显示电路的完整源程序

AT89C2051时钟程序

定时器T0、T1溢出周期为50MS,T0为秒计数用,T1为调整时闪烁用,

P3.7为调整按钮,P1口为字符输出口,采用共阳显示管。

3.2系统调试

硬件调试:

主要检查了电路板有无虚焊、短路、连线是否正常,尤其是单片机的各使能端的接线,I/O接口连线是否有误。

由于我们采用了六个数码管并联接入P2口的段选端,因此接线较多,经常容易出现管脚间短路现象。

这是硬件设计不足之处,今后将注意元件的选配使设计更简洁实用。

软件调试:

在LCA51仿真机上,对定时中断程序、显示子程序、按键中断子程序进行了分段调试,结果功能正常。

时钟计时检测:

通过与其它计时器对比观察发现数字时钟走时过快,检查定时中断程序发现T0的初始值设定有误,因此重新设置:

根据T0选择工作模式1,定时时间为50ms, focs=12MHz,

由 T=(2^16-T0初始值)×振荡周期×12

设T0的初始值为X,

则:

(2^16-X)×1/12×10^6s×12=50ms

X=15625,   

转化二进制值为:

X=0011110010111010, 即TH=#3CH,TL=#0BAH

 

四、详细元器件清单

1.单片机仿真器

2.单片机仿真模块

3.Isis软件

4.Keil软件

5.计算机

 

五、总结:

在一年的单片机学习过程中,面对着如此厚重的一本教材,以及繁杂的记忆内容,不免觉得有点枯燥乏味,离开了实验的乐趣,也最终不知道自己现在所学课程的重要性和他的趣味性。

学习过程中不免将其仅仅作为一种知识的积累,直到最近的实验机会又教会了我许多,打开了我学习的一个视野,前所未有的一个看待学习的一个角度,也许是我接触实践太晚了吧。

加之上海参观实习,在所里的所见所闻,以及最近在实验室里和老板,和师兄聊天,接触了前沿的一些科研内容,总算觉着自己有英雄用武之地了。

在做这门实验的过程中,浏览了许多网络上的电子期刊,访问了很多电子企业的网站,认识了各种各样的电子产品,当然以单片机为主。

还了解了各种电子元件的参数,比方说传感器,三极管等以及他们在实际应用中的一些注意事项,对以前理论的东西有了更深层次的认识。

打开了自己学习方向的另一个广阔天地。

让自己对学习有了更大的兴趣和动力,并有了更明确的方向。

在比较了各种方案以后,我确定了方案:

数码管时钟电路的设计。

主要原因是他相对简单。

由于我是第一次作实践的东西,包括从确定方案到采购到成品都是第一次,另外考虑到这个实验的初衷及要达到的效果,我才选了这个相对简单的课题。

通过这次实践我学到了不少东西。

由于选题简单,在实验过程中未遇到太大的困难。

在实验中由于对三极管的不够熟悉,前期所做的仿真图都不能正确的运行,由于三极管的放大问题,导致数码管不能正常显示,最后在指导老师的提示下,拆除了数码管,从而使得系统能正常运行。

对于程序方面,结合网络上的资料,经过两天的调试,成功的编写出了程序。

通过本次本次实验,我学到了很多,也巩固了以前的单片机知识,在对单片机的理解上更进一步,通过理论与实践的结合,从而更深入的学习到了一些指令的运用,让我对单片机有了一个新的认识!

 

附录一、参考文献

1.《单片机原理及其接口技术》····························清华大学出本社

2.

附录二、程序

;*****************************************

;;AT89C2051秒表/时钟程序;;

;*****************************************

;定时器T0、T1溢出周期为MS,T0为秒计数用,T1为调整时闪烁用,

;P3.7为调整按钮,P1口为字符输出口,采用共阳显示管。

;*****************************************

;;中断入口程序;;

;*****************************************

ORG0000H;程序执行开始地址

LJMPSTART;跳到标号START执行

ORG0003H;外中断0中断程序入口

RETI;外中断0中断返回

ORG000BH;定时器T0中断程序入口

LJMPINTT0;跳至INTT0执行

ORG0013H;外中断1中断程序入口

RETI;外中断1中断返回

ORG001BH;定时器T1中断程序入口

LJMPINTT1;跳至INTT1执行

ORG0023H;串行中断程序入口地址

RETI;串行中断程序返回

;*****************************************

;;主程序;;

;*****************************************

START:

MOVR0,#70H;清70H-7AH共11个内存单元

MOVR7,#0BH;

CLEARDISP:

MOV@R0,#00H;

INCR0;

DJNZR7,CLEARDISP;

MOV20H,#00H;清20H(标志用)

MOV7AH,#0AH;放入“熄灭符数据”

MOVTMOD,#11H;设T0、T1为16位定时器

MOVTL0,#0B0H;50ms定时初值(T0计时用)

MOVTH0,#3CH;50ms定时初值

MOVTL1,#0B0H;50ms定时初值(T1闪烁定时用)

MOVTH1,#3CH;50ms定时初值

SETBEA;总中断开放

SETBET0;允许T0中断

SETBTR0;开启T0定时器

MOVR4,#14H;1s定时用初值(50ms*20)

START1:

LCALLDISPLAY;调用显示子程序

JNBP3.7,SETMM1;P3.7口为0时转时间调整程序

SJMPSTART1;P3.7口为1时跳回START1

SETMM1:

LJMPSETMM;转到时间调整程序SETMM

;*****************************************

;;1秒计时程序;;

;*****************************************

;T0中断服务程序

INTT0:

PUSHACC;累加器入栈保护

PUSHPSW;状态字入栈保护

CLRET0;关T0中断允许

CLRTR0;关闭定时器T0

MOVA,#0B7H;中断响应时间同步修行

ADDA,TL0;低8位初值修正

MOVTL0,A;重装初值(低8位修正值)

MOVA,#3CH;高8位初值修正

ADDCA,TH0;

MOVTH0,A;重装初值(高8位修正值)

SETBTR0;开启定时器T0

DJNZR4,OUTT0;20次中断未到中断退出

ADDSS:

MOVR4,#14H;20次中断到(1s)重赋初值

MOVR0,#71H;指向秒计时单元(71H-72H)

ACALLADD1;调用加1程序(加1s操作)

MOVA,R3;秒数据放入A(R3为2位十进制数组合)

CLRC;清进位标志

CJNEA,#60H,ADDMM;

ADDMM:

JCOUTT0;小于60s时中断退出

ACALLCLR0;大于或等于60s时对秒计时时单元清零

MOVR0,#77H;指向分计时单元(76H-77H)

ACALLADD1;分计时单元加1min

MOVA,R3;分数据放入A

CLRC;清进位标志

CJNEA,#60H,ADDHH;

ADDHH:

JCOUTT0;小于60s时对秒计时单元清0

ACALLCLR0;大于或等于60min时分计时单元清0

MOVR0,#79H;指向小时计时单元(78H-79H)

ACALLADD1;小时计时单元加1h

MOVA,R3;时数据放入A

CLRC;清进位标志

CJNEA,#24H,HOUR;

HOUR:

JCOUTT0;小于24h小时计时单元清0

ACALLCLR0;大于或等于24h小时计时单元清0

OUTT0:

MOV72H,76H;中断退出时将分、时计时单元数据移入对应显示单元

MOV73H,77H;

MOV74H,78H;

MOV75H,79H;

POPPSW;恢复状态字(出栈)

POPACC;恢复累加器

SETBET0;开放T0中断

RETI;中断返回

;*****************************************

;;闪动调时程序;;

;*****************************************

;T1中断服务程序,用作时间调整时调整单元闪烁指示

INTT1:

PUSHACC;中断现场保护

PUSHPSW;

MOVTL1,#0B0H;装定时器T1定时初值

MOVTH1,#3CH;

DJNZR2,INTT1OUT;0.3s未到退出中断(50ms中断6次)

MOVR2,#06H;重装0.3s定时用初值

CPL02H;0.3s定时到对闪烁标志取反

JB02H,FLASH1;02H位为1时显示单元“熄灭”

MOV72H,76H;02H位为0时正常显示

MOV73H,77H;

MOV74H,78H;

MOV75H,79H;

INTT1OUT:

POPPSW;恢复现场

POPACC;

RETI;中断退出

FLASH1:

JB01H,FLASH2;01H位为1时,转小时熄灭控制

MOV72H,7AH;01H位为0时,“熄灭符”数据放入分

MOV73H,7AH;显示单元(72H-73H),将不显示分数据

MOV74H,78H;

MOV75H,79H;

AJMPINTT1OUT;转中断退出

FLASH2:

MOV72H,76H;01H位为1时,“熄灭符”数据放入小时

MOV73H,77H;显示单元(74H-75H),小时数据将不显示

MOV74H,7AH;

MOV75H,7AH;

AJMPINTT1OUT;转中断退出

;*****************************************

;;加子程序;;

;*****************************************

ADD1:

MOVA,@R0;取当前计时单元数据到A

DECR0;指向前一地址

SWAPA;A中数据高4位与低4位交换

ORLA,@R0;前一地址中数据放入A中低4位

ADDA,#01H;A加1操作

DAA;十进制调整

MOVR3,A;移入R3寄存器

ANLA,#0FH;高4位变0

MOV@R0,A;放回前一地址单元

MOVA,R3;取回R3中暂存数据

INCR0;指向当前地址单元

SWAPA;A中数据高4位与低4位交换

ANLA,#0FH;高4位变0

MOV@R0,A;数据放入当前地址单元中

RET;子程序返回

;*****************************************

;;清零程序;;

;*****************************************

;对计时单元复零用

CLR0:

CLRA;清累加器

MOV@R0,A;清当前地址单元

DECR0;指向前一地址

MOV@R0,A;前一地址单元清0

RET;子程序返回

;*****************************************

;;时钟调整程序;;

;*****************************************

;当调时按键按下时进入此程序

SETMM:

CLRET0;关定时器T0中断

CLRTR0;关闭定时器T0

LCALLDL1S;调用1s延时程序

JBP3.7,CLOSEDIS;键按下时间小于1s,关闭显示(省电)

MOVR2,#06H;进入调时状态,赋闪烁定时初值

SETBET1;允许T1中断

SETBTR1;开启定时器T1

SET2:

JNBP3.7,SET1;P3.0口为0(键未释放),等待

SETB00H;键释放,分调整闪烁标志置1

SET4:

JBP3.7,SET3;等待键按下

LCALLDL05S;有键按下,延时0.5s

JNBP3.7,SETHH;按下时间大于0.5s转调小时状态

MOVR0,#77H;按下时间小于0.5s加1min操作

LCALLADD1;调用加1子程序

MOVA,R3;取调整单元数据

CLRC;清进位标志

CJNEA,#60H,HHH;调整单元数据与60比较

HHH:

JCSET4;调整单元数据小于60转SET4循环

LCALLCLR0;调整单元数据大于或等于60时清0

CLRC;清进位标志

AJMPSET4;跳转到SET4循环

CLOSEDIS:

SETBET0;省电(LED不显示)状态,开T0中断

SETBTR0;开启T0定时器(开时钟)

CLOSE:

JBP3.7,CLOSE;无按键按下,等待

LCALLDISPLAY;有键按下,调显示子程序延时消抖

JBP3.7,CLOSE;是干扰返回CLOSE等待

WAITH:

JNBP3.7,WAITH;等待键释放

LJMPSTART1;返回主程序(LED数据显示亮)

SETHH:

CLR00H;分闪烁标志清除(进入调小时状态)

SETHH1:

JNBP3.7,SET5;等待键释放

SETB01H;小时调整标志置1

SET6:

JBP3.7,SET7;等待按键按下

LCALLDL05S;有键按下延时0.5s

JNBP3.7,SETOUT;按下时间大于0.5s退出时间调整

MOVR0,#79H;按下时间小于0.5s加1h操作

LCALLADD1;调加1子程序

MOVA,R3;

CLRC;

CJNEA,#24H,HOUU;计时单元数据与24比较

HOUU:

JCSET6;小于24转SET6循环

LCALLCLR0;大于或等于24时清0操作

AJMPSET6;跳转到SET6循环

SETOUT:

JNBP3.7,SETOUT1;调时退出的程序,等待键释放

LCALLDISPLAY;延时消抖

JNBP3.7,SETOUT;是抖动,返回SETOUT再等待

CLR01H;清调小时标志

CLR00H;清调分标志

CLR02H;清闪烁标志

CLRTR1;关闭定时器T1

CLRET1;关定时器T1中断

SETBTR0;开启定时器T0

SETBET0;开定时器T0中断(计时开始)

LJMPSTART1;跳回主程序

SET1:

LCALLDISPLAY;键释放等待时调用显示程序(调分)

AJMPSET2;防止键按下时无时钟显示

SET3:

LCALLDISPLAY;等待调

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1