📄 text1.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 + -