📄 lab5.asm
字号:
;--------------------------------------------------------------
; 存储分配,R3显示秒位,R2显示分,R1显示时
;--------------------------------------------------------------
;--------------------------------------------------------------
; 伪指令定义区
;--------------------------------------------------------------
ph_1 equ 75h
second_1 equ 76h
second_2 equ 77h
minute_1 equ 78h
minute_2 equ 79h
hour_1 equ 7ah
hour_2 equ 7bh
tmp equ 7eh
key equ 7fh
org 0000h
ljmp main
org 000bh
ljmp int0
org 0030h
;--------------------------------------------------------------
; 程序初始化
;--------------------------------------------------------------
main:
clr f0
mov r1,#00h
mov dptr,#rank_one
mov tmp,#00h
mov hour_1,#00h
mov second_1,#00h
mov minute_1,#00h
mov hour_2,# 00h
mov second_2,#00h
mov minute_2,#00h
mov p1,#00h
mov r3,#200
mov ph_1,#0feh
mov p1,#0feh
mov p0,#00h
mov sp,#30h
mov p2,#0ffh
clr ea
mov tmod,#01h
mov th0,#0fcH
mov tl0,#18h
setb et0
setb ea
setb tr0
;--------------------------------------------------------------
start:
call scan_key
;jnb f0,rel
;mov p0,a
;rel:
;clr f0
ljmp start
;--------------------------------------------------------------
; 键盘扫描函数
;--------------------------------------------------------------
scan_key:
mov p2,#0ffh
mov P2,#0fh
mov a,P2
cjne a,#0fh,key_close
ljmp scan_key
key_close:
call delay ;抗抖动
cjne a,p2,scan_key
mov r7,a
mov P2,#0ffh
mov P2,#0f0h
nop
nop
mov a,P2
cjne a,#0f0h,check
ljmp scan_key
check:
cjne r7,#0eh,rank_2
mov key,#00h
ljmp com
rank_2:
cjne r7,#0dh,rank_3
mov key,#04h
ljmp com
rank_3:
cjne r7,#0bh,rank_4
mov key,#08h
ljmp com
rank_4:
mov key,#0c0h
com:
cjne a,#0e0h,colo_2
mov a,#00h
ljmp add_all
colo_2:
cjne a,#0d0h,colo_3
mov a,#01h
ljmp add_all
colo_3:
cjne a,#0b0h,colo_4
mov a,#02h
ljmp add_all
colo_4:
mov a,#03h
add_all:
add a,key
mov key,a
;--------------------------------------------------------------
; 功能按键检测,并且将设置的时分存入
;--------------------------------------------------------------
xrl a,#0ah
jnz number11
mov a,tmp
mov r0,#78h ;minute_1地址
xchd a,@r0
inc r0
swap a
xchd a,@r0
ljmp over
number11:
mov a,key
xrl a,#0bh
jnz number_key
mov a,tmp
mov r0,#7ah
xchd a,@r0 ;hour_1地址
swap a
inc r0
xchd a,@r0
ljmp over
;--------------------------------------------------------------
; 数值按键存入
;--------------------------------------------------------------
number_key:
mov a,tmp
swap a
anl a,#0f0h
orl a,key
mov tmp,a
;--------------------------------------------------------------
; 以下供测试所用
;--------------------------------------------------------------
mov a,#0fh
anl a,tmp
movc a,@a+dptr
setb f0
over:
ret
;--------------------------------------------------------------
; LED显示
;--------------------------------------------------------------
;--------------------------------------------------------------
; 延时函数
;--------------------------------------------------------------
delay:
mov r6,#1;
loop0:mov r5,#250
loop:
mov r4,#250
loop1:
djnz r4,loop1
djnz r5,loop
djnz r6,loop0
ret
delay1:
mov r6,#100;
djnz r6,$
ret
;--------------------------------------------------------------
; 定时中断,需要使用到R3
;--------------------------------------------------------------
int0:
push psw
push a
mov th0,#0f2h
mov tl0,#018h
clr tr0
mov p1,ph_1
djnz r3,rel
inc second_1
mov r3,#200
rel:
mov a,second_1
xrl a,#0ah
jnz zero
mov second_1,#00h
inc second_2
zero:
;----------------------------------------------
mov a,second_2
xrl a,#06h
jnz minute
mov second_2,#00h
inc minute_1
minute:
;--------------------------------------------------------
mov a,minute_1
xrl a,#0ah
jnz minute_two
mov minute_1,#00h
inc minute_2
minute_two:
mov a,minute_2
xrl a,#06h
jnz hour
mov minute_2,#00h
inc hour_1
hour:
mov a,hour_1
xrl a,#0ah
jnz hour_two
mov hour_1,#00h
inc hour_2
hour_two:
mov a,hour_2
xrl a,#06h
jnz hour_over
mov minute_two,#00h
;-----------------------------------------------------------------
hour_over:
cjne r1,#5,one
mov a,second_1
movc a,@a+dptr
mov ph_1,#07fh
mov r1,#0ffh
ljmp here
one:
cjne r1,#4,two
mov a,second_2
movc a,@a+dptr
ljmp here
two:
cjne r1,#3,three
mov a,minute_1
movc a,@a+dptr
ljmp here
three:
cjne r1,#2,four
mov a,minute_2
movc a,@a+dptr
ljmp here
four:
cjne r1,#1,five
mov a,hour_1
movc a,@a+dptr
ljmp here
five:
mov a,hour_2
movc a,@a+dptr
;----------------------------------------------
here:
mov p0,a
mov a,ph_1
rl a
mov ph_1,a
inc r1
pop a
pop psw
setb tr0
reti
;--------------------------------------------------------------
; 定义LED编码表,该编码遵从行线接低,列线接高
; 0 1 2 3 4 5 6 7 8 9 hour minute enter
;
;
;--------------------------------------------------------------
rank_one:
db 3fh,06h,5bh,4fh
rank_two:
db 66h,6dh,7dh,07h
rank_three:
db 0ffh,6fh,11h,22h
rank_four:
db 033h,0ffh,0ffh,0ffh
;--------------------------------------------------------------
; 2008-11-29 肖波
;--------------------------------------------------------------
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -