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

📄 text1.asm

📁 数字钟报告,大家使用
💻 ASM
字号:
;----------------------------------------------------
; PCL.ASM  8051 CLOCK WITH  SEG X 4 CLOCK+ALARM+BZ
; 8051 ASM USE: KEIL
; COPYRIGHT CMY	2003
;----------------------------------------------
; K1 : ADJ TIME  K2:HOUR  K3:MIN  K4: OK
; K2 : SEE ALARM
; K3 : SET ALARM
; K4 : ALARM ON/OFF
;----------------------------------------------
; 5 mS isr
; MOV TL0,#(8192-5000).MOD.32
; MOV TH0,#(8192-5000)/32
LO	EQU 33;24
HI	EQU 99;99

;*******************************************************
CO	EQU 200 ; ADJ. TO MATCH TIME  200 x 5 mS=1000 mS

ALB	EQU 20H.0  ; ALARM BIT

BUF	EQU 30H  ; 7SEG BUFFER RAM  30H 31H 32H 33H 4 BYTES
HOUR	EQU 34H
MIN	EQU 35H
SEC	EQU 36H
DEDA	EQU 37H  ; DEDA COUNT  5 mS COUNT
SEC0	EQU 38H  ; OLD SEC

HH	EQU 39H  ; ALARM HOUR
MM	EQU 3AH  ; ALARM MIN
;----------------------------
; KEYS.....
K1	EQU P1.4
K2	EQU P1.5
K3	EQU P1.6
K4	EQU P1.7

RY1	EQU P0.1
RY2	EQU P0.2
SPK	EQU P0.3
WLED	EQU P0.0
;-----------------------------
	ORG 0H
	JMP BEGIN
	ORG 0BH      ; TIMER 0
	JMP T0_INT
;-----------------------------
BEGIN:
	CLR RY1
	CLR RY2
	CLR ALB     ; NO ALARM
	MOV HH,#1   ; DEFAULT ALARM TIME--1:1
	MOV MM,#1

	CALL BZ
	CALL BZ
	CALL LED_BL

	CALL INIT
	CALL INIT_TIMER

; DISPLAY OFF
	MOV A,#0FFH
	MOV P2,A;段选端
	CALL LOAD_DATA
;....................................................
LOOP:
	CALL TIME_PRO  ; UPDATE TIME DATA
	CALL SCAN1     ; SCAN 7 SEG
;........................................
; K1 : ADJ TIME  K2:HOUR  K3:MIN  K4: OK

	JB  K1,M1
; K1 KEYED .................
	CALL LED_BL
	CALL SET_TIME
	JMP LOOP

;....................
M1:	JB  K2,M2
; K2 KEYED................LOOK ALARM TIME
	CALL BZ
	CALL LOOK_ATIME  ; LOOK ALARM TIME
	JMP LOOP

;.....................
M2:	JB  K3,M3
; K3 KEYED   ..........SET ALARM TIME
	CALL BZ
	CALL SET_ATIME	; SET ALARM TIME
	CALL LED_BL
	JMP LOOP

;.....................
M3:	JB  K4,M4
; K4 KEYED.............ALARM ALB ON/OFF
	CPL ALB
	JNB ALB,M31
; ALARM ON.................
	CALL BZ
	CALL BZ
	CALL BZ
	JMP LOOP
M31:
; ALARM OFF.....................
	CALL BZ
	JMP LOOP
;.........................................
M4:
	JMP LOOP
;------------------------------------------------
TITLE:	DB "PCL.ASM  IO51 8051 CLOCK SEG X 4 BZ"
;------------------------------------------------
; DELAY Xms   R5*10 ms
DELAY:
	MOV R6,#50
D1:	MOV R7,#100
	DJNZ R7,$
	DJNZ R6,D1
	DJNZ R5,DELAY
	RET
;---------------------
; DELAY A WHILE
DELAY1:
	MOV R6,#1
D2:	MOV R7,#100
	DJNZ R7,$
	DJNZ R6,D2
	DJNZ R5,DELAY1
	RET
;--------------------
LED_BL:
	MOV R4,#6
LE1:	CPL WLED
	MOV R5,#5
	CALL DELAY
	DJNZ R4, LE1
	RET
;----------------------------------
; 7-SEGMENT  COMMON CATHODE
TABLE:
	DB  0c0h, 0f9H, 0a4H, 0b0H, 099H
	DB  092H, 082H, 0f8H, 080H, 098H
	DB  088H, 083H, 0c6H, 091H, 086H
	DB  08eH
;-----------------------------------
; SCAN 4 TIMES
SCAN1:
	MOV R0, #BUF
	MOV R2, #4
	MOV ACC, #0FEH
S1:
	PUSH ACC
; SEND OUT 1 7 SEGMENT DATA IN	@R0
	MOV A, @R0
	MOV P2,ACC     ;段选

; SEND SCAN CODE
	POP ACC
        
	MOV P3,ACC      ;位选端

	MOV R5,#5
	CALL DELAY1

; CHANGE SCAN CODE
	RL A
	INC R0
	DJNZ R2, S1
	RET
;---------------------------------------------------------------
LOAD_DATA:
	MOV BUF,  #3FH	; '0'
	MOV BUF+1,#3FH
	MOV BUF+2,#3FH
	MOV BUF+3,#3FH
	RET
;------------------------------------------------------------------
INIT:
	MOV DEDA,#0
	MOV SEC0,#0
	MOV SEC,#0
	MOV MIN,#0
	MOV HOUR,#0
	RET
;-------------------------
INIT_TIMER:
	MOV TMOD,#00000000B
	MOV IE,  #10000010B
	MOV TL0,#LO
	MOV TH0,#HI
	SETB TR0
	RET
;----------------------
; USE TIMER MODE 0
; COUNT=5ms/1us=5000
;----------------------
T0_INT:
	PUSH ACC
	MOV TL0,#LO
	MOV TH0,#HI
	INC DEDA

; 1 SEC TIME OUT CHECK
	MOV A,DEDA
	CJNE A,#CO,TT1
	MOV DEDA, #0

	CPL WLED
	INC SEC
	MOV A,SEC
	CJNE A,#60,TT1
; 1 MIN TIME OUT
	INC MIN
	MOV SEC,#0
	MOV A, MIN
	CJNE A,#60,TT1
; 1 HOUR TIME OUT
	INC HOUR
	MOV MIN,#0
	MOV A, HOUR
	CJNE A,#24,TT1
	MOV SEC,#0    ; RESET TIME TO 0
	MOV MIN,#0
	MOV HOUR,#0
TT1:
	POP ACC
	RETI
;---------------------------------------------------------------
; 7 SEG MM:SS
; CONVERT DATA AND SHOW
; BUF0 | BUF1 | BUF2 | BUF3
CONV1:
; SHOW MIN...............
	MOV A,MIN
	MOV B,#10
	DIV AB

	MOV DPTR, #TABLE
	MOVC A,@A+DPTR
	MOV BUF,A

	MOV A,B
	MOVC A,@A+DPTR
	MOV BUF+1,A
; SHOW SEC...............
	MOV A,SEC
	MOV B,#10
	DIV AB

	MOV DPTR, #TABLE
	MOVC A,@A+DPTR
	MOV BUF+2,A

	MOV A,B
	MOVC A,@A+DPTR
	MOV BUF+3,A
	RET
;-------------------------------------
; 7 SEG HH:MM
; CONVERT DATA AND SHOW
; BUF0 | BUF1 | BUF2 | BUF3
CONV:
; SHOW HOUR..............
	MOV A,HOUR
	MOV B,#10
	DIV AB

	MOV DPTR, #TABLE
	MOVC A,@A+DPTR
	MOV BUF,A

	MOV A,B
	MOVC A,@A+DPTR
	MOV BUF+1,A
; SHOW MIN...............
	MOV A,MIN
	MOV B,#10
	DIV AB

	MOV DPTR, #TABLE
	MOVC A,@A+DPTR
	MOV BUF+2,A

	MOV A,B
	MOVC A,@A+DPTR
	MOV BUF+3,A
	RET
;-------------------------------------
; K2:HH  K3:MM	K4:OK
SET_TIME:
	CLR TR0
	MOV SEC,#0
; SCAN 3 KEY TO ADJ............
L0:
	CALL SCAN1
	JB K2,L1
; K1 KEYED   ADJ HH......
	INC HOUR
	MOV A, HOUR
	CJNE A,#24,L11
	MOV HOUR,#0
L11:
	CALL CONV
	CALL SCANS     ; DELAY
	JMP L0

;....................
L1:	JB K3,L2
; K2 KEYED   ADJ MM.......
	INC MIN
	MOV A, MIN
	CJNE A,#60,L21
	MOV MIN,#0
L21:
	CALL CONV
	CALL SCANS     ; DELAY
	JMP L0

;.....................
L2:	JB K4,L0
	JNB K4,$
; K3 KEYED  OK ..........
	CALL LED_BL
	SETB TR0
	RET
;-----------------------------------------------
SCANS:
	MOV R4,#55  ;15
SS:	CALL SCAN1
	DJNZ R4,SS
	RET
;---------------------------------------------------------------------------
BZ:
	MOV R6,#0
B1:	CALL DEX
	CPL SPK
	DJNZ R6,B1

	MOV R5,#10
	CALL DELAY
	RET
;--------------------
DEX:	 MOV R7,#180
DE1:	NOP
	DJNZ R7,DE1
	RET
;---------------------------------------------
TIME_OUT:
	SETB RY1

X1:    CALL LED_BL
	CALL BZ
; KEY 4 STOP...........
	JB K4,X1
	JNB K4,$
	CALL LED_BL
	CLR ALB
	CLR RY1
	RET
;--------------------------
LOOK_ATIME:
	CALL CONVA   ; SET ALARM DATA

	MOV B,#0
LO1:	 CALL SCAN1  ; SCAN 7 SEG
	DJNZ B,LO1

	CALL CONV
	RET
;--------------------------
; 7 SEG HH:MM
; CONVERT ALARM DATA
; BUF0 | BUF1 | BUF2 | BUF3
CONVA:
; SHOW HOUR..............
	MOV A,HH
	MOV B,#10
	DIV AB

	MOV DPTR, #TABLE
	MOVC A,@A+DPTR
	MOV BUF,A

	MOV A,B
	MOVC A,@A+DPTR
	MOV BUF+1,A
; SHOW MIN...............
	MOV A,MM
	MOV B,#10
	DIV AB

	MOV DPTR, #TABLE
	MOVC A,@A+DPTR
	MOV BUF+2,A

	MOV A,B
	MOVC A,@A+DPTR
	MOV BUF+3,A
	RET
;-------------------------------------
; SET ALARM TIME
SET_ATIME:
; K2:HH  K3:MM	K4:OK

	CALL CONVA  ; SHOW NOW ALARM TIME
; SCAN 3 KEY TO ADJ............
N0:
	CALL SCAN1
	JB K2,N1
; K2 KEYED   ADJ HH......
	INC HH
	MOV A, HH
	CJNE A,#24,N11
	MOV HH,#0
N11:
	CALL CONVA
	CALL SCANS     ; DELAY
	JMP N0

;....................
N1:	JB K3,N2
; K3 KEYED   ADJ MM.......
	INC MM
	MOV A, MM
	CJNE A,#60,N21
	MOV MM,#0
N21:
	CALL CONVA
	CALL SCANS     ; DELAY
	JMP N0

;.....................
N2:	JB K4,N0
	JNB K4,$
; K4 KEYED  OK ..........
	CALL LED_BL
	CALL CONV  ; SHOW NOW ALARM TIME
	RET
;-----------------------------------------------
; UPDATE MIN,SEC
TIME_PRO:
	MOV A,SEC
	MOV B,SEC0
	CJNE A,B,TI1	; TIME CHANGE
	JMP TI2
TI1:	CALL CONV      ; CONV. TO ASCII  SHOW TO 7SEG
	MOV SEC0,SEC
TI2:
; CHECK ALARM ON/OFF............
	JB ALB,TI3
	RET
TI3:
; CHECK ALARM.................
	MOV A,HOUR
	MOV B,HH
	CJNE A,B,BK

	MOV A,MIN
	MOV B,MM
	CJNE A,B,BK
; TIME MATCH....................
	CALL TIME_OUT
BK:
	RET
;----------------------------------------------
	END

⌨️ 快捷键说明

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