当前位置:文档之家› 单片机课程设计数字时钟

单片机课程设计数字时钟

单片机课程设计数字时钟
单片机课程设计数字时钟

华北电力大学

科技学院

单片机课程设计报告

(20 —20 年度第学期)

题目:电子时钟(LCD)

院系:动力工程系

题目:数字时钟

专业班级:

学号:

姓名:

指导老师:

一、功能

能实现定时、时间的调整(只能加不能减)、闹钟的设定(只能加不能减),当闹钟按键按下就进入闹钟设定,再按下那个键就进入时间显示,并且闹钟响铃时间是10秒钟。

其整个设计的电路图如下:

其中显示的是8个8段LED显示,单片机是80C51,外部晶振是12MHZ,其中和晶振连接的是两个47pF的电容。单片机的p1.0~p1.3作为地址总线起到控制作用,p1.7在电路中用一个灯泡代替,在实际中接喇叭,起到闹钟的作用。P0.0~p0.7作为数据总线,把单片机的信号输入到显示器上,p2.0~p2.7作为单片机的额数据总线,其作用在显示总起到位选的作用,决定8段LED的亮灭。最下面的那个是RESPACK-8排阻,在电路中防止输入到显示的电压很小,是为输出提供电源的装置,配合显示器的显示。

在整个程序中时间的秒、分、时的计数分别存放在20H、21H、22H,闹钟的秒、分、时的计数分别存放在40H、41H、42H。

实现定时闹钟的程序有以下几个部分组成:

二、流程图

1、定时程序(时间的设定)

其程序流程图如下:

3、显示的流程图(因为显示的刚好是8个,所以不要去考虑左移的个数,直接

4、闹钟设定

三、总程序

ORG 0000H

MOV P0,#00H

MOV P2,#00H

MOV SP,#60H

CLR 20H

CLR 21H

CLR 22H

CLR 40H

CLR 41H

CLR 42H

MOV DPTR,#TAB

VV: MOV R6,#1

MM: MOV R5,#4

NN: MOV R4,#100

BB: JNB P1.3,LPP

SJMP LL

LPP: JNB P1.3,LPP0

SETB 30H

AAC: MOV R3,#1

AAB: MOV R2,#4

AAA: MOV R1,#100

CC0: JNB P1.0,CC1 ;判断p1.0是否为按下

SJMP DD0

CC1: JNB P1.0,LPP1 ;判断p1.0是否松开,松开秒钟加1 MOV A,40H

ADD A,#01H

DA A

CJNE A,#60H,CC2

CLR A

CC2: MOV 40H,A

DD0: JNB P1.1,DD1 ;判断p1.1是否按下

SJMP EE0

DD1: JNB P1.1,LPP2 ;判断p1.1是否松开,松开分钟加1 MOV A,41H

ADD A,#01H

DA A

CJNE A,#60H,DD2

CLR A

DD2: MOV 41H,A

EE0: JNB P1.2,EE1 ;判断p1.2是否按下

SJMP HH1

EE1: JNB P1.2,LPP3 ;判断p1.2是否松开,松开时钟加1 MOV A,42H

ADD A,#01H

DA A

CJNE A,#24H,EE2 CLR A

EE2: MOV 42H,A

HH1:LCALL LP

JNB P1.3,LP1

DJNZ R1,CC0

DJNZ R2,AAA

DJNZ R3,AAB

LCALL B2

SJMP AAC

LP1:JNB P1.3,LPP4 LL: CLR 30H

LCALL C0

DJNZ R4,BB

DJNZ R5,NN

DJNZ R6,MM

LCALL B2

SJMP VV

LPP0:LCALL LP

NOP

NOP

NOP

SJMP LPP

LPP1:LCALL LP

NOP

NOP

NOP

SJMP CC1

LPP2:LCALL LP

NOP

NOP

NOP

SJMP DD1

LPP3:LCALL LP

NOP

NOP

NOP

SJMP EE1

LPP4:LCALL LP

NOP

NOP

NOP

SJMP LP1

C0: JNB P1.0,C1 ;判断p1.0是否为按下

SJMP D0

C1: JNB P1.0,LLP ;判断p1.0是否松开,松开秒钟加1

MOV A,20H

ADD A,#01H

DA A

CJNE A,#60H,C2

CLR A

C2: MOV 20H,A

D0: JNB P1.1,D1 ;判断p1.1是否按下

SJMP E0

D1: JNB P1.1,LLP1 ;判断p1.1是否松开,松开分钟加1

MOV A,21H

ADD A,#01H

DA A

CJNE A,#60H,D2

CLR A

D2: MOV 21H,A

E0: JNB P1.2,E1 ;判断p1.2是否按下

AJMP H0

E1: JNB P1.2,LLP2 ;判断p1.2是否松开,松开时钟加1

MOV A,22H

ADD A,#01H

DA A

CJNE A,#24H,E2

CLR A

E2: MOV 22H,A

H0: LCALL LP

RET

LLP: LCALL LP

NOP ;3个空指令是消除松开时执行指令的时间差 NOP

NOP

SJMP C1

LLP1:LCALL LP

NOP

NOP

NOP

SJMP D1

LLP2:LCALL LP

NOP

NOP

NOP

SJMP E1

B2: MOV A,20H ;设置秒钟

ADD A,#01H

DA A

DEC A

CJNE A,#5FH,A1

CLR A

MOV 20H,A

MOV A,21H ;设置分钟

ADD A,#01H

DA A

DEC A

CJNE A,#5FH,A2

CLR A

MOV 21H,A

MOV A,22H ;设置时钟

ADD A,#01H

DA A

MOV 22H,A

CJNE A,#24H,LOOP

CLR A

MOV 22H,A

SJMP LOOP

A1: INC A

MOV 20H,A

SJMP LOOP

A2: INC A

MOV 21H,A

LOOP:DJNZ R0,RR1

SETB P1.7

RR1: MOV A,42H ;比较时钟和闹钟的时间是否相等,相等把XRL A,22H ; p1.7置高电平启动闹钟

CJNE A,#00H,QQ

MOV A,41H

XRL A,21H ; 异或相等为零

CJNE A,#00H,QQ

MOV A,40H

XRL A,20H

CJNE A,#00H,QQ

CLR P1.7

MOV R0,#10

QQ: RET

LP: MOV P2,#01111111B

JNB 30H,WW

MOV A,40H

WW: MOV A,20H ;显示秒钟的个位WW0: MOV B,#10H

DIV AB

MOV 50H,A

MOV A,B

MOVC A,@A+DPTR

MOV P0,A

LCALL DEL

MOV A,P2 ;显示秒钟的十位 RR A

MOV P2,A

MOV A,50H

MOVC A,@A+DPTR

MOV P0,A

LCALL DEL

MOV A,P2 ;显示'-'

RR A

MOV P2,A

MOV P0,#01000000B

LCALL DEL

MOV A,P2 ;显示分钟的个位 RR A

MOV P2,A

JNB 30H,WW1

MOV A,41H

SJMP WW2

WW1: MOV A,21H

WW2: MOV B,#10H

DIV AB

MOV 51H,A

MOV A,B

MOVC A,@A+DPTR

MOV P0,A

LCALL DEL

MOV A,P2 ;显示分钟的十位 RR A

MOV P2,A

MOV A,51H

MOVC A,@A+DPTR

MOV P0,A

LCALL DEL

MOV A,P2 ;显示'-'

RR A

MOV P0,#01000000B

LCALL DEL

MOV A,P2 ;显示时钟的个位

RR A

MOV P2,A

JNB 30H,WW4

MOV A,42H

SJMP WW5

WW4: MOV A,22H

WW5: MOV B,#10H

DIV AB

MOV 52H,A

MOV A,B

MOVC A,@A+DPTR

MOV P0,A

LCALL DEL

MOV A,P2 ;显示时钟的十位

RR A

MOV P2,A

MOV A,52H

MOVC A,@A+DPTR

MOV P0,A

LCALL DEL

RET

DEL: MOV R7,#150 ;显示延迟150us

DJNZ R7,$

RET

TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

END

总结

在整个设计中我们学到了在显示程序中的一些方法,比如说怎么实现动态显示,开始的时候总是显示不了,在经过把位选放慢就可以知道自己在设计程序中先显示后右移,所以没有显示的余光,使得显示出现异常。在经过先右移后显示的情况下动态能够正常显示。还有在设定闹钟的时候经常出现到了闹钟的设定时间不跳转,在经过在闹钟的设定的同时还要进行时间的调用,使得这次程序使用的都是程序的调用,把闹钟的设定看作一个主程序,就相当于p1.3按下之后进入闹钟的设定和显示,之后一直在查询p1.3再一次的按下,如果没有按下就一直查询是否有在调整闹钟。若再一次按下p1.3就进入时间的设置和显示。在显示中要设定一个参考量来决定是显示时间还是闹钟,我们在程序中用(30H)的数来作为参考量,如果是“1”则显示闹钟((40H)、(41H)、(42H))里面的数,如果是“0”则显示时间((20H)、(21H)、(22H))里面的数。总的来说通过这次课程设计我们学到了如何去编写时间程序、闹钟的设定程序、显示程序。

相关主题
文本预览
相关文档 最新文档