⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 time.asm

📁 电子钟:简单实用51单片机程序 电子钟:简单实用51单片机程序
💻 ASM
字号:
;****************************************************************
;*  24小时制式,前面四位数码管分别显示小时值和分钟值            *
;*  发光二极管用来表示秒钟十位值,第五位数码管显示秒钟的个位值  *
;*  秒钟的读数方法是:发光二极管的点亮个数 + 第五位数码管显示值 *
;*  如发光二极管亮3个,第五位数码管显示6,表示当前秒钟值为36妙  *
;*  调整时间使用K1~K4,K1、K2调整小时值,K3、K4调整分钟值      *
;*  按键功能 K1:小时"+"  K2:小时"-"  K3:分钟"+"  K4:分钟"-" *
;****************************************************************

	ORG	0000H
	LJMP	START		;转初始化

	ORG	000BH
	LJMP	PGT0		;T0中断入口

	ORG	0033H

START:
	DIS1	EQU	30H
	DIS2	EQU	31H
	DIS3	EQU	32H
	DIS4	EQU	33H
	DIS5	EQU	34H
	DIS6	EQU	35H

	DISXS	EQU	36H
	DISFZ	EQU	37H
	DISMZ	EQU	38H
	MS500	EQU	39H

	K1	BIT	P3.2
	K2	BIT	P3.3
	K3	BIT	P3.4
	K4	BIT	P3.5
	BDP	BIT	01H

	MOV	SP,#50H		;初始化程序
	MOV	P0,#0FFH
	MOV	P1,#0FFH
	MOV	P2,#0FFH
	MOV	P3,#0FFH
	MOV	TMOD,#01H	;定时器T0工作于方式1
	MOV	TH0,#4CH	;定时器初值
	MOV	TL0,#05H
	MOV	IE,#82H
	MOV	R3,#10
	SETB	TR0
	MOV	DIS1,#00H	;清显示缓冲区
	MOV	DIS2,#00H
	MOV	DIS3,#00H
	MOV	DIS4,#00H
	MOV	DIS5,#00H
	MOV	DISXS,#12	;初始化时间为12:00:00
	MOV	DISFZ,#0
	MOV	DISMZ,#0
	MOV	MS500,#0

MAIN:				;主程序
	MOV	A,DISFZ
	CJNE	A,#60,BJ0
	SJMP	SK1
BJ0:	JC	SK1
	MOV	DISFZ,#00H

SK1:	JB	K1,SK2		;按键K1检测
	ACALL	YS10MS
	JB	K1,SK2
	ACALL	SOUND
K1DD:	JNB	K1,K1DD
	INC	DISXS
	MOV	DISMZ,#00H
	MOV	A,DISXS
	CJNE	A,#24,BJ1
	MOV	DISXS,#00H
	SJMP	SEND
BJ1:	JC	SEND
	MOV	DISXS,#00H
	SJMP	SEND

SK2:	JB	K2,SK3		;按键K2检测
	ACALL	YS10MS
	JB	K2,SK3
	ACALL	SOUND
K2DD:	JNB	K2,K2DD
	MOV	DISMZ,#00H
	MOV	A,DISXS
	CJNE	A,#00,BJ2
	MOV	DISXS,#23
	SJMP	SEND
BJ2:	DEC	DISXS
	SJMP	SEND

SK3:	JB	K3,SK4		;按键K3检测
	ACALL	YS10MS
	JB	K3,SK4
	ACALL	SOUND
K3DD:	JNB	K3,K3DD
	MOV	DISMZ,#00H
	INC	DISFZ
	MOV	A,DISFZ
	CJNE	A,#60,BJ3
	MOV	DISFZ,#00H
	SJMP	SEND
BJ3:	JC	SEND
	MOV	DISFZ,#00H
	SJMP	SEND

SK4:	JB	K4,SEND		;按键K4检测
	ACALL	YS10MS
	JB	K4,SEND
	ACALL	SOUND
K4DD:	JNB	K1,K4DD
	MOV	DISMZ,#00H
	MOV	A,DISFZ
	CJNE	A,#00,BJ4
	MOV	DISFZ,#59
	SJMP	SEND
BJ4:	DEC	DISFZ
	SJMP	SEND

SEND:	MOV 	A,DISMZ       	;处理当前秒数据
      	MOV 	B,#10
      	DIV 	AB          	;10进制转换
      	MOV 	DIS5,A      	;得到十秒值
      	MOV 	DIS6,B      	;得到秒值
      	CJNE	A,#00,TST1
      	MOV	P1,#0FFH
      	AJMP	TST
TST1:  	CJNE	A,#01,TST2	;将十秒值用P1口的发光二极管来显示
      	MOV	P1,#11111110B
      	AJMP	TST
TST2:  	CJNE	A,#02,TST3
      	MOV	P1,#11111100B
      	AJMP	TST
TST3:  	CJNE	A,#03,TST4
      	MOV	P1,#11111000B
      	AJMP	TST
TST4:  	CJNE	A,#04,TST5
      	MOV	P1,#11110000B
      	AJMP	TST
TST5:  	CJNE	A,#05,TST
      	MOV	P1,#11100000B
TST:   	MOV 	A,DISFZ
      	MOV 	B,#10
      	DIV 	AB          	;转换当前分钟数据
      	MOV 	DIS3,A      	;得到十分值
      	MOV 	DIS4,B      	;得到分值

      	MOV 	A,DISXS
      	MOV 	B,#10
      	DIV 	AB          	;转换当前小时数据
      	MOV 	DIS1,A      	;得到十小时值
      	MOV 	DIS2,B      	;得到小时值

	CLR	P2.6		;允许数码管显示

	MOV	A,DIS1		;显示十小时值
	MOV	DPTR,#SGTB
	MOVC	A,@A+DPTR
	MOV	P0,A
	CLR	P2.0
	SETB	P2.1
	SETB	P2.2
	SETB	P2.3
	SETB	P2.4
	LCALL	DELAY

	MOV	A,DIS2		;显示小时值
	MOV	DPTR,#SGTB
	MOVC	A,@A+DPTR

	JB	BDP,DP1
	ANL	A,#01111111B
DP1:	MOV	P0,A
	SETB	P2.0
	CLR	P2.1
	SETB	P2.2
	SETB	P2.3
	SETB	P2.4
	LCALL	DELAY

	MOV	A,DIS3		;显示十分钟值
	MOV	DPTR,#SGTB
	MOVC	A,@A+DPTR
	MOV	P0,A
	SETB	P2.0
	SETB	P2.1
	CLR	P2.2
	SETB	P2.3
	SETB	P2.4
	LCALL	DELAY

	MOV	A,DIS4		;显示分钟值
	MOV	DPTR,#SGTB
	MOVC	A,@A+DPTR
	JB	BDP,DP2
	ANL	A,#01111111B
DP2:	MOV	P0,A
	SETB	P2.0
	SETB	P2.1
	SETB	P2.2
	CLR	P2.3
	SETB	P2.4
	LCALL	DELAY

;----- 十秒值已经用发光二极管来表示,第五位数码管显示的是秒值 -------

	MOV	A,DIS6		;显示秒值
	MOV	DPTR,#SGTB1
	MOVC	A,@A+DPTR
	MOV	P0,A
	SETB	P2.0
	SETB	P2.1
	SETB	P2.2
	SETB	P2.3
	CLR	P2.4
	LCALL	DELAY

	AJMP	MAIN		;循环

PGT0:	PUSH	ACC		;定时器T0中断处理程序
	MOV	TH0,#4CH	;50MS
	MOV	TL0,#05H
	DJNZ	R3,T0RET
	MOV	R3,#10

	CPL	BDP

	INC	MS500
	MOV	A,MS500
	CJNE	A,#2,T0RET
	MOV	MS500,#00H

	INC 	DISMZ
	MOV 	A,DISMZ
	CJNE 	A,#60,T0RET
	MOV 	DISMZ,#00H

	INC 	DISFZ
	MOV 	A,DISFZ
	CJNE 	A,#60,T0RET
	MOV 	DISFZ,#00H

	INC 	DISXS
	MOV 	A,DISXS
	CJNE 	A,#24,T0RET
	MOV 	DISXS,#00H

T0RET:	POP	ACC
	RETI

;************* 8位共阳数码管字型表 *****************
SGTB:	DB	0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
	DB	88H,83H,0C6H,0A1H,86H,8EH,89H,0A3H,8CH,0C8H

sgtb1:  db      24h,7dh,0e0h,70h,39h,32h,22h,7ch,20h,30h,28h,23h,0a6h,61h,0a2h,0aah
;********  延时子程序  ********
DELAY:	MOV	R1,#2
Y1:	MOV	R2,#200
	DJNZ	R2,$
	DJNZ	R1,Y1
	RET

;********** 10ms延时程序 ***********
YS10MS:	MOV	R7,#128
DL1:	MOV	R6,#0FFH
DL0:	DJNZ	R6,DL0
	DJNZ	R7,DL1
	RET

;******* 音效子程序 *******
SOUND:	MOV	R7,#228
SDL1:	CPL	P3.7
	MOV	R6,#0FFH
SDL0:	DJNZ	R6,SDL0
	DJNZ	R7,SDL1
	RET

	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -