时钟计时器.docx

上传人:b****6 文档编号:4176305 上传时间:2022-11-28 格式:DOCX 页数:16 大小:186.92KB
下载 相关 举报
时钟计时器.docx_第1页
第1页 / 共16页
时钟计时器.docx_第2页
第2页 / 共16页
时钟计时器.docx_第3页
第3页 / 共16页
时钟计时器.docx_第4页
第4页 / 共16页
时钟计时器.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

时钟计时器.docx

《时钟计时器.docx》由会员分享,可在线阅读,更多相关《时钟计时器.docx(16页珍藏版)》请在冰豆网上搜索。

时钟计时器.docx

时钟计时器

目录

1一.前言

二.设计任务及方案

1.设计目的2

2.设计要求3

3.设计内容3

4.时钟计时器系统的总设计原理框图3

5.设计原理分析3

三.硬件设计及系统功能说明

1.STC89C52单片机4

2.中断源4

3.中断控制4

4.时间调整按键控制5

5.时钟电路系统图6

6.数码管显示电路图6

7.蜂鸣器整点提醒电路图7

四.软件设计

1.主程序执行流程图7

2.定时器T0中断程序流程图及说明7

3.总程序清单8

五.总结和收获14

六.参考文献15

时钟计时器的设计

一.前言

单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快、单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。

由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。

这次课程设计通过对单片机的学习、应用,运用STC89C52单片机设计一个时钟计时器,并通过数码管能够准确显示时间,能整点提醒,还能调整时间。

二.设计任务及方案

1.设计目的

(1)巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识的能力。

(2)培养针对课题需要,选择和查阅有关文献资料的自学能力,提高组成系统、编程、调试的动手能力。

(3)过对课题设计方案的分析、选择、比较、熟悉单片机用系统开发、研制的过程,软硬件设计的方法、内容及步骤。

(4)加深对汇编语言指令的了解和使用,并进一步提高使用汇编语言编程的能力。

2.设计要求

(1)时钟计时器能显示时、分、秒。

(2)以24小时计时方式运行。

(3)能整点提醒。

(4)能使用按键进行时、分的调整。

3.设计内容

利用单片机的定时/计数器、中断系统以及键盘和6位LED显示器进行设计。

在数码管显示器上实现电子时钟,显示格式为00-00-00,并且能进行调整时间和整点提示。

4.时钟计时器系统的总设计原理框图

5.设计原理分析

采用了STC89C52单片机的共阴极6段LED数码管显示器;P0口输出段码数据;P1.2口接蜂鸣器;P2.0----P2.5口作列扫描输出;P3.0、P3.1、P3.2、和P3.3口接4个按钮开关,用于调时及功能设置;采用12MHz晶振,来提高秒计时的精确性。

计时采用了定时器T0中断来实现。

主程序循环调用显示子程序和查键子程序,当端口有开关按下时,转入相应功能程序。

三.硬件设计及系统功能说明

1.STC89C52单片机

STC89C52单片机的功能:

8k字节Flash闪速存储器,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内震荡器及时钟电路。

同时,AT89C52可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。

空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。

掉电方式保存RAM中的内容,但震荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。

2.中断源

STC89C52单片机是一个多中断源的单片机,有五个中断源:

外部中断0、定时器0中断、外部中断1、定时器1中断和串行接收或发送中断。

各中断源的中断处理程序入口地址如下表所示:

中断源

入口地址

外部中断0

0003H

定时器0

000BH

外部中断1

0013H

定时器1

001BH

串行口

0023H

3.中断控制

(1)中断的开放或禁止是由中断允许寄存器IE控制的。

IE的格式:

EA

ES

ET1

EX1

ET0

EX0

EA:

中断总允许位。

EA=1,开放总中断,而各个中断源的中断请求是允许还是禁止,分别由各自的中断允许位确定;EA=0,禁止一切中断。

ES:

串行口中断允许位。

ET1:

定时器T1的中断允许位。

ET0:

定时器T0的中断允许位。

EX1:

外部中断1(INT1)的中断允许位。

EX0:

外部中断1(INT1)的中断允许位。

以上五个中断允许位的意义是:

0为禁止中断,1为允许中断。

(2)中断源优先级控制-中断优先级寄存器IP。

STC89C52单片机有高、低两个中断优先级,5个中断源可由程序设置为高优先级中断或低优先级中断,实现二级中断嵌套。

一个正在执行的低优先级中断源的中断服务程序,能被高优先级中断源所中断,但不能被同级别的另一个中断源所中断。

STC89C52单片机的5个中断源的优先级由中断优先级寄存器IP的相应位设定。

IP格式:

PS

PT1

PX1

PT0

PX0

4.时间调整按键控制

(1)按SW1进入调整小时状态:

LED8单元闪烁,按SW1加1,按SW2减1.

(2)按SW3进入调整分钟状态:

LED8单元闪烁,按SW3加1,按SW4减1.

5.时钟电路系统图

6.数码管显示电路图

7.蜂鸣器整点提醒电路图

四.软件设计

1.主程序执行流程图

2.定时器T0中断程序流程图及说明

定时器T0用于时间计时。

定时溢出中断周期设为4ms,中断进入后先进行定时中断初值校正,当中断里累计20次时,对秒计数单元进行加1操作。

时钟显示时间单元地址分别在22H23H、24H25H、26H27H中,最大计时值为23时59分59秒。

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

3.总程序清单

说明:

定时器T0、T1溢出周期为4MS,T0为秒计数用。

P3.0、P3.1、P3.2、P3.3为调整按钮,P0口为字符输出口,P2为扫描口,P1.2为蜂呜器口,采用共阴显示管。

30H-32H为时钟计时单元,22H-27H为显示时间单元。

BUFF_KEYEQU21H;键盘键

LED1EQU22H;数码管显示缓存

LED2EQU23H

LED3EQU24H

LED4EQU25H

LED5EQU26H

LED6EQU27H

LED_LPEQU28H;T0键盘显示扫描缓存

HOREQU30H;小时值缓存

MINEQU31H;分钟值缓存

SECEQU32H;秒值缓存

F_BEEPBIT01H

LED_PORTEQUP0;定义数码管

DIG_PORTEQUP2

SW1BITP3.0;定义按键

SW2BITP3.1

SW3BITP3.2

SW4BITP3.3

SW5BITP3.4

SW6BITP3.5

BEEPBITP1.6

ORG000H

JMPMAIN

ORG00BH

JMPT0_INT

ORG100H;中断入口地址

MAIN:

MOVSP,#40H

MOVPSW,#00H

MOVR0,#7FH;初始化RAM区

CLR_RAM:

MOVA,#00H

MOV@R0,A

DJNZR0,CLR_RAM

MOVP1,0FFH;INIT

MOVP2,0FFH;输出高电平,灭7段LED,低电平有效

MOVP0,0FFH

MOVP3,0FFH

MOVHOR,#12

MOVTMOD,#21H;初始化定时器T0

MOVTH0,#240;T0=4MS

MOVTL0,#96

SETBTR0;启动定时器T0

SETBET0

SETBEA;开中断

WAIT_KEY:

;等候按键

JNBSW1,SW1_OK

JNBSW2,SW2_OK

JNBSW3,SW3_OK

JNBSW4,SW4_OK

JNBSW5,SW5_OKA

JNBSW6,SW6_OKA

JMPWAIT_KEY

SW5_OKA:

JMPSW5_OK

SW6_OKA:

JMPSW6_OK

SW1_OK:

MOVA,HOR

CJNEA,#24,SW1_OVER

MOVHOR,#00H

SETBF_BEEP

CLRBEEP

LCALLDEL

SETBBEEP

CLRF_BEEP

JMPWAIT_KEY

;时显示

SW1_OVER:

INCHOR;时加1

SETBF_BEEP

CLRBEEP

LCALLDEL;调用延时程序

SETBBEEP

CLRF_BEEP

JMPWAIT_KEY

SW2_OK:

MOVA,HOR

CJNEA,#00,SW2_OVER

MOVHOR,#23

SETBF_BEEP

CLRBEEP

LCALLDEL

SETBBEEP

CLRF_BEEP

JMPWAIT_KEY

SW2_OVER:

DECHOR;时减1

SETBF_BEEP

CLRBEEP

LCALLDEL

SETBBEEP

JMPWAIT_KEY

;分显示

SW3_OK:

MOVA,MIN

CJNEA,#59,SW3_OVER;判断分是否等于59,不等跳转到SW3_OVER

MOVMIN,#00H;清零

SETBF_BEEP

CLRBEEP

LCALLDEL

SETBBEEP

CLRF_BEEP

JMPWAIT_KEY

SW3_OVER:

INCMIN;分加1

SETBF_BEEP

CLRBEEP

LCALLDEL

SETBBEEP

CLRF_BEEP

JMPWAIT_KEY

SW4_OK:

MOVA,MIN

CJNEA,#00,SW4_OVER

MOVMIN,#59

SETBF_BEEP

CLRBEEP

LCALLDEL

SETBBEEP

CLRF_BEEP

JMPWAIT_KEY

SW4_OVER:

DECMIN;分减1

SETBF_BEEP

CLRBEEP

LCALLDEL

SETBBEEP

CLRF_BEEP

JMPWAIT_KEY

;秒显示

SW5_OK:

MOVA,SEC

CJNEA,#59,SW5_OVER

MOVSEC,#00H

SETBF_BEEP

CLRBEEP

LCALLDEL

SETBBEEP

CLRF_BEEP

JMPWAIT_KEY

SW5_OVER:

INCSEC;秒加1

SETBF_BEEP

CLRBEEP

LCALLDEL

SETBBEEP

CLRF_BEEP

JMPWAIT_KEY

SW6_OK:

MOVA,SEC

CJNEA,#00,SW6_OVER

MOVHOR,#59

SETBF_BEEP

CLRBEEP

LCALLDEL

SETBBEEP

CLRF_BEEP

JMPWAIT_KEY

SW6_OVER:

DECSEC;时减1

SETBF_BEEP

CLRBEEP

LCALLDEL

SETBBEEP

CLRF_BEEP

JMPWAIT_KEY

DEL:

MOVR5,#03;为演示方便,人为插入的延时程序

DEL01:

MOVR6,#200

DEL02:

MOVR7,#200

DJNZR7,$;判断R7减1是否等于0,不等于0则跳转

DJNZR6,DEL02

DJNZR5,DEL01

RET

BIN_BCD:

MOVB,#10

DIVAB

RET

;T0INTRRUPT数码管扫描定时中断

T0_INT:

PUSHACC

PUSHPSW

MOVTH0,#240;T0=4MS

MOVTL0,#96

INCLED_LP

MOVA,LED_LP

CJNEA,#250,CONT_SCAN;250*4MS=1S

MOVLED_LP,#00H;数码管清零

INCSEC;秒加1

MOVA,SEC

CJNEA,#60,CONT_SCAN;判断秒是否等于60,等于加1给分

MOVSEC,#00H

INCMIN;分加1

MOVA,MIN

CJNEA,#60,CONT_SCAN

MOVMIN,#00H

整点提醒:

LOO:

MOVR0,#10

LOO1:

CPLP1.2;将P1.2内容取反

ACALLDELAY;调用延时子程序

DJNZR0,LOO1

ACALLDELAY

LJMPL1

DELAY:

MOVR6,#5

DL2:

MOVR5,#250

DL3:

MOVR4,#200

DL1:

DJNZR4,DL1

DJNZR5,DL3

DJNZR6,DL2

RET

L1:

MOVSEC,#1

INCHOR

MOVA,HOR

CJNEA,#24,CONT_SCAN

MOVHOR,#00H

CLRBEEP

CLRP1.0

LCALLDEL

SETBBEEP

SETBP1.0

CONT_SCAN:

MOVA,SEC

LCALLBIN_BCD;调用机器代码

MOVLED6,B;分的个位

MOVLED5,A;分的十位

MOVA,MIN

LCALLBIN_BCD

MOVLED4,B

MOVLED3,A

MOVA,HOR

LCALLBIN_BCD

MOVLED2,B;时的个位

MOVLED1,A;时的十位

MOVA,LED_LP

MOVB,#06

DIVAB;累加器A除累加器B

MOVA,B

RLA;左移两位

MOVDPTR,#TAB_SCAN;查表

JMP@A+DPTR

TAB_SCAN:

AJMPSCAN_L1

AJMPSCAN_L2

AJMPSCAN_L3

AJMPSCAN_L4

AJMPSCAN_L5

AJMPSCAN_L6

SCAN_L1:

MOVDIG_PORT,#0

MOVA,LED1

JMPEND_SCAN

SCAN_L2:

MOVDIG_PORT,#1

MOVA,LED2

JMPEND_SCAN

SCAN_L3:

MOVDIG_PORT,#3

MOVA,LED3

JMPEND_SCAN

SCAN_L4:

MOVDIG_PORT,#4

MOVA,LED4

JMPEND_SCAN

SCAN_L5:

MOVDIG_PORT,#6

MOVA,LED5

JMPEND_SCAN

SCAN_L6:

MOVDIG_PORT,#7

MOVA,LED6

END_SCAN:

MOVDPTR,#TAB_LED

MOVCA,@A+DPTR

MOVLED_PORT,A

JNBF_BEEP,EXIT_T0

CLRBEEP

EXIT_T0:

POPPSW

POPACC

RETI

TAB_LED:

DB3FH,06H,5BH,4FH,66H,6DH,7DH;共阴字码表

DB07H,7FH,6FH,77H,7CH,39H,5EH

DB79H,71H,76H,73H,3EH,00H

END

五.总结和收获

通过这次单片机课程设计,培养了我自身的实际动手的能力以及综合运用知识解决实际问题的能力,掌握单片机指令的应用并熟悉单片机系统的开发、研制过程,对这学期单片机课程的学习也是一个复习和运用的机会。

另外,我总结出要做好一个课程设计,必须做到:

在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些功能;要有一个清晰的思路和一个完整的的程序设计流程图;在设计程序时,不可能一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路;在设计课程过程中遇到问题是很正常的,但是应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。

通过这次课程设计还使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能灵活运用知识。

同时在设计的过程中发现了自己的不足之处,对之前所学过的理论知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言也掌握得不够好,对于这些不足之处我要努力改正。

六.参考文献

[1]郑毛祥.单片机应用基础.人民邮电出版社,2006.6

[2]何立民.单片机应用系统设计[M].北京:

北京航空航天大学出版社,1993.

[3]楼然笛.单片机开发[M].北京:

人民邮电出版社,1994.

[4]李大有.《单片机应用与设计》.电子工业大学出版社,1998.

[5]李有才.《单片机课程设计纲要》.电子科技大学出版社,2003.

 

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

当前位置:首页 > 初中教育 > 政史地

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

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