基于51单片机电子钟设计
利用如图所示电路,设计一个电子钟,要求如下:
1)显示内容:时-分-秒
2)具有闹铃设定功能、时间调整功能
3)具有按键设置功能
一、显示内容
显示时间:用六位7段数码管
闹铃提示:用8个发光二极管
设置提示:用8个发光二极管
二、按键功能
P3.2——功能设置键;
P3.3——显示区切换键;
P3.4——“+”键;
P3.5——“-”键。
设置提示显示要求:
1)正常显示状态,8个发光二极管全灭;
2)时间调整状态,P1.7亮;
3)闹铃设定状态,P1.7和P1.6亮。
显示时间要求:
1)显示 时-分-秒,分三个显示区。
功能设置键K1是一个多功能键:
按第一次,进入时间调整状态
按第二次,进入闹铃设定状态
按第三次,退出设置状态,时钟正常显示。
备注:其他键在K1退出设置状态时无效。
显示区切换键K2:
在设置状态,用于切换不同的显示区,每按一次,将切换一次。
“+”键K3:在设置状态,用于对相应的显示区数字进行累加,每按一次,数字加1。
“-”键K4:在设置状态,用于对相应的显示区数字进行自减,每按一次,数字减1。 程序:
K1 BIT P3.2
K2 BIT P3.3
K3 BIT P3.4
K4 BIT P3.5
L1 BIT P1.7
L2 BIT P1.6
KEZT EQU 30H
HOUR EQU 31H
MINU EQU 32H
SECO EQU 33H
NHOU EQU 34H
NMIN EQU 35H
K2ZT EQU 36H
TIME EQU 37H
ORG 0000H
AJMP START
ORG 000BH
AJMP DINGSHI
ORG 100H
START: ACALL RESET
LOOP: ACALL KEYSET
ACALL DISPLAY
ACALL ZHISHI
AJMP LOOP
;**************************************
DINGSHI: MOV TH0,#3CH
MOV TL0,#0B0H
INC TIME
MOV A,TIME
CJNE A,#20,DINGEND
MOV TIME,#0
INC SECO
MOV A,SECO
CJNE A,#60,DINGEND
INC MINU
MOV SECO,#0
MOV A,MINU
CJNE A,#60,DINGEND
INC HOUR
MOV MINU,#0
MOV A,HOUR
CJNE A,#24,DINGEND
MOV HOUR,#0
DINGEND: RETI
;****************************************
RESET: MOV TMOD,#01H ;T0工作在方式1,12MHZ
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0
MOV HOUR,#23
MOV MINU,#59
MOV SECO,#58
MOV NHOU,#12
MOV NMIN,#0
MOV KEZT,#0
MOV K2ZT,#0
MOV TIME,#0
CLR F0
;*********************************************
KEYSET:
; 判定K1
SETB K1
JB K1,KK1 ;K1=1 LOOP
CALL DELAY20MS ;软件防抖
JB K1,KK1
KS1: JNB K1,$
CALL DELAY20MS ; 软件防抖
JNB K1,KS1
INC KEZT
SETB F0
MOV A,KEZT
CJNE A,#3,KK1
CLR F0
MOV KEZT,#0
SETB TR0
KK1: JNB F0,KEEND
CLR TR0
ACALL KEYGN
KEEND: RET
;*********************************
KEYGN:
; 判定K2
SETB K2
JB K2,KK2 ;K2=1 LOOP
CALL DELAY20MS ;软件防抖
JB K2,KK2
KS2: JNB K2,$
CALL DELAY20MS ; 软件防抖
JNB K2,KS2
INC K2ZT
MOV A,K2ZT
CJNE A,#3,KK2
MOV K2ZT,#0
; 判定K3
KK2: SETB K3
JB K3,KK3 ;K3=1 LOOP
CALL DELAY20MS ;软件防抖
JB K3,KK3
KS3: JNB K3,$
CALL DELAY20MS ; 软件防抖
JNB K3,KS3
MOV A,KEZT
CJNE A,#1,KSS1
MOV R7,K2ZT
MOV HOUR,#0
KHOU: AJMP KK3
K3S1: CJNE R7,#1,K3S2
INC MINU
MOV R6,MINU
CJNE R6,#60,KMIN
MOV MINU,#0
KMIN: AJMP KK3
K3S2: INC SECO
MOV R6,SECO
CJNE R6,#60,KSEC
MOV SECO,#0
KSEC: AJMP KK3
; 对闹铃设定
KSS1: CJNE A,#2,KK3
MOV R7,K2ZT
CJNE R7,#0,K3SS1
INC NHOU
MOV R6,NHOU
CJNE R6,#24,KNU
MOV NHOU,#0
KNU: AJMP KK3
K3SS1: CJNE R7,#1,KK3
INC NMIN
MOV R6,NMIN
CJNE R6,#60,KK3
MOV NMIN,#0
; 判定K4
KK3: SETB K4
JB K4,KYEND ;K4=1 LOOP
CALL DELAY20MS ;软件防抖
JB K4,KYEND
KS4: JNB K4,$
CALL DELAY20MS ; 软件防抖
JNB K4,KS4
MOV A,KEZT
CJNE A,#1,KSS3
MOV R7,K2ZT
CJNE R7,#0,K4SS1
DEC HOUR
MOV R6,HOUR
CJNE R6,#0FFH,K4HO
MOV HOUR,#23
K4HO: AJMP KYEND
K4SS1: CJNE R7,#1,K4SS2
K4MI: AJMP KYEND
K4SS2: DEC SECO
MOV R6,SECO
CJNE R6,#0FFH,K4SE
MOV SECO,#59
K4SE: AJMP KYEND
; 对闹铃设定
KSS3: CJNE A,#2,KYEND
MOV R7,K2ZT
CJNE R7,#0,K4SSS1
DEC NHOU
MOV R6,NHOU
CJNE R6,#0FFH,K4NH
MOV NHOU,#23
K4NH: AJMP KYEND
K4SSS1: CJNE R7,#1,KYEND
DEC NMIN
MOV R6,NMIN
CJNE R6,#0FFH,KYEND
MOV NMIN,#59
KYEND: RET
;********************************************
ZHISHI:
MOV A,KEZT
CJNE A,#1,LOOP1
CLR L1
SETB L2
AJMP LOOP3
LOOP1: CJNE A,#2,LOOP2
CLR L1
CLR L2
AJMP LOOP3
LOOP2: SETB L1
SETB L2
LOOP3: RET
;********************************************
DISPLAY: ACALL SHUZHUAN
MOV R3,#0
MOV DPTR,#LED_DM
MOV R2,#07FH
JB F0,DI1
MOV R0,#TIM
AJMP DI3
DI1: MOV A,KEZT
CJNE A,#1,DI2
MOV R0,#TIM
MOVC A,@A+DPTR
MOV P0,A
MOV A,R2
RR A
MOV R2,A
ACALL DELAY
INC R0
INC R3
CJNE R3,#6H,DI3
RET
;********************************************
SHUZHUAN: MOV R0,#TIM
MOV A,HOUR
MOV B,#10
DIV AB
MOV @R0,A
INC R0
MOV @R0,B
INC R0
MOV A,MINU
MOV B,#10
DIV AB
MOV @R0,A
INC R0
MOV @R0,B
INC R0
MOV A,SECO
MOV B,#10
DIV AB
MOV @R0,A
INC R0
MOV @R0,B
;***********************
MOV R0,#NTIM
MOV A,NHOU
MOV B,#10
DIV AB
MOV @R0,A
INC R0
MOV @R0,B
INC R0
MOV A,NMIN
MOV B,#10
DIV AB
MOV @R0,A
INC R0
MOV @R0,#0
RET
;*******************************************
DELAY: MOV R7,#20
D1: MOV R6,#200
DJNZ R6,$
DJNZ R7,D1
RET
;********************************************
; 软件防抖程序
DELAY20MS: MOV R7,#100
D21: MOV R6,#100
DJNZ R6,$
DJNZ R7,D21
RET
LED_PX: DB 0feH,0fdH,0fbH,0f7H,0efH,0dfH,0bfH,7fH LED_DM: DB 0c0H,0F9H,0A4H,0B0H,99H;0-4
DB 92H,82H,0F8H,80H,90H;5-9
DB 88H,83H,0C6H,0A1H,86H;A,b,C,d,E
DB 8EH,0FFH,0CH,89H,7FH,0BFH ;F,空格,P,H,.,- END
基于51单片机电子钟设计
利用如图所示电路,设计一个电子钟,要求如下:
1)显示内容:时-分-秒
2)具有闹铃设定功能、时间调整功能
3)具有按键设置功能
一、显示内容
显示时间:用六位7段数码管
闹铃提示:用8个发光二极管
设置提示:用8个发光二极管
二、按键功能
P3.2——功能设置键;
P3.3——显示区切换键;
P3.4——“+”键;
P3.5——“-”键。
设置提示显示要求:
1)正常显示状态,8个发光二极管全灭;
2)时间调整状态,P1.7亮;
3)闹铃设定状态,P1.7和P1.6亮。
显示时间要求:
1)显示 时-分-秒,分三个显示区。
功能设置键K1是一个多功能键:
按第一次,进入时间调整状态
按第二次,进入闹铃设定状态
按第三次,退出设置状态,时钟正常显示。
备注:其他键在K1退出设置状态时无效。
显示区切换键K2:
在设置状态,用于切换不同的显示区,每按一次,将切换一次。
“+”键K3:在设置状态,用于对相应的显示区数字进行累加,每按一次,数字加1。
“-”键K4:在设置状态,用于对相应的显示区数字进行自减,每按一次,数字减1。 程序:
K1 BIT P3.2
K2 BIT P3.3
K3 BIT P3.4
K4 BIT P3.5
L1 BIT P1.7
L2 BIT P1.6
KEZT EQU 30H
HOUR EQU 31H
MINU EQU 32H
SECO EQU 33H
NHOU EQU 34H
NMIN EQU 35H
K2ZT EQU 36H
TIME EQU 37H
ORG 0000H
AJMP START
ORG 000BH
AJMP DINGSHI
ORG 100H
START: ACALL RESET
LOOP: ACALL KEYSET
ACALL DISPLAY
ACALL ZHISHI
AJMP LOOP
;**************************************
DINGSHI: MOV TH0,#3CH
MOV TL0,#0B0H
INC TIME
MOV A,TIME
CJNE A,#20,DINGEND
MOV TIME,#0
INC SECO
MOV A,SECO
CJNE A,#60,DINGEND
INC MINU
MOV SECO,#0
MOV A,MINU
CJNE A,#60,DINGEND
INC HOUR
MOV MINU,#0
MOV A,HOUR
CJNE A,#24,DINGEND
MOV HOUR,#0
DINGEND: RETI
;****************************************
RESET: MOV TMOD,#01H ;T0工作在方式1,12MHZ
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0
MOV HOUR,#23
MOV MINU,#59
MOV SECO,#58
MOV NHOU,#12
MOV NMIN,#0
MOV KEZT,#0
MOV K2ZT,#0
MOV TIME,#0
CLR F0
;*********************************************
KEYSET:
; 判定K1
SETB K1
JB K1,KK1 ;K1=1 LOOP
CALL DELAY20MS ;软件防抖
JB K1,KK1
KS1: JNB K1,$
CALL DELAY20MS ; 软件防抖
JNB K1,KS1
INC KEZT
SETB F0
MOV A,KEZT
CJNE A,#3,KK1
CLR F0
MOV KEZT,#0
SETB TR0
KK1: JNB F0,KEEND
CLR TR0
ACALL KEYGN
KEEND: RET
;*********************************
KEYGN:
; 判定K2
SETB K2
JB K2,KK2 ;K2=1 LOOP
CALL DELAY20MS ;软件防抖
JB K2,KK2
KS2: JNB K2,$
CALL DELAY20MS ; 软件防抖
JNB K2,KS2
INC K2ZT
MOV A,K2ZT
CJNE A,#3,KK2
MOV K2ZT,#0
; 判定K3
KK2: SETB K3
JB K3,KK3 ;K3=1 LOOP
CALL DELAY20MS ;软件防抖
JB K3,KK3
KS3: JNB K3,$
CALL DELAY20MS ; 软件防抖
JNB K3,KS3
MOV A,KEZT
CJNE A,#1,KSS1
MOV R7,K2ZT
MOV HOUR,#0
KHOU: AJMP KK3
K3S1: CJNE R7,#1,K3S2
INC MINU
MOV R6,MINU
CJNE R6,#60,KMIN
MOV MINU,#0
KMIN: AJMP KK3
K3S2: INC SECO
MOV R6,SECO
CJNE R6,#60,KSEC
MOV SECO,#0
KSEC: AJMP KK3
; 对闹铃设定
KSS1: CJNE A,#2,KK3
MOV R7,K2ZT
CJNE R7,#0,K3SS1
INC NHOU
MOV R6,NHOU
CJNE R6,#24,KNU
MOV NHOU,#0
KNU: AJMP KK3
K3SS1: CJNE R7,#1,KK3
INC NMIN
MOV R6,NMIN
CJNE R6,#60,KK3
MOV NMIN,#0
; 判定K4
KK3: SETB K4
JB K4,KYEND ;K4=1 LOOP
CALL DELAY20MS ;软件防抖
JB K4,KYEND
KS4: JNB K4,$
CALL DELAY20MS ; 软件防抖
JNB K4,KS4
MOV A,KEZT
CJNE A,#1,KSS3
MOV R7,K2ZT
CJNE R7,#0,K4SS1
DEC HOUR
MOV R6,HOUR
CJNE R6,#0FFH,K4HO
MOV HOUR,#23
K4HO: AJMP KYEND
K4SS1: CJNE R7,#1,K4SS2
K4MI: AJMP KYEND
K4SS2: DEC SECO
MOV R6,SECO
CJNE R6,#0FFH,K4SE
MOV SECO,#59
K4SE: AJMP KYEND
; 对闹铃设定
KSS3: CJNE A,#2,KYEND
MOV R7,K2ZT
CJNE R7,#0,K4SSS1
DEC NHOU
MOV R6,NHOU
CJNE R6,#0FFH,K4NH
MOV NHOU,#23
K4NH: AJMP KYEND
K4SSS1: CJNE R7,#1,KYEND
DEC NMIN
MOV R6,NMIN
CJNE R6,#0FFH,KYEND
MOV NMIN,#59
KYEND: RET
;********************************************
ZHISHI:
MOV A,KEZT
CJNE A,#1,LOOP1
CLR L1
SETB L2
AJMP LOOP3
LOOP1: CJNE A,#2,LOOP2
CLR L1
CLR L2
AJMP LOOP3
LOOP2: SETB L1
SETB L2
LOOP3: RET
;********************************************
DISPLAY: ACALL SHUZHUAN
MOV R3,#0
MOV DPTR,#LED_DM
MOV R2,#07FH
JB F0,DI1
MOV R0,#TIM
AJMP DI3
DI1: MOV A,KEZT
CJNE A,#1,DI2
MOV R0,#TIM
MOVC A,@A+DPTR
MOV P0,A
MOV A,R2
RR A
MOV R2,A
ACALL DELAY
INC R0
INC R3
CJNE R3,#6H,DI3
RET
;********************************************
SHUZHUAN: MOV R0,#TIM
MOV A,HOUR
MOV B,#10
DIV AB
MOV @R0,A
INC R0
MOV @R0,B
INC R0
MOV A,MINU
MOV B,#10
DIV AB
MOV @R0,A
INC R0
MOV @R0,B
INC R0
MOV A,SECO
MOV B,#10
DIV AB
MOV @R0,A
INC R0
MOV @R0,B
;***********************
MOV R0,#NTIM
MOV A,NHOU
MOV B,#10
DIV AB
MOV @R0,A
INC R0
MOV @R0,B
INC R0
MOV A,NMIN
MOV B,#10
DIV AB
MOV @R0,A
INC R0
MOV @R0,#0
RET
;*******************************************
DELAY: MOV R7,#20
D1: MOV R6,#200
DJNZ R6,$
DJNZ R7,D1
RET
;********************************************
; 软件防抖程序
DELAY20MS: MOV R7,#100
D21: MOV R6,#100
DJNZ R6,$
DJNZ R7,D21
RET
LED_PX: DB 0feH,0fdH,0fbH,0f7H,0efH,0dfH,0bfH,7fH LED_DM: DB 0c0H,0F9H,0A4H,0B0H,99H;0-4
DB 92H,82H,0F8H,80H,90H;5-9
DB 88H,83H,0C6H,0A1H,86H;A,b,C,d,E
DB 8EH,0FFH,0CH,89H,7FH,0BFH ;F,空格,P,H,.,- END