单片机课程设计数字电子钟 肖惠茜.docx

上传人:b****2 文档编号:1941228 上传时间:2023-05-02 格式:DOCX 页数:28 大小:437.62KB
下载 相关 举报
单片机课程设计数字电子钟 肖惠茜.docx_第1页
第1页 / 共28页
单片机课程设计数字电子钟 肖惠茜.docx_第2页
第2页 / 共28页
单片机课程设计数字电子钟 肖惠茜.docx_第3页
第3页 / 共28页
单片机课程设计数字电子钟 肖惠茜.docx_第4页
第4页 / 共28页
单片机课程设计数字电子钟 肖惠茜.docx_第5页
第5页 / 共28页
单片机课程设计数字电子钟 肖惠茜.docx_第6页
第6页 / 共28页
单片机课程设计数字电子钟 肖惠茜.docx_第7页
第7页 / 共28页
单片机课程设计数字电子钟 肖惠茜.docx_第8页
第8页 / 共28页
单片机课程设计数字电子钟 肖惠茜.docx_第9页
第9页 / 共28页
单片机课程设计数字电子钟 肖惠茜.docx_第10页
第10页 / 共28页
单片机课程设计数字电子钟 肖惠茜.docx_第11页
第11页 / 共28页
单片机课程设计数字电子钟 肖惠茜.docx_第12页
第12页 / 共28页
单片机课程设计数字电子钟 肖惠茜.docx_第13页
第13页 / 共28页
单片机课程设计数字电子钟 肖惠茜.docx_第14页
第14页 / 共28页
单片机课程设计数字电子钟 肖惠茜.docx_第15页
第15页 / 共28页
单片机课程设计数字电子钟 肖惠茜.docx_第16页
第16页 / 共28页
单片机课程设计数字电子钟 肖惠茜.docx_第17页
第17页 / 共28页
单片机课程设计数字电子钟 肖惠茜.docx_第18页
第18页 / 共28页
单片机课程设计数字电子钟 肖惠茜.docx_第19页
第19页 / 共28页
单片机课程设计数字电子钟 肖惠茜.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机课程设计数字电子钟 肖惠茜.docx

《单片机课程设计数字电子钟 肖惠茜.docx》由会员分享,可在线阅读,更多相关《单片机课程设计数字电子钟 肖惠茜.docx(28页珍藏版)》请在冰点文库上搜索。

单片机课程设计数字电子钟 肖惠茜.docx

单片机课程设计数字电子钟肖惠茜

Forpersonaluseonlyinstudyandresearch;notforcommercialuse

Forpersonaluseonlyinstudyandresearch;notforcommercialuse

1设计课题任务、功能要求说明及方案介绍

 

1.1设计课题任务

设计一个具有特定功能的电子钟。

具有时间显示、报时等功能。

并有时间设定,时间调整功能。

1.2功能要求说明

设计一个具有特定功能的电子钟。

该电子钟上电或按键复位后能自动显示系统提示符“P.”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。

1.3设计课题总体方案介绍及工作原理说明

本电子钟主要由单片机、8*1独立键盘、显示接口电路和复位电路构成,设计课题的总体方案如图1所示:

图1总体设计方案图

本电子钟的所有的软件、参数均存放在AT89S52的FlashROM和内部RAM中,减少了芯片的使用数量简化了整体电路也降低了整机的工作电流。

键盘采用动态扫描方式。

利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据,同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。

2设计课题硬件系统的设计

 

2.1设计课题硬件系统各模块功能简要介绍

本设计的硬件系统主要采用以下基本模块来实现,单片机最小系统模块,输入模块、输出模块、电源模块。

单片机最小系统模块:

包括低功耗、高性能CMOS8位微控制器AT89S52;复位电路;晶振电路。

本模块AT89S52系统控制核心,单片机系统复位由复位电路完成,单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTAL1,其输出端位位引脚XTAL2。

通过这两个引脚在芯片外并接石英晶体振荡器和两只电容。

这样就构成一个稳定的自激振荡器。

输入模块:

本模块共用到了5个按键,1个电源开关,一个复位键,单片机运行期间,利用按键完成复位操作。

3个按键独立式键盘,S2键控制电子钟的启动\调整状态,S3键为加1键,S4键为减1键。

且S2、S3、S4任一键都独自连一个I/O(P1.0、P1.1、P1.2)口线,说明它们可以独立实现相应的电子钟功能。

输出模块:

本次设计显示为8位,采用两个四位一体数码管(共阳极)作为显示窗口,既可以节约成本又能简化电路。

数码管用8个PNP三极管驱动。

电源、下载口模块:

直接购买了市场上的USB供电及下载器。

2.2设计课题电路原理图、PCB图、元器件布局图

电路原理图见附录B

PCB图见附录C

元器件布局图见附录D

 

2.3设计课题元器件清单

设计课题元器件清单如表1所示。

表1设计所用元器件清单

名称

数量

参数

电阻

3个

1KΩ

数码管

2个

4位一体共阳数码管

电阻

1个

200Ω

下载口

1个

普通插座

1个

40PIN

电阻

24个

470Ω

按键

9个

三极管

9个

9012

USB供电线

1根

晶振

1个

12MHz

电容

2个

33pF

极性电容

1个

22μF

芯片

1块

AT89S52

发光二极管

8个

六角开关

1个

蜂鸣器

1个

3设计课题软件系统的设计

 

3.1设计课题使用单片机资源的情况

设计课题使用单片机资源的情况如下:

P0口输出数码管段选信号,P2口输出数码管位选信号;晶振12MHz;调整选择键SET_KEY:

P1.0;通过选择键选择调整位,选中位闪烁;增加键ADD_KEY:

P1.1;按一次使选中位加1;减少键DEC_KEY:

P1.2;按一次使选中位减1;P3.1为蜂鸣器发声报时;50H-5FH;16个寄存器单元作为显示单元;

50H用于控制秒基准时钟源的产生;51H清零秒寄存器;

52H清零分寄存器;53H清零时寄存器;

5FH用于秒个位;5EH用于秒十位;

5DH用于分个位;5CH用于分十位;

5BH用于时个位;5AH用于时十位;

54H用于控制调时闪烁;堆栈栈底:

60H。

3.2设计课题软件系统个模块功能简要介绍

本设计的软件系统主要采用以下基本模块来实现,主程序、中断服务程序、键盘输入程序模块、数码管及其驱动模块和延时模块。

主程序:

主要是用于对输入信号的处理、输出信号的控制和对各个功能程序模块的运用及其控制。

中断服务程序:

主要是用于电子钟的准确运行、数据输入过程中的闪烁。

键盘输入程序模块:

主要是用于确定按键并得到特定的键码值。

数码管及其驱动模块:

主要是用于驱动数码管及利用数码管显示时间。

延时模块:

程序中有两种延时子程序,一种是短延时用于判键按下等,一种是长延时。

3.3设计课题软件系统程序流程框图

系统软件采用汇编语言按模块化方式进行设计,然后通过Keil软件开发平台将程

序转变成十六进制程序语言,接着使用Proteous进行仿真,读出显示数据。

主程序流程框图如图2所示;

加1子程序流程框图如图3所示;

中断服务程序流程框图如图4所示;

键盘扫描子程序流程框图如图5所示;

显示子程序流程框图如图6所示;

图2主程序流程框图

图3加1子程序流程框图

图4中断子程序

 

图5键盘扫描子程序

图6显示子程序

3.4设计课题软件系统程序清单

程序清单见附录A

4设计结论、仿真结果、误差分析、教学建议

 

4.1设计课题的设计结论及使用说明

本设计为基于单片机的电子钟的设计。

刚开始,我有很多地方理不清头绪,无从下手,但通过认真研究设计课题,找书上网查资料买元件,确定基本设计方案,对所用芯片功能进行查找、调试,然后画电路图制PCB板、打孔、溶铜、焊接等,真的经历了许多困难,却积累了很多宝贵的经验,本设计用2个四位一体的共阳数码管做为显示器,它显示时间值;设计中有三个按键,其中S2为启动/选择调整位置,S2为加控制键S3为减控制键,当整点时间到时,蜂鸣器报警。

这样的结果与设计要求完全相符,本设计成功。

完成了设计任务。

4.2设计课题的仿真结果

在ProteusISIS的Debug菜单中选择Execute,运行程序,系统仿真结果如图7和图8所示。

实现功能:

可调整运行的电子钟具有三种工作状态:

“P.”状态、运行状态、调整状态。

“P.”状态,依靠上电或按复位键进入,在此状态下,按S3、S4键均无效,

按S2键有效,进入运行状态;

运行状态,在此状态下,按S3、S4键均无效,只有按S2键有效,按下S2键后,退出运行状态,进入调整状态;

调整状态,按S2键进入时、分、秒的闪烁,在此状态下,按S3(+1键)、

S4(-1键)键均有效;调整结束后必须按S2键,即可退出调整状态,进入运行状态。

在调整状态时长按S3、S4时可以连加及连减。

时间显示格式为:

时-分-秒;

图7“P.”运行状态仿真

图8时钟运行状态仿真

4.3设计课题的误差分析

该电子钟在运行中存在一定的误差,误差产生有三种可能,首先是采用的计时方案是软件计时的,计时优势利用中断来实现。

而当电子钟运行时间1秒时,又得去执行中断程序,这个过程是需要时间的,所以就产生了一定的误差,当然这个误差是避免不了的,其次还有硬件系统也有一定的影响。

第三,设计用到12MHz的晶振,计算是满20次为一秒钟,但实际会慢一些。

4.4设计体会

本次课程设计,让我受益匪浅,认识到了自己的许多缺点和不足,使我深深的感受到了理论联系实际的必要性及其重要性。

在我们以往的学习过程中,我们刻意地去加强理论的基础,对于一个程序我们只求它在运行时没有出错,我们便以为我们的程序成功了,岂不知它能否在硬件结构中得以实现,则是另外一回事,这就要求我们的动手能力,如果无法使软件与硬件实现有机的结合,那么再好的程序也只是一堆废字符。

4.5教学建议

经过一个学期王韧老师教导的的单片机的学习,我掌握了很多单片机学习的宝贵经验,尤其在编程的思路和PCB实物的制作上面。

编程思路是整个程序的灵魂,没有编程思路,程序就不会编出来,就失去了编程的意义。

在开始编程之前,想好编程的思路,画好程序流程图,编程能力才会提高,编程的过程才会顺畅,程序的质量才会提高。

在王韧老师的教学过程中,幽默轻松的教学方式常常让课堂气氛很活跃,幽默诙谐,授课内容条理清晰,经常运用各种实例,娓娓道来,给人印象深刻。

王老师在课堂上也十分注重和同学们的互动,经常会用一些亲身实践的经验为例,让同学们在基于事实的基础上更好的理解相关理论,充分做到了理论与实际的结合,既形象生动,又丰富有趣。

 

结束语

通过这次对数字电子钟的设计与制作,让我了解了设计电路的程序,也让我了解了关于电子钟的原理与设计理念。

在此次的电子钟设计过程中,更进一步地熟悉了51系列单片机芯片的结构及工作原理,提高了自己的自学能力,这对以后的学习生活有很大的帮助。

在这次的设计过程中遇到了很多困难,在自己的努力和同学的帮助下得到了解决,使我受益匪浅,最重要的是提高了自己的动手能力。

过程是艰辛的,但结果是令人兴奋的,看着自己设计的东西一分一秒的走着,心里觉得非常开心,这段时间的努力没有付诸东流。

此次课程设计让我明白不论是做课程设计,做实验还是在今后的学习中,都应该有一种坚定不移的信念,只有坚持不懈才能达到自己的最终目标

 

致谢

通过不断努力,终于完成了此次单片机的课程设计。

在此,首先感谢王韧老师,正是他在万忙之中还抽出宝贵的时间对我们进行精心的指导,才使我顺利完成了此次单片机课程设计。

同时也感谢各位同学和老师对我提供的帮助。

使我在此次设计中学到了许多宝贵的知识和经验。

在此,衷心地感谢你们!

 

参考文献

[1]张洪润,兰清华.单片机应用技术教程[M].北京:

清华大学出版社,1997

ZhanghongRun,LanQinghua.microcomputerapplicationtechnologytutorial[M].Beijing:

TsinghuaUniversityPress,1997

[2]何立民.单片机高级教程[M].北京:

北京航空航天大学出版社,2000

HeLimin.microcontrollerAdvancedTutorial[M].Beijing:

BeijingAerospaceUniversityPress,2000

[3]马忠梅.单片机C程序设计[M].北京:

北京航空航天大学出版社,2007

MaZhongmei.microcontrollerCprogramming[M].Beijing:

BeijingAerospaceUniversityPress,2007

[4]李朝青.单片机原理及接口技术[M].北京:

北京航空航天大学出版社,1998

LiZhaoqing.SCMTheoryandInterfaceTechnology[M].Beijing:

BeijingAerospaceUniversityPress,1998

[5]代启化.基于Proteus的电路设计与仿真[J].现代电子技术.2006,第19期.

DaiQiHua.Proteus-basedcircuitdesignandsimulation[J].Modernelectronictechnology.2006,No.19

 

附录

 

附录A

;-----------------------------------------------------------------------

;本电子钟实现24小时制,8位数码管显示时分秒,可整点报时

;显示格式:

00-00-00(设置小时十位为0时,不显示)

;通过3只按键来调整时间

;调整选择键SET_KEY:

P1.0;通过选择键选择调整位,选中位闪烁

;增加键ADD_KEY:

P1.1;按一次使选中位加1

;减少键DEC_KEY:

P1.2;按一次使选中位减1

;如果长按ADD_KEY或DEC_KEY,可进行调时、调分快进快减,并停止闪烁

;如果选中位是秒,则按增加键或减少键可实现,但无调时快进和快减功能

;P0口输出数码管段选信号,P2口输出数码管位选信号;晶振12MHz

;P3.1为蜂鸣器发声报时

;编程人:

肖惠茜编写日期:

2012年12月18日修改日期(最终):

2012年12月23日

;-----------------------------------------------------------------------

/*程序入口*/

ORG0000H

LJMPSTART

ORG000BH

LJMPINTT0

ORG0100H

/*显P.程序*/

START:

MOVR6,#2;闪烁次数

MOVA,#0FEH;位选

TT:

MOVP2,A

MOVP0,#0CH;段码“P.”

LCALLDELAY

MOVP2,#0FFH

DJNZR6,TT

LCALLDELAY

LCALLDELAY1

RRA

JBP1.0,TT;按键是否按下,没按下则转移

LCALLDELAY;延时去抖

JNBP1.0,KAI;再次判断按键是否按下

KAI:

SETBP1.0

CLRA;状态恢复

MOVP0,#0FFH

LCALLDELAY1

SETB48H;用于调时闪烁标志

SETB47H;用于产生脉冲用于调时快进的脉冲

MOVR1,#0;按键功能标志:

0计时、1调时、2调分、3调秒

;-----------------------------------------------------------------------

;清16位寄存器及初始化

;50H用于控制秒基准时钟源的产生

;51H清零秒寄存器

;52H清零分寄存器

;53H清零时寄存器

;5FH用于秒个位;5EH用于秒十位

;5DH用于分个位;5CH用于分十位

;5BH用于时个位;5AH用于时十位

;54H用于控制调时闪烁

;----------------------------------------------------------------

MOVR0,#50H;初始化

MOVR6,#10H

CQ:

MOV@R0,#00H;清寄存器

INCR0

DJNZR6,CQ

MOVIP,#02H

SETBEA

SETBET0

MOVTMOD,#01H;设定定时器0工作方式1

MOVTH0,#3CH

MOVTL0,#0B0H;设置定时初值,定时50ms

SETBTR0;启动定时器0

MOVSP,#60H;堆栈初始化

/*主程序*/

MAIN:

LCALLDISPLAY

LCALLKEY_SCAN

JZMAIN

LCALLSET_KEY

JB46H,MAIN;如果已进行调时快进,则不再执行下面的调整

LCALLADD_KEY;调用增加按键处理子程序,加一

LCALLDEC_KEY;调用减少按键处理子程序,减一

SETBTR0

LJMPMAIN;返回

/*显示处理程序*/

DISPLAY:

MOVA,51H

ANLA,#0FH

MOV5FH,A;转换出秒个位,存入5FH

MOVA,51H

ANLA,#0F0H

SWAPA

MOV5EH,A;转换出秒十位,存入5EH

JB46H,MIN;如果调时快进则跳过闪烁处理子程序

CJNER1,#3,MIN;如果R1为3,闪烁秒位待调整

JB48H,MIN

MOV5FH,#0AH;使该位为10,查表得到使该位不显示

MOV5EH,#0AH

MIN:

MOVA,52H

ANLA,#0FH

MOV5DH,A;转换出分个位,存入5DH

MOVA,52H

ANLA,#0F0H

SWAPA

MOV5CH,A;转换出分十位,存入5CH

JB46H,HOUR;如果调时快进则跳过闪烁处理子程序

CJNER1,#2,HOUR;如果R1为2,闪烁分位待调整

JB48H,HOUR

MOV5DH,#0AH

MOV5CH,#0AH

HOUR:

MOVA,53H

ANLA,#0FH

MOV5BH,A;转换出时个位,存入5BH

MOVA,53H

ANLA,#0F0H

SWAPA

MOV5AH,A;转换出时十位,存入5AH

JB46H,DISP;如果调时快进,则跳过闪烁处理子程序

CJNER1,#1,DISP;如果R1为1,则闪烁时位待调整

JB48H,DISP

MOV5BH,#0AH

MOV5AH,#0AH

/*数码管动态扫描显示*/

DISP:

MOVDPTR,#TAB

MOVA,5FH

MOVCA,@A+DPTR

MOVP0,A

CLRP2.0

LCALLDELAY

SETBP2.0;显示秒个位

MOVA,5EH

MOVCA,@A+DPTR

MOVP0,A

CLRP2.1

LCALLDELAY

SETBP2.1;显示秒十位

MOVA,#0BFH

MOVP0,A

CLRP2.2

LCALLDELAY

SETBP2.2;显示“-”

MOVA,5DH

MOVCA,@A+DPTR

MOVP0,A

CLRP2.3

LCALLDELAY

SETBP2.3;显示分个位

MOVA,5CH

MOVCA,@A+DPTR

MOVP0,A

CLRP2.4

LCALLDELAY

SETBP2.4;显示分十位

MOVA,#0BFH

MOVP0,A

CLRP2.5

LCALLDELAY

SETBP2.5;显示“-”

MOVA,5BH

MOVCA,@A+DPTR

MOVP0,A

CLRP2.6

LCALLDELAY

SETBP2.6;显示时个位

MOVA,5AH

MOVCA,@A+DPTR

MOVP0,A

CLRP2.7

LCALLDELAY

SETBP2.7;显示时十位

RET

/*定时中断1s程序*/

INTT0:

PUSHACC;保护现场

PUSHPSW

MOVTH0,#3CH

MOVTL0,#0B0H

CPL47H;产生脉冲用于调时快进

INC54H

MOVA,54H

CJNEA,#10H,ADD_TIME;产生0.5秒,用于调时闪烁

CPL48H;取反调时闪烁标志位

MOV54H,#00H

ADD_TIME:

INC50H

MOVA,50H

CJNEA,#10H,ZD;整点报时时蜂鸣器响延迟时间

SETBP3.1;关蜂鸣器

ZD:

CJNEA,#20,RETI1;产生1秒时间

MOV50H,#00H;1秒时间到,清零50H

MOVA,51H

ADDA,#01H

DAA;十进制调整

MOV51H,A

CJNEA,#60H,RETI1

MOV51H,#00H;一分钟时间到

MOVA,52H

ADDA,#01H

DAA

MOV52H,A

CJNEA,#60H,RETI1

CLRP3.1

MOV52H,#00H;一小时到,开蜂鸣器,清分显示

MOVA,53H

ADDA,#01H

DAA

MOV53H,A

CJNEA,#24H,RETI1

MOV53H,#00H;24小时到,清时显示

RETI1:

POPPSW;恢复现场

POPACC;中断返回

RETI

/*键盘扫描程序*/

;R4设置为00H是为了在进入长按处理前加长延时,以区分长按与短按

;-----------------------------------------------------------------------

KEY_SCAN:

CLR46H;关闭调时快进标志

MOVP1,#0FFH;将P1口设置成输入状态

MOVA,P1

CPLA

ANLA,#07H;取P1口低3位

JZEXIT

LCALLDELAY;延时去抖

MOVA,P1;重新判断

CPLA

ANLA,#07H

JZEXIT

MOVR5,A

MOVR4,#00H;用于控制调时快进速度

LOOP:

LCALLDISPLAY;进入长按处理

MOVA,P1

CPLA

JB47H,LOOP1

INCR4;调时快进间隔时间基准加1

LOOP1:

CJNER1,#03H,LOOP2;如果调秒时长按,则不处理

LJMPLOOP3

LOOP2:

CJNER4,#99H,LOOP3

MOVR4,#70H;确定长按后,加快调时快进速度

SETB46H

LCALLADD_KEY

LCALLDEC_KEY

LOOP3:

JNZLOOP;等待按键释放

MOVA,R5;输出键值

EXIT:

RET

/*延时子程序*/

DELAY:

MOVR7,#200

DJNZR7,$

RET

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2