电子钟.docx

上传人:b****4 文档编号:11867181 上传时间:2023-04-06 格式:DOCX 页数:21 大小:314.36KB
下载 相关 举报
电子钟.docx_第1页
第1页 / 共21页
电子钟.docx_第2页
第2页 / 共21页
电子钟.docx_第3页
第3页 / 共21页
电子钟.docx_第4页
第4页 / 共21页
电子钟.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

电子钟.docx

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

电子钟.docx

电子钟

 

单片机技术课程设计说明书

数字电子钟

系、部:

电气与信息工程系

学生姓名:

指导教师:

职称讲师

专业:

电子信息工程

班级:

完成时间:

学号:

摘要

数字电子钟广泛应用于生活生产中,对其深入了解很有必要,在此用单片机设计了一个简单的数字电子钟。

本设计为基于AT89S52单片机,辅以必要的外围电路,用自制单片机实验板设计了一个简单的数字电子时钟。

在硬件方面,除了单片机外,用数码管来进行显示,LED采用动态扫描显示。

通过LED能够比较准确显示时、分、秒,四个简单的按键实现对时间的调整。

软件方面采用A51汇编语言编程。

整个电子钟系统能完成时间的显示,调时,调分,调秒,复位功能。

本次设计的电子钟采用独立式键盘,用共阳数码管显示,因为LED亮度较高,显示醒目所以此电子钟在部分场所推广很大。

关键词数字电子钟、AT89S52、汇编语言

1课题设计任务、功能要求及总体方案

 

1.1课题设计任务

本课程设计选题目为:

数字电子钟。

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

1.2功能要求

设计的数字电子钟上电或按键复位后能自动显示系统提示符“P.”,进入时钟准备状态;第一次按数字电子钟启动,数字电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按数字电子钟调整键,则数字电子钟进入时钟调整状态,并且时间停止不动(闪烁状态),此时可分别利用各调整键调整时、分、秒,调整结束后可按调整键再次进入时钟运行状态。

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

本课程设计采用AT89S52单片机设计一个数字电子钟,通过两个4位LED数码管显示时、分、秒,并设有9个按键。

其中一个用于单片机的复位;一个为启动键,一个为调整键;还有两个分别为加,减键;其他键本课题暂不用。

电路分为5部分,分别为复位电路、键盘电路、时钟电路、显示电路和控制电路。

复位电路采用按键复位方式。

键盘电路采用独立式键盘。

时钟电路用12MHz的晶振产生时钟信号。

显示电路采用8个三极管驱动两个4位LED显示。

控制电路采用8位的AT89S52单片机作为CPU;原理是:

时钟用T0为时钟秒加1中断,时间常数位10MS,每100次加1S,T0用为时间加1中断。

其设计框图如图1.1所示:

 

图1.1设计方案框图

2数字电子钟硬件系统的设计

 

2.1硬件系统各模块功能简要介绍

2.1.1复位电路

复位是单片机的硬件初始化操作。

经复位操作后,单片机系统才能开始正常工作。

单片机上有复位引脚RST,用于外接复位电路,这里复位电路采用按键电平复位。

2.1.2时钟电路

单片机工作所需的同步时钟信号由以下两种方法获得:

由单片机片内时钟电路结合外部晶振、电容产生和直接从单片机外部引入脉冲信号。

这里用第一种方法产生时钟信号。

电路用12MHz的石英晶体和二个微调电容(为33pF)连接起来接到单片机的XTAL1和XTAL2引脚上。

2.1.3键盘电路

由于按键较少,所以此处使用独立式键盘,键盘接到单片机的P1口上,当键按下时,在其相应的口线上产生低电平信号,键松开时仍为高电平信号。

2.1.4显示电路

本显示电路采用三极管驱动两个4位数码管段位控端;用单片机的P2口控制位控;用单片机的P0口线作段控口,位、段控线上都串入470Ω的限流电阻。

 

3数字电子钟软件系统的设计

 

3.1数字电子钟使用单片机资源情况

在电子钟的编程过程中,单片机资源使用情况如下:

⑴寄存器:

通用寄存器的R0~R7;

⑵位地址:

20H(用于保存启动/调整键盘当前的状态);

⑶IO口线:

P0口(段控口),P2口(位控口),P1口(作键盘接口);

⑷堆栈栈底单元地址:

60H;

⑸定时器:

定时器0,定时器1,定时器2;

⑹显示缓冲单元:

40H~47H;

⑺秒分时对应储存单元:

32H~33H

⑻生成键码出口地址:

20H。

3.2数字电子钟软件系统各模块功能简要介绍

3.2.1显示模块

此处将显示程序编成一个子程序,要显示时调用显示子程序即可,显示程序中显示的是缓冲区中的内容再调数据表格中显示代码,程序中只要将要显示的内容在数据表中的位置送往显示缓冲区即可,就可以显示你所需要显示的内容。

3.2.2中断服务程序模块

程序中用了个定时器中断,所以有中断服务程序,是为了使秒自加而使用定时器中断,定时10MS循环100次到一秒以后,向CPU申请中断,使秒自加1。

秒满60秒分加1,分满60分时加1,时满24则显示全为0

3.2.3键盘模块

运用直接判断IO口线的方法编成键盘扫描程序,来完成用键盘监控程序的功能,总共用了四个键,分别为P1.0,P1.1,P1.2,P1.3其具体的功能P1.0:

时间调整;P1.1:

时间加;P1.2为时间减;P1.3为启动键。

使用键盘能够很准确的、快速的监控系统。

3.3系统软件程序流程框图

 

3.3.1主程序流程框图

主程序流程框图如图3.1所示:

 

图3.1主程序流程图

3.3.2中断服务程序流程框图

中断服务程序流程图如图3.2所示:

 

图3.2中断服务程序流程图

3.3.3加1子程序流程框图

加1子程序流程框图如图3.3所示:

 

图3.3加1子程序流程图

3.3.4减1子程序流程框图

加1子程序流程框图如图3.4所示:

 

 

图3.4减1子程序流程图

3.3.5键扫描子程序流程图框图

键扫描子程序流程图框图如图3.5

 

图3.5键扫子程序流程图

3.3.6显示子程序流程图框图

显示子程序流程图框图如图3.6

 

图3.6显示子程序流程图

3.4数字电子钟软件系统程序清单

程序清单详见附录A

 

4仿真与误差分析

 

4.1数字电子钟的设计结论及使用说明

本课程设计的目的是设计一个电子钟,通过原理图的绘制,PCB板的制作,最终做出的实物是成功的,能够达到预期的目的,以下本次所作电子钟的具体的使用说明:

电子钟上电后,最高位显示P.,按下启动,电子钟从0时0分0秒开始自动运行,再次按下调整键,电子钟运行停止,处于调整状态,按下加减键,可以实现时、分、秒加键1,这样可以实现时、分、秒的累加调整,再次按下调整键,电子钟自动运行起来,处于运行状态,调整结束。

4.2设计课题的仿真结果

如图4.1、4.2所示:

 

图4.1显示P.仿真结果

 

图4.2运行仿真结果

4.3设计课题的误差分析

本课程设计存在一定误差,引起误差原因主要是程序中定时后很多指令引起的时间误差。

经过测试10小时,时钟慢25秒,则每秒钟慢2.5/3600=0.6944MS,

因此每次需要中断的时间要比标准的中断时间要慢0.6944/20=0.03472MS.TH0TL0=65536-[(50-0.03472)*1000]/1=15570=3CD2H,所以将原来的初值改为TH0TL0=3CB0H改为TH0TL0=3CD2H。

4.4设计体会

本次做课程设计,从硬件方面说,我认为本次设计的重点在于单片机的最小系统,若单片机的最小系统不能正常工作,那后面一切都免谈;从软件方面说,我编程的思路就是从简单到难,一步一步实现各个功能。

这个电子钟的程序重点在于调整键功能程序和中断服务程序的编写,这两个小模块编好了,就很容易了。

在做课程设计的过程中,学到很多东西,比如说做PCB板的技术有了很大的提高,再比如说,自己通过编电子钟的程序,使自己对汇编指令的应用越来越熟练,编程的能力也有了较大提高。

在制作电子钟的过程中,遇到的问题都能尝试去自己解决,比如说调试程序,检查线路等等,使自己发现问题、解决问题的能力大大提高。

4.5教学建议

通过一个学期的单片机课,使我对单片机有了基本的了解。

在这里我只是觉得我们的动手能力还很欠缺,还得增加实践、提高动手能力。

为以后实际工作打下基础。

 

参考文献

 

[1]李广第,朱月秀,冷祖祁.单片机基础[M].第三版.北京:

航空航天大学出版社,2007.18-152

LiGuangdi,ZhuYuexiu,LengZuqi.Scmcbasis[M].Thethirdedition.Beijing:

Aerospaceuniversitypress,2007.18-152

[2]邱丽芳,彭志刚,胡汉辉.单片机原理与应用.第二版.北京:

人民邮电出版社,2009.7-259

QiuLifang,PengZhigang,HuHanhui.Single-chipmicrocomputerprincipleandapplication.Thesecondedition.Beijing:

Beijingpeople'stelephoneandpostalpress,2009.7-259

[3]夏宽理.程序设计[M].上海:

复旦大学出版社,2000.7.26~44

XiaKuangli.Programming[M].Shanghai:

FudanUniversityPress,2000.7.26~44

 

致谢

 

在本课程设计进行过程中得到吴老师的悉心指导,还有很多同学的帮助。

吴老师严谨求实的治学态度,踏实坚韧的工作精神,将使我终生受益。

在此,谨向老师和帮助我的同学致以诚挚的谢意和崇高的敬意。

附录

 

附录A

程序清单:

*************************************************************

;项目名称:

数字电子钟

;设计者:

刘金伟

;设计日期:

2010年12月28日

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

;堆栈栈底60H;

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

;DATA_CHANGE:

时间数据转换子程序(时间刷新)

;KEY_SET:

键设定子程序(K1-加键K2-减键)

;TIME_SET:

时间设定子程序(K4-时间调整键)

;TIMER0:

定时器0中断服务程序(负责计时)

;TIMER1:

定时器1中断服务程序(负责时间调整时闪烁)

;TIMER2:

定时器2中断服务程序(负责数码管显示)

;BEEP_BL:

蜂鸣器驱动子程序

;DELAY:

延时R5*10MS子程序(负责消抖)

;TABLE(共阳数码管字型代码表)

;Tabl(位控代码表)

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

;*K4-选择键K1-加键K2-减键K3-开始键

;*K4:

P1.0K1:

P1.1K2:

P1.2K3:

P1.3

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

HOUREQU31H;时存放单元

MINEQU32H;分存放单元

SECEQU33H;秒存放单元

MSECEQU34H;10MS计数值存放单元

NUMBERSEQU36H;TIMER1中断计数单元

COUNTEQU37H;设定值临时存放单元

MAX_NUMEQU38H;时间最大值存放单元

DISPLAYEQU40H;时间显示缓存单元

FLASHBIT20H.1;闪烁标志位

SEC_SBIT20H.2;设定秒标志位

MIN_SBIT20H.3;设定分标志位

HOUR_SBIT20H.4;设定时标志位

K1BITP1.1;健定义端口

K2BITP1.2

K3BITP1.3

K4BITP1.0

BEEPBITP3.1;蜂鸣器

ORG0000H

AJMPMAIN

ORG000BH;定时器0的中断向量地址

LJMPTIMER0

ORG001BH;定时器1的中断向量地址

LJMPTIMER1

ORG002BH;定时器1的中断向量地址

LJMPTIMER2

ORG0050H

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

MAIN:

MOVSP,#60H;设置堆栈指针

MOVP0,#0FFH;端口初始化

MOVP2,#0FFH

MOVSEC,#00;预置时间

MOVMIN,#00

MOVHOUR,#00

CLRHOUR_S

CLRMIN_S

CLRSEC_S

CLRFLASH

MOVR0,#DISPLAY;获得显示单元首地址

MOVR1,#0FEH;位码初值

MOVR2,#00H;计数单元清零

MOVTMOD,#11H;工作于方式1

MOVTH0,#0DCH;10ms定时常数

MOVTL0,#00H

MOVTH1,#4CH;50ms定时常数

MOVTL1,#00H

MOVT2CON,#00H;设置T2CON寄存器

MOVTH2,#0FCH;1ms定时常数

MOVTL2,#66H

SETBET0;允许定时/计数器0中断

SETBET1;允许定时/计数器1中断

SETBET2;允许定时/计数器2中断

SETBEA;开总中断

SETBTR2

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

;P.显示设定程序

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

LOOP0:

MOV40H,#0BH

MOV41H,#0BH

MOV42H,#0BH

MOV43H,#0BH

MOV44H,#0BH

MOV45H,#0BH

MOV46H,#0BH

MOV47H,#0CH

JNBP1.3,LOOP1

LJMPLOOP0

LOOP1:

MOV40H,#00H

MOV41H,#00H

MOV42H,#00H

MOV43H,#00H

MOV44H,#00H

MOV45H,#00H

MOV46H,#00H

MOV47H,#00H

SETBTR0

CLRTR1

LOOP:

ACALLDATA_CHANGE;时间数据转换

ACALLTIME_SET

AJMPLOOP

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

;时间数据转换子程序

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

DATA_CHANGE:

MOVC,SEC_S

ANLC,FLASH

JCS_BLANK;C=1,转移

MOVA,SEC;秒单元数据处理

MOVB,#10

DIVAB

MOVDISPLAY+1,A;秒十位

MOVDISPLAY,B;秒个位

AJMPD_CH1

S_BLANK:

MOVDISPLAY+1,#0BH;秒熄灭

MOVDISPLAY,#0BH

D_CH1:

MOVDISPLAY+2,#0AH;显示“-”

MOVC,MIN_S

ANLC,FLASH

JCM_BLANK;C=1,转移

MOVA,MIN;分单元数据处理

MOVB,#10

DIVAB

MOVDISPLAY+4,A;分十位

MOVDISPLAY+3,B;分个位

AJMPD_CH2

M_BLANK:

MOVDISPLAY+4,#0BH;分熄灭

MOVDISPLAY+3,#0BH

D_CH2:

MOVDISPLAY+5,#0AH;显示“-”

MOVC,HOUR_S

ANLC,FLASH

JCH_BLANK;C=1,转移

MOVA,HOUR;时单元数据处理

MOVB,#10

DIVAB

MOVDISPLAY+7,A;时十位

MOVDISPLAY+6,B;时个位

AJMPD_END

H_BLANK:

MOVDISPLAY+7,#0BH;时熄灭

MOVDISPLAY+6,#0BH

D_END:

RET

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

;键设定子函数

;K1-加键K2-减键

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

KEY_SET:

JBK1,K2_SET;加键

MOVR5,#2;延时20ms

ACALLDELAY

JBK1,K2_SET;第二次判断

ACALLBEEP_BL

MOVA,COUNT

CJNEA,MAX_NUM,SET_U;是否达到最大值

MOVCOUNT,#00H

AJMPKEY_SET_END

SET_U:

INCCOUNT;设定值加1

K2_SET:

JBK2,KEY_SET_END;减键

MOVR5,#2;延时20ms

ACALLDELAY

JBK2,KEY_SET_END;第二次判断

ACALLBEEP_BL

MOVA,COUNT

CJNEA,#00H,SET_D;是否达到最小值

MOVCOUNT,MAX_NUM

AJMPKEY_SET_END

SET_D:

DECCOUNT;设定值减1

KEY_SET_END:

RET

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

;时间设定子函数

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

TIME_SET:

JBK4,T_SET_END

MOVR5,#2

ACALLDELAY

JBK4,T_SET_END

CLRTR0

SETBTR1

MOVCOUNT,HOUR;读取现行时数据

MOVMAX_NUM,#23;时的最大值

SETBHOUR_S;置设定时标志位

ACALLBEEP_BL

H_SET1:

ACALLKEY_SET

MOVHOUR,COUNT;保存时设定值

ACALLDATA_CHANGE

JNBK4,M_SET1

JBHOUR,H_SET1

M_SET1:

MOVCOUNT,MIN;读取现行分数据

MOVMAX_NUM,#59;分的最大值

CLRHOUR_S;清设定时标志位

SETBMIN_S;置设定分标志位

ACALLBEEP_BL

M_SET2:

ACALLKEY_SET

MOVMIN,COUNT;保存分设定值

ACALLDATA_CHANGE

JNBK4,S_SET1

JBMIN_S,M_SET2

S_SET1:

MOVCOUNT,SEC;读取现行秒数据

MOVMAX_NUM,#59;秒的最大值

CLRMIN_S;清设定分标志位

SETBSEC_S;置设定秒标志位

ACALLBEEP_BL

S_SET2:

ACALLKEY_SET

MOVSEC,COUNT;保存秒设定值

ACALLDATA_CHANGE

JNBK4,S_SET3

JBSEC_S,S_SET2

S_SET3:

CLRSEC_S;清设定秒标志位

CLRFLASH;清闪烁标志位

SETBTR0

CLRTR1

ACALLBEEP_BL

T_SET_END:

RET

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

;定时器0的中断服务程序(负责计时)

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

TIMER0:

PUSHACC;入堆栈保护

PUSHPSW

MOVTH0,#0DCH;10ms定时常数

MOVTL0,#00H

INCMSEC;10ms计数值加1

MOVA,MSEC

CJNEA,#100,T_END;10ms×100=1秒

MOVMSEC,#00H;清计数器

INCSEC;秒加1

MOVA,SEC

CJNEA,#60,T_END

MOVSEC,#00H;秒单元清零

INCMIN;分加1

MOVA,MIN

CJNEA,#60,T_END

MOVMIN,#00H;分单元清零

INCHOUR;时加1

MOVA,HOUR

CJNEA,#24,T_END

MOVHOUR,#00H;时单元清零

T_END:

POPPSW;出堆栈

POPACC

RETI

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

;定时器1计时中断子程序

;每隔50MS中断一次

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

TIMER1:

PUSHACC;入堆栈保护

PUSHPSW

MOVTH1,#4CH;50ms定时常数

MOVTL1,#00H

INCNUMBERS

MOVA,NUMBERS

CJNEA,#8,T1_END;400ms

MOVNUMBERS,#0

CPLFLASH;闪烁标志取反

T1_END:

POPPSW;出堆栈

POPACC

RETI

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

;定时器2中断子程序(负责数码管显示)

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

TIMER2:

PUSHACC;入堆栈保护

PUSHPSW

CLRTF2;清中断标志

MOVTH2,#0FCH;1ms定时常数

MOVTL2,#66H

MOVA,R2

CJNEA,#08H,T2_CH1;判扫描次数

T2_CH1:

J

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

当前位置:首页 > 医药卫生 > 临床医学

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

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