单片机课程设计电子时钟 2.docx

上传人:b****6 文档编号:3713664 上传时间:2022-11-24 格式:DOCX 页数:28 大小:47.11KB
下载 相关 举报
单片机课程设计电子时钟 2.docx_第1页
第1页 / 共28页
单片机课程设计电子时钟 2.docx_第2页
第2页 / 共28页
单片机课程设计电子时钟 2.docx_第3页
第3页 / 共28页
单片机课程设计电子时钟 2.docx_第4页
第4页 / 共28页
单片机课程设计电子时钟 2.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

单片机课程设计电子时钟 2.docx

《单片机课程设计电子时钟 2.docx》由会员分享,可在线阅读,更多相关《单片机课程设计电子时钟 2.docx(28页珍藏版)》请在冰豆网上搜索。

单片机课程设计电子时钟 2.docx

单片机课程设计电子时钟2

 

单片机课程设计

-----定时闹铃

 

系别:

电子通信工程系

专业:

应用电子技术

班级:

嵌入式091班

姓名:

黄文钦

学号:

2009080202338

实训地点:

实训时间:

2011年1月10日至1月14日

 

1.概述

1.1系统的作用

本系统是利用STC89C52单片机结合6个七段显示器以24时制“时时分分秒秒”格式显示时间的电子定时闹铃,系统可以设置2组定时闹铃;当定时闹铃时,该电子时钟通过蜂鸣器发出嘀嘀嘀嘀响声;本系统还具有整点报时功能,当现在时间为整点报时。

还有秒表功能,由于该电子定时闹铃有强大功能可以在多种场合下使用,利用七段显示器发光也可以在夜晚和黑暗场合下使用。

1.2系统的功能要求

(1)使用6位七段显示器显示24时制时间。

(2)时间显示格式为“时时分分秒秒”。

(3)定时闹铃功能。

(4)整点报时功能:

当现在时间为整点时响铃。

(5)定时闹铃和现在时间模式可以互相切换而不影响各自功能。

(6)具有4个按键来进行功能设置,可以设置当前时间、闹铃的时间设置和秒表开关设置。

(7)具有秒表计时功能

(8)调时区域闪烁

(9)通过复位按键可以重启系统。

2.系统的硬件设计

2.1系统的电路原理

(1)系统以STC89C52单片机为本电路的核心元件,通过单片机的P0.0~P0.7引脚和A102J排阻加上拉电压来驱动七段显示器段显示数字。

(2)通过单片机的P2.2~P2.7引脚连接A103J排阻拉升电压信号,控制共阴极七段显示器连通接地来循环点亮6位七段显示器。

(3)在七段显示器供电的同时由P0脚驱动显示不同数字。

根据人眼的视觉暂留特点,调整延迟时间使所观察到时间数字是稳定的数字。

(4)系统使用了YXDZ蜂鸣器,通过单片机P3.0引脚连接8550PNP三极管推动发声。

(5)电路通过4个按键连接单片机P1.0~P1.3引脚低电平控制系统功能设置。

(6)单片机的复位电路,采用传统上电复位,通过Reset按键控制。

(7)系统通过一个发光二极管指示电路供电是或正常。

2.2电原理图

图1控制电路

2.3各控制按钮控制功能说明

系统接通电源后指示灯LED亮,程序执行后工作,蜂鸣器发出两声响声,七段显示器显示“000000”,表示程序开始执行,然后显示现在时间,按下操作键K1~K4动作如下:

(1)按操作键K1,进入“设置现在时间”模式后,操作键功能如下:

Ø操作键K1:

当前区域加1。

Ø操作键K2:

当前区域减1。

Ø操作键K3:

分、时区域切换。

Ø操作键K4:

设置完成,退出。

(2)按操作键K2,进入“显示、设置闹铃时间”模式后,操作键功能如下:

Ø操作键K1:

当前闹铃区域加1。

Ø操作键K2:

当前闹铃区域减1。

Ø操作键K3:

分、时区域切换

Ø操作键K4:

第一次进入第二组,第二次为退出。

(3)按操作键K3:

进入“秒表”模式后,操作键功能如下:

Ø操作键K1:

启动秒表。

Ø操作键K2:

停止秒表。

Ø操作键K3:

清零。

Ø操作键K4:

退出。

(4)按操作键K4:

在响铃时关闭闹钟自动退出,不是响铃则进入“设置闹铃的开关”模式后,操作键功能如下:

Ø操作键K1:

启动当前闹铃。

Ø操作键K2:

停止当前闹铃。

Ø操作键K3:

切换闹铃组。

Ø操作键K4:

设置完成,退出。

(5)按操作键Reset:

复位键,系统重启。

3.软件设计

3.1资源分配表和程序流程图

表一程序内存资源分配表

内存地址

变量名称

作用说明

20H

存放50毫秒计时

21H

存放0.5秒计时

22H

SECON

存放1秒计时

23H

MIN

存放1分计时

24H

HOUR

存放1小时计时

25H

用于中断1(#6H)

26H

用于显示中的闪烁

27H.0

闹钟标志位

27H.1

允许响铃

27H.2

用于标志分、秒(1为秒),闹钟功能时也一样

27H.3

闹钟总开关(1为开)

27H.4

用于闪烁标志

27H.5

用于闪烁

27H.6

秒表标志

27H.7

两组闹钟的标志位,默认值为0

28H-29H

用于保存闪烁时的调时区地址

30H-35H

存放调时区地址

36H

DISP

用于存放要显示的首字(例如秒)

37H-39H

第一组闹钟的时分

40H

SP

栈底

50H-52H

秒表

53H-55H

第二组闹钟的时分

56H

存放闹钟调分地址

57H

存放闹钟调时地址

2AH.0

闹钟组的切换标志(默认值为0)

2AH.1

切换(默认值为0)

2AH.2

闹钟第二组开关(默认值为0)

表二芯片端口资源分配表

芯片端口

变量名称

作用说明

P1.0

K1

操作键K1

P1.1

K2

操作键K2

P1.2

K3

操作键K3

P1.3

K4

操作键K4

P1.7

SPK

压电喇叭控制信号

P0

七段显示器数数字形状控制

P2.2

控制时间小时的十位七段显示器亮灭

P2.3

控制时间小时的个位七段显示器亮灭

P2.4

控制时间分钟的十位七段显示器亮灭

P2.5

控制时间分钟的个位七段显示器亮灭

P2.6

控制时间秒钟的十位七段显示器亮灭

P2.7

控制时间秒钟的个位七段显示器亮灭

P3.0

BELL

蜂鸣器

P3.1

LED半秒闪烁

P3.2

LED显示第一组闹钟是否开启

P3.3

LED显示第二组闹钟是否开启

 

表三寄存器资源分配表

寄存器

作用说明

 

0

R0

存放秒显示地址

R1

显示首址

R2

#06H

R3

#0FEH

R4

#3H

R6、R7

延时初始值

1

R0

用于keyB、C

R5

用于中断

图2主程序控制流程图

初始化定时器

N

Y

Y

进入“设置闹铃的开关”模式

进入“秒表

”模式

Y

进入“显示、设置闹铃时间”模式

进入“设置现在时间”模式

N

N

是否按K4键?

是否按K3键?

是否按K2键?

N

Y

是否按K1键?

扫描显示器更新时间,

启动定时器T0

初始化变量

开始

N

N

N

Y

Y

Y

Y

退出

调时区切换

当前区减1

当前区加1

KEY3

KEY2

KEY4

KEY1

更新时间显示

设置现在时间

N

切换二组闹铃

第一次

更新显示

N

N

Y

Y

Y

Y

退出

时分切换

当前区减1

当前区加1

KEY3

KEY2

KEY4

KEY1

转换闹铃模式

显示设置闹铃时间

N

N

N

Y

Y

Y

Y

退出

清零

关闭

启动

KEY3

KEY2

KEY4

KEY1

秒表显示

秒表

显示

KEY1

N

N

Y

Y

Y

Y

退出

闹铃组切换

关当前闹铃

开当前闹铃

KEY3

KEY2

KEY4

闹钟正在响

关闭响铃

秒表

N

中断程序T0

置标志位

N

检测闹铃

时变量变0

Y

Y

整点报时

时变量=24

分=0时加1

分变量=60

秒=0分加1

N

Y

Y

Y

清标志位

21H=2

次数到

检查闹铃开、关

响铃

N

N

Y

Y

Y

Y

1

Y

N

0

N

秒变量加1

秒变量=60

标志位

21H加1半秒指示灯闪

累加器入栈

重新载入计数初值、定时器计数10次

计时中断程序开始

计时中断程序结束

将累加器出栈

中断程序T1

1

1

1

0

0

0

分=60

秒=60

中断返回

分变量=0

秒变量=0

分变量加1

毫秒变量=0

秒变量加1

10毫秒单元加1

毫秒=1000

重装初始值

中断返回

1

0

6次

取反闪烁标志

0

1

重装初始值

中断程序1开始

用以闪烁、秒表

标志位

3.2源程序清单

本系统程序清单如下:

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

;8052CLOCKWITHSEGX6CLOCK+2ALARM+TIMER+SW

;时钟+2闹钟+响铃+秒表

;89C52ASMUSE:

Keil

;----------------------------------------------程序功能说明---

;-->K1:

设置现在时间

;-->K1:

当前单元加1

;-->K2:

当前单元减1

;-->K3:

切换单元区

;-->K4:

OK

;-->K2:

显示和设置闹铃时间,2个闹铃

;-->K1:

当前单元加1

;-->K2:

当前单元减1

;-->K3:

切换单元区

;-->K4:

切换闹铃组,第二次为OK

;-->K3:

设置秒表

;-->K1:

秒表启动

;-->K2:

秒表暂停

;-->K2:

秒表清零

;-->K4:

OK

;-->K4:

设置闹铃开关(当真正闹铃时停掉闹钟并退出)

;-->K1:

当前闹铃组开

;-->K2:

当前闹铃组关

;-->K3:

切换闹组

;-->K4:

OK

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

KEY1EQUP1.0;调时间调分再调时

KEY2EQUP1.1

KEY3EQUP1.2

KEY4EQUP1.3

SECONEQU22H;时钟的秒

MINEQU23H

HOUREQU24H

DISPEQU36H;显示的首地址存放

BELLBITP3.0

ORG0000H

LJMPSTART

ORG000BH

LJMPT0_INT

ORG001BH

LJMPT1_INT

ORG0100H

START:

MOV20H,#00H

MOV21H,#00H;0.5秒计时

MOV22H,#00H;1秒计时

MOV23H,#00H;1分计时

MOV24H,#00H;1h计时

MOV38H,#01H;闹钟分

MOV39H,#00H;闹钟时

MOV37H,#101;第一组闹钟的首字节显示"-1"

MOV53H,#102;第二组闹铃的首字节显示”-2“

MOV25H,#6H;中断1,50ms*6=0.3s闪烁一次

MOVTMOD,#11H

MOVTL1,#0B0H

MOVTH1,#3CH

MOVTL0,#0B0H

MOVTH0,#3CH

SETBET0

SETBET1

SETBEA

SETBTR0

MOVSP,#40H

;*********主程序*********

MAIN:

MOVDISP,#SECON

LCALLDISPLAY

LCALLKEYA

LCALLKEYB

LCALLKEYC

LCALLKEYD

SJMPMAIN

/*数码管显示*/

DISPLAY:

PUSHPSW

MOVPSW,#08H;用第二组寄存器

MOVR0,DISP

MOVR1,#30H

MOVR4,#03H;秒分时

LOOP0:

MOVA,@R0

MOVB,#10

DIVAB

MOV@R1,B

INCR1

MOV@R1,A

INCR0

INCR1

DJNZR4,LOOP0

DISKEY:

MOVR1,#30H;显示缓冲区首址

MOVR2,#06H

MOVR3,#0FEH

CLR27H.5

MOV29H,28H

PLAY:

MOVA,@R1

MOVDPTR,#TABLE

MOVCA,@A+DPTR

;***********闪烁用

JNB27H.4,WEN;在调时时用作熄灭,1为开

MOV26H,A

MOVA,R1

CJNEA,29H,WEN1

JB27H.5,LPPC1

INC29H

SETB27H.5

LPPC1:

CLRA

SJMPWEN

WEN1:

MOVA,26H

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

WEN:

MOVP0,A

MOVP2,R3

INCR1

LCALLDELAY

MOVA,R3

RLA

MOVR3,A

DJNZR2,PLAY

POPPSW

RET

DELAY:

MOVR6,#4

D1:

MOVR7,#250

D0:

DJNZR7,D0

DJNZR6,D1

RET

TABLE:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H

/*中断T0处理*/

T0_INT:

MOVTL0,#0B0H

MOVTH0,#3CH

PUSHACC

INC20H

MOVA,20H

CJNEA,#10,EXIT

JNB27H.3,LQQ1

SJMPLQQ2

LQQ1:

JNB2AH.2,LP0

LQQ2:

JNB27H.1,LP0;闹铃检查1响

CPLBELL

DJNZR5,LP0;响铃次数

SETBBELL

CLR27H.1

LP0:

MOV20H,#00H

CPLP3.1;半秒led闪烁

INC21H

MOVA,21H

CJNEA,#2,EXIT

SETBBELL;关闭整点报时

MOV21H,#00H

INCSECON

MOVA,SECON

CJNEA,#60,EXIT

SETB27H.0;闹钟检查标志

MOVSECON,#00H

INCMIN

MOVA,MIN

CJNEA,#60,EXIT

CPLBELL;整点报时启动

MOVMIN,#00H

INCHOUR

MOVA,HOUR

CJNEA,#24,EXIT

MOVHOUR,#00H

EXIT:

JNB27H.3,EXITQ;闹铃1组开关1为开

JNB27H.0,EXITQ;闹钟检查

MOVA,MIN

CJNEA,38H,EXITQ

MOVA,HOUR

CJNEA,39H,EXITQ

SETB27H.1

MOVR5,#120

EXITQ:

JNB2AH.2,EXIT1

JNB27H.0,EXIT1

CLR27H.0

MOVA,MIN

CJNEA,54H,EXIT1

MOVA,HOUR

CJNEA,55H,EXIT1

SETB27H.1

MOVR5,#120

EXIT1:

POPACC

RETI

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

;*********KEY1********

KEYA:

JBKEY1,LOOP1

LCALLDISPLAY

LCALLDISPLAY

JBKEY1,LOOP1

JNBKEY1,$

CLRTR0

MOV28H,#32H;从分闪烁

SETBTR1

MOVSECON,#0H

SETB27H.2

MOVR0,#MIN

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

LCP0:

LCALLDISPLAY

JBKEY3,LCP1

LCALLDISPLAY

LCALLDISPLAY

JNBKEY3,$

CPL27H.2

JB27H.2,LP1

MOVR0,#HOUR

MOV28H,#34H

SJMPLCP1

LP1:

MOVR0,#MIN

MOV28H,#32H

LCP1:

JBKEY1,LCP2

LCALLDISPLAY

LCALLDISPLAY

JBKEY1,LCP2

JNBKEY1,$

LCALLADD1

LCP2:

JBKEY2,LCP5

LCALLDISPLAY

LCALLDISPLAY

JBKEY2,LCP5

JNBKEY2,$

LCALLDEC1

LCP5:

JBKEY4,LCP0

LCALLDISPLAY

JBKEY4,LCP0

JNBKEY4,$

LCALLDISPLAY

JNBKEY4,$

SETBTR0

CLRTR1;退出闪烁

CLR27H.4;闪烁的标志还原

LOOP1:

RET

;***********KEY2*********

KEYB:

JBKEY2,LOOP1

LCALLDISPLAY

LCALLDISPLAY

JBKEY2,LOOP1

JNBKEY2,$

LCALLDISPLAY

JNBKEY2,$

SETBTR1

CLR2AH.0;闹钟组的切换

MOV28H,#32H;闪烁单元默认为份

CLR27H.7;闹钟组0为1组

MOVDISP,#37H;默认显示第一组闹铃时间

SETB27H.2;为1时调分

MOV56H,#38H

MOV57H,#39H

MOVR0,#38H

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

QQ1:

LCALLDISPLAY;闹钟的主要显示

JBKEY3,QQ2

LCALLDISPLAY

LCALLDISPLAY

JNBKEY3,$

CPL27H.2

JB27H.2,LQ1

MOVR0,57H

MOV28H,#34H

SJMPQQ2

LQ1:

MOVR0,56H

MOV28H,#32H

;***********加1

QQ2:

JBKEY1,QQ3

LCALLDISPLAY

LCALLDISPLAY

JBKEY1,QQ3

JNBKEY1,$

LCALLADD1

;***********减1

QQ3:

JBKEY2,QQ4

LCALLDISPLAY

LCALLDISPLAY

JBKEY2,QQ4

JNBKEY2,$

LCALLDEC1

QQ4:

JBKEY4,QQ1

LCALLDISPLAY

JBKEY4,QQ1

JNBKEY4,$

LCALLDISPLAY

JNBKEY4,$

MOVDISP,#53H

MOV56H,#54H

MOV57H,#55H

MOVR0,56H

CPL2AH.0

JB2AH.0,QQ1

MOVDISP,#SECON

CLR27H.4;退出闪烁

CLRTR1

LPP1:

RET

;*********KEY3***********秒表

KEYC:

JBKEY3,QIN

LCALLDISPLAY

LCALLDISPLAY

JBKEY3,QIN

MOVDISP,#50H

SETB27H.6

QIN4:

LCALLDISPLAY

JBKEY1,QIN1

LCALLDISPLAY

JBKEY1,QIN1

JNBKEY1,$

SETBTR1

QIN1:

JBKEY2,QIN2

LCALLDISPLAY

JBKEY2,QIN2

JNBKEY2,$

CLRTR1

QIN2:

JBKEY3,QIN3

LCALLDISPLAY

JBKEY3,QIN3

JNBKEY3,$

MOV50H,#00H

MOV51H,#00H

MOV52H,#00H

QIN3:

JBKEY4,QIN4

LCALLDISPLAY

JBKEY4,QIN4

JNBKEY4,$

CLR27H.6

QIN:

RET

;*********KEY4**********

KEYD:

JBKEY4,WW1

LCALLDISPLAY

LCALLDISPLAY

JBKEY4,WW1

JNBKEY4,$

JNB27H.3,WW6

CLR27H.3

SETBP3.2

SJMPWW1

WW6:

JNB2AH.2,WW7

CLR2AH.2

SETBP3.3

SJMPWW1

WW7:

CLR2AH.1

MOVDISP,#37H;默认显示第一组闹铃时间

WW2:

LCALLDISPLAY

JBKEY1,WW3

JNBKEY1,$

JB2AH.1,WQQ1

SETB27H.3

CLRP3.2

SJMPWW3

WQQ1:

SETB2AH.2

CLRP3.3

WW3:

JBKEY2,WW4

JNBKEY2,$

JB2AH.1,WQQ2

CLR27H.3

SETBP3.2

SJMPWW4

WQQ2:

CLR2AH.2

SETBP3.3

WW4:

JBKEY3,WW5

LCALLDISPLAY

JNBKEY3,$

CPL2AH.1

JB2AH.1,XXX1

MOVDISP,#37H

SJMPWW5

XXX1:

MOVDISP,#53H

WW5:

JBKEY4,WW2

LCALLDISPLAY

JBKEY4,WW2

JNBKEY4,$

LCALLDISPLAY

JNBKEY4,$

WW1:

RET

 

;********加减子程序******

;*******加1子程序******

ADD1:

JB27H.2,MINU1

CJNE@R0,#23,LCP4

MOV@R0,#0H

SJMPEXIT2

MINU1:

CJNE@R0,#59,LCP4

MOV@R0,#0H

SJMPEXIT2

LCP4:

INC@R0

EXIT2:

RET

/*减1子程序*/

DEC1:

CJNE@R0,#00,LCP3

JB27H.2,MINU2

MOV@R0,#23

SJMPEXIT3

MINU2:

MOV@R0,#60

LCP3:

DEC@R0

EXIT3:

RET

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

T1_INT:

JB27H.6,SECOND;为1时为秒表

MOVTL1,#0B0H

MOVTH1,#3CH

DJNZ25H,EEE

MOV25H,#6

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

当前位置:首页 > 高中教育 > 语文

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

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