?? wenxu.asm
字號(hào):
Z8279 equ 0ff82h
D8279 equ 0ff80h
LEDMOD equ 00h
LEDFEQ equ 38h
LEDCLS equ 0d1h
LEDWRO equ 90h
HOUR equ 28h ;存放當(dāng)前時(shí)間
MINITE equ 29h
SECOND equ 2ah
T_HOUR equ 2bh ;調(diào)cmp前臨時(shí)放入報(bào)時(shí)時(shí)間
T_MINITE equ 2ch
T_SECOND equ 2dh
WORK1 equ 2eh ;四個(gè)報(bào)時(shí)時(shí)間
NOON equ 30h
WORK2 equ 32h
NIGHT equ 34h
STATE equ 36h ;為1時(shí)正常走時(shí),為0時(shí)正在修改時(shí)間
org 0000h
ajmp start
org 000bh
ajmp T0INT
org 0040h
start:
mov r1,#20h
mov r2,#08h
mov a,#00h
loop22:
mov @r1,a ;清RAM 20H-27H
inc r1
djnz r2,loop22
mov a,#00h
mov p1,a ;置L1和L2燈滅
mov WORK1,#08h ;初始化報(bào)時(shí)時(shí)間
mov WORK1+1,#00h
mov NOON,#11h
mov NOON+1,#30h
mov WORK2,#12h
mov WORK2+1,#30h
mov NIGHT,#17h
mov NIGHT+1,#00h
mov sp,#60h
lcall INIT8279
clr tf0
mov r7,#00h ;當(dāng)前時(shí)間00:00:00
mov HOUR,r7
mov MINITE,r7
mov SECOND,r7
mov tmod,#01h ;定時(shí)器
mov th0,#4bh
mov tl0,#0fch
mov ie,#82h
mov r2,#14h
setb tr0
mov STATE,#01h
start1:
lcall TEST_BCDE
lcall TEST_A
sjmp start1
;**************************************
; LED顯示
;**************************************
init8279:
push dph
push dpl
push acc
push 02h
push 01h
mov a,STATE
cjne a,#01h,loop55
mov r1,#20h
mov r2,#08h
mov dptr,#Z8279
mov a,#LEDMOD
movx @dptr,a
mov a,#LEDFEQ
movx @dptr,a
mov dptr,#Z8279
mov a,#LEDWRO
movx @dptr,a
mov dptr,#D8279
loop33:
mov a,@r1
movx @dptr,a
inc r1
djnz r2,loop33
loop55:
pop 01h
pop 02h
pop acc
pop dpl
pop dph
ret
;************************************
; 延時(shí)
;************************************
delay:
push 00h
push 01h
mov r0,#00h
delay1:
mov r1,#00h
djnz r1,$
djnz r0,delay1
pop 01h
pop 00h
ret
;*************************************
; 定時(shí)中斷
;*************************************
T0INT:
push acc
mov th0,#4bh
mov tl0,#0fch
djnz r2,loop4 ;判斷2秒到(L1燈)
djnz r6,next2
clr p1.0
next2: ;時(shí)間加1秒
mov a,SECOND
add a,#01h ;秒
da a
mov SECOND,a
cjne a,#60h,next1
mov a,#00h
mov SECOND,a
mov a,MINITE ;分
add a,#01h
da a
mov MINITE,a
cjne a,#60h,next1
mov a,#00h
mov MINITE,a
mov a,HOUR
add a,#01h
da a
mov HOUR,a ;時(shí)
cjne a,#24h,next1
mov a,#00h
mov HOUR,a
next1: ;時(shí)間送20H-27H以顯示
mov dptr,#LEDSEG
mov r7,SECOND ;秒
lcall CHAIFEN
mov a,r3
movc a,@a+dptr
mov 20h,a
mov a,r4
movc a,@a+dptr
mov 21h,a
mov r7,MINITE ;分
lcall CHAIFEN
mov a,r3
movc a,@a+dptr
mov 23h,a
mov a,r4
movc a,@a+dptr
mov 24h,a
mov r7,HOUR ;時(shí)
lcall CHAIFEN
mov a,r3
movc a,@a+dptr
mov 26h,a
mov a,r4
movc a,@a+dptr
mov 27h,a
mov r2,#14h
lcall INIT8279
lcall BAOSHI
loop4:
pop acc
reti
;*************************************
; 修改時(shí)間
;*************************************
TEST_A:
clr ea
mov dptr,#Z8279
movx a,@dptr
anl a,#0fh
jz LOOP_A3
ajmp LOOP_A4
LOOP_A3:
ljmp RETURN_A
LOOP_A4:
mov a,#40h
movx @dptr,a
mov dptr,#D8279
movx a,@dptr
mov r5,a
cjne r5,#0ah,LOOP_A3 ;按鍵為A
LOOP_A:
mov r1,#20h
mov a,#00h
mov r2,#08h
LOOP_A1:
mov @r1,a
inc r1
djnz r2,LOOP_A1
lcall init8279
mov SECOND,#00h
mov MINITE,#00h
mov HOUR,#00h
lcall scan ;小時(shí)高位
mov r4,#07h
mov a,r5
lcall disled
mov a,r5
anl a,#0fh
swap a
mov HOUR,a
lcall scan ;小時(shí)低位
mov r4,#06h
mov a,r5
lcall disled
mov a,r5
anl a,#0fh
orl HOUR,a
lcall scan ;分
mov r4,#04h
mov a,r5
lcall disled
mov a,r5
anl a,#0fh
swap a
mov MINITE,a
lcall scan
mov r4,#03h
mov a,r5
lcall disled
mov a,r5
anl a,#0fh
orl MINITE,a
lcall scan ;秒
mov r4,#01h
mov a,r5
lcall disled
mov a,r5
anl a,#0fh
swap a
mov SECOND,a
lcall scan
mov r4,#00h
mov a,r5
lcall disled
mov a,r5
anl a,#0fh
orl SECOND,a
LOOP_A2:
lcall scan ;按鍵F
cjne r5,#0fh,LOOP_A2
mov r2,#14h
mov a,SECOND
subb a,#60h ;容錯(cuò)
jnb cy, LOOP_A5
mov a,MINITE
subb a,#60h
jnb cy, LOOP_A5
mov a,HOUR
subb a,#24h
jnb cy, LOOP_A5
ajmp RETURN_A
LOOP_A5:
ljmp LOOP_A
RETURN_A:
setb ea
ret
;****************************************
; 修改報(bào)時(shí)時(shí)間
;****************************************
TEST_BCDE:
mov dptr,#Z8279
movx a,@dptr
anl a,#0fh
jz LOOP_B1
ajmp LOOP_B2
LOOP_B1:
ljmp RETURN_B
LOOP_B2:
mov STATE,#00h ;狀態(tài)--不顯示當(dāng)前時(shí)間
mov a,#40h
movx @dptr,a
mov dptr,#D8279
movx a,@dptr
mov r5,a
cjne r5,#0bh,NEXTB1 ;按鍵B時(shí),改WORK1
BB:
mov dptr,#Z8279
mov a,#0d1h
movx @dptr,a
lcall delay
lcall clrled
lcall scan ;小時(shí)高位
mov r4,#07h
lcall disled
mov a,r5
anl a,#0fh
swap a
mov WORK1,a
lcall scan ;小時(shí)低位
mov r4,#06h
lcall disled
mov a,r5
anl a,#0fh
orl WORK1,a
lcall scan
mov r4,#04h
mov a,r5
lcall disled
mov a,r5
anl a,#0fh
swap a
mov WORK1+1,a
lcall scan
mov r4,#03h
mov a,r5
lcall disled
mov a,r5
anl a,#0fh
orl WORK1+1,a
NEXTBB:
lcall scan
cjne r5,#0fh,NEXTBB ;按鍵F結(jié)束
mov a,WORK1+1
subb a,#60h ;容錯(cuò)
jnb cy, BB
mov a,WORK1
subb a,#24h
jnb cy, BB
ajmp RETURN_B
NEXTB1: ;按鍵C時(shí),改NOON
cjne r5,#0ch,NEXTB2
BC:
lcall clrled
lcall scan
mov r4,#07h
lcall disled
mov a,r5
anl a,#0fh
swap a
mov NOON,a
lcall scan
mov r4,#06h
lcall disled
mov a,r5
anl a,#0fh
orl NOON,a
lcall scan
mov r4,#04h
mov a,r5
lcall disled
mov a,r5
anl a,#0fh
swap a
mov NOON+1,a
lcall scan
mov r4,#03h
mov a,r5
lcall disled
mov a,r5
anl a,#0fh
orl NOON+1,a
NEXTBC:
lcall scan
cjne r5,#0fh,NEXTBC
mov a,NOON+1
subb a,#60h
jnb cy, BC
mov a,NOON
subb a,#24h
jnb cy, BC
ajmp RETURN_B
NEXTB2: ;按鍵D時(shí),改work2
cjne r5,#0dh,NEXTB3
BD:
lcall clrled
lcall scan
mov r4,#07h
lcall disled
mov a,r5
anl a,#0fh
swap a
mov WORK2,a
lcall scan
mov r4,#06h
lcall disled
mov a,r5
anl a,#0fh
orl WORK2,a
lcall scan
mov r4,#04h
mov a,r5
lcall disled
mov a,r5
anl a,#0fh
swap a
mov WORK2+1,a
lcall scan
mov r4,#03h
mov a,r5
lcall disled
mov a,r5
anl a,#0fh
orl WORK2+1,a
NEXTBD:
lcall scan
cjne r5,#0fh,NEXTBD
mov a,WORK2+1
subb a,#60h
jnb cy, BD
mov a,WORK2
subb a,#24h
jnb cy, BD
ajmp RETURN_B
NEXTB3: ;按鍵E時(shí),改NIGHT
cjne r5,#0eh,RETURN_B
BE:
lcall clrled
lcall scan
mov r4,#07h
lcall disled
mov a,r5
anl a,#0fh
swap a
mov NIGHT,a
lcall scan
mov r4,#06h
lcall disled
mov a,r5
anl a,#0fh
orl NIGHT,a
lcall scan
mov r4,#04h
mov a,r5
lcall disled
mov a,r5
anl a,#0fh
swap a
mov NIGHT+1,a
lcall scan
mov r4,#03h
mov a,r5
lcall disled
mov a,r5
anl a,#0fh
orl NIGHT+1,a
NEXTBE:
lcall scan
cjne r5,#0fh,NEXTBE
mov a,NIGHT+1
subb a,#60h
jnb cy, BE
mov a,NIGHT
subb a,#24h
jnb cy, BE
ajmp RETURN_B
RETURN_B: ;狀態(tài)--顯示當(dāng)前時(shí)間
mov STATE,#01h
ret
;*****************************************
; 屏幕清零
;*****************************************
clrled:
push dph
push dpl
push acc
mov a,#LEDWRO
mov r4,#00h
mov r5,#08h
mov dptr,#Z8279
clrled1:
add a,r4
movx @dptr,a
mov a,#00h
mov dptr,#D8279
movx @dptr,a
djnz r5,clrled1
pop acc
pop dpl
pop dph
ret
;**********************************
; 報(bào)時(shí)
;**********************************
BAOSHI:
mov T_HOUR,WORK1 ;工作
mov T_MINITE,WORK1+1;
mov T_SECOND,#00h
lcall CMP
cjne r5,#01h,BAOSHI1
setb p1.0
mov r6,#2
ajmp BAOSHI_R
BAOSHI1:
mov T_HOUR,NOON ;午休
mov T_MINITE,NOON+1;
mov T_SECOND,#00h
lcall CMP
cjne r5,#01h,BAOSHI2
setb p1.0
setb p1.1
mov r6,#2
ajmp BAOSHI_R
BAOSHI2:
mov T_HOUR,NOON ;午休+1小時(shí)
mov T_MINITE,NOON+1;
mov T_SECOND,#00h
mov a,T_HOUR
add a,#01h
da a
mov T_HOUR,a
lcall CMP
cjne r5,#01h,BAOSHI3
clr p1.1
ajmp BAOSHI_R
BAOSHI3:
mov T_HOUR,WORK2 ;下午
mov T_MINITE,WORK2+1;
mov T_SECOND,#00h
lcall CMP
cjne r5,#01h,BAOSHI4
setb p1.0
mov r6,#2
ajmp BAOSHI_R
BAOSHI4:
mov T_HOUR,NIGHT ;下班
mov T_MINITE,NIGHT+1;
mov T_SECOND,#00h
lcall CMP
cjne r5,#01h,BAOSHI5
setb p1.0
setb p1.1
mov r6,#2
ajmp BAOSHI_R
BAOSHI5:
mov T_HOUR,NIGHT ;下班+10分鐘
mov T_MINITE,NIGHT+1;
mov T_SECOND,#00h
mov a,T_MINITE
add a,#10h
da a
mov T_MINITE,a
lcall CMP
cjne r5,#01h,BAOSHI_R
clr p1.1
BAOSHI_R:
ret
;*********************************************
; 時(shí)間比較,相等時(shí)r5=1,否則r5=0
;*********************************************
CMP:
mov a,HOUR
cjne a,T_HOUR,CMP1
mov a,MINITE
cjne a,T_MINITE,CMP1
mov a,SECOND
cjne a,T_SECOND,CMP1
mov r5,#01h
ajmp CMP2
CMP1:
mov r5,#00h
CMP2:
ret
;*********************************************
; 掃描一按鍵送r5
;*********************************************
scan:
mov dptr,#Z8279
movx a,@dptr
anl a,#0fh
jz scan
mov a,#40h
movx @dptr,a
mov dptr,#D8279
movx a,@dptr
mov r5,a
ret
;********************************************
; 顯示a到偏移為r4處
;********************************************
disled:
push dph
push dpl
push acc
mov a,#LEDWRO
add a,r4
mov dptr,#Z8279
movx @dptr,a
mov dptr,#LEDSEG
mov a,r5
movc a,@a+dptr
mov dptr,#D8279
movx @dptr,a
pop acc
pop dpl
pop dph
ret
;**********************************************
; 拆分字符,傳入r7,r4--高位,r3--低位
;**********************************************
CHAIFEN:
push acc
mov a,r7
mov r3,a
mov r4,a
mov a,#0fh
anl a,r3
mov r3,a
mov a,#0f0h
anl a,r4
swap a
mov r4,a
pop acc
ret
LEDSEG:
db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h
db 7fh,6fh,77h,7ch,39h,5eh,79h,71H
end
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -