📄 wangliang.asm
字号:
org 0000h
sjmp main
org 000bh
ljmp timer0
;main process
org 0030h
main:
;system initialization
mov p0,#0ffh
mov p2,#0ffh
mov p1,#0f0h
mov tmod,#01h ;timer0 mode1,
setb tr1
mov th1,#0d8h ;time:5ms
mov tl1,#0f0h
setb ea
mov IE,#0ffh
mov r0,#00h
mov a,#00
clr p3.5
;程序实现的功能
;K4键按下,循环点亮7段LED
;K3键按下,按计数方式点亮发光二极管
body_proc:
; mov a,r0
cjne a,#55h,k3_diode
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;k4 button pressed,led_segment be lightned
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov p0,#10011111b
mov p2,#10111111b
setb p3.5
lcall delay
clr p3.5
push acc
mov r4,#4
mov b,#02
mov a,#02h
a3: ; 循环点亮七段led
;anl a,#0ffh
mov p3,a
mul ab
lcall delay1
djnz r4,a3
pop acc
sjmp body_proc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;k3 button pressed,led be lightned
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
k3_diode:
cjne a,#0aah,cycling
push acc
mov r4,#16
mov a,#0f0h
a4: ;按计数方式点亮发光二极管 L1-L4
mov p1,a
lcall delay1
add a,#01
djnz r4,a4
pop acc
aa: ;点亮L5,L6
mov p1,#0f0h
lcall delay1
mov p0,#01111111b
mov p2,#01111111b
setb p3.5
lcall delay1
clr p3.5
; sjmp body_proc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
cycling:
sjmp body_proc
ret
;delay 延时函数
delay:
mov r6,#0ffh
a1: mov r7,#0ffh
a0: djnz r7,a0
djnz r6,a1
ret
delay1:
mov r5,#20
a2: lcall delay;
djnz r5,a2
ret
;定时器1中断处理函数
;timer0 interrupt service route
timer0:
push acc
mov th1,#0d8h
mov tl1,#0f0h
clr tr1
mov r1,#80h ;软件延时去按键抖动
a8:mov r2,#80h
a7:djnz r2,a7
djnz r1,a8
setb tr1
mov a,p1
push acc
anl a,#80h
cjne a,#80h,a5
pop acc ;k3 button has been pressed down
mov r0,#0aah
sjmp retu
a5:pop acc
cjne a,#40h,a6
mov r0,#55h ;k4 button has been pressed down
sjmp retu
a6:mov r0,#00 ;other buttons or no button has pressed down
retu:
pop acc
mov a,r0
reti
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -