📄 test_disp.asm
字号:
;----------------------------------------------
; 用汇编编制的显示程序
; 2007.8.29
spk BIT P1.0 ;蜂鸣器
k1 BIT P1.1 ;k1
k2 BIT P2.4 ;k2
led_di bit p1.7 ;74ls164 数据输入
led_clk bit p3.3 ;74ls164 时钟输入
disp_s EQU 1000h ;十位地址
disp_g EQU 2000h ;个位地址
clr_led equ 4000h ;74ls164(清零)
numb_s equ 30h ;个位数据
numb_g equ 31h ;十位数据
led equ 32h ;led要显示的数
numb equ 33h ;
org 0000h ;复位入口
ljmp main ;跳到主程序
org 0100h
delay_0: ;延时子程序
mov r6,#02h
;del_22: djnz r6,del_22
ret
delay_1: ;延时子程序
mov r5,#00h ;
del_2: mov r6,#00h
del_1: djnz r6,del_1
djnz r5,del_2
ret
delay_2:;;延时子程序
lcall delay_1
lcall delay_1
lcall delay_1
lcall delay_1
lcall delay_1
lcall delay_1
lcall delay_1
lcall delay_1
lcall delay_1
lcall delay_1
lcall delay_1
lcall delay_1
ret
sprak_on: ;蜂鸣器发声
clr spk;
lcall delay_1
setb spk
ret
clr_led_d:
mov dptr,#clr_led;
movx a,@dptr
ret
disp_led: ;led=?
;lcall clr_led_d;清零
mov a,led;
mov numb,#08h
clr led_clk
c_disp_led:
rlc a
mov led_di,c
lcall delay_0;
setb led_clk;
lcall delay_0;
clr led_clk;
lcall delay_0;
djnz numb,c_disp_led
ret
loop_led:
mov r7,#80h
loop_led1:
mov led,r7
lcall disp_led;显示
lcall delay_1
mov a,r7
rrc a
mov r7,a
jnb k1,quit_k1
jnb k2,quit_k1
sjmp loop_led1
quit_k1:
ret
;
;----------------------------------------------
tab: ;数码管显示0,1,2,3,4,5,6,7,8,9代码(查表用)
db 3fh; "0"
db 06h; "1"
db 5bh; "2"
db 4fh; "3"
db 66h; "4"
db 6dh; "5"
db 7dh; "6"
db 07h; "7"
db 7fh; "8"
db 67h; "9"
db 77h; "a"
db 7ch; "b"
db 39h; "c"
db 5eh; "d"
db 79h; "e"
db 71h; "f"
db 00h; " "
;--------------------------------
f_numb: ;a=?
mov dptr,#tab ;置表的头
movc a,@a+dptr ;查表
ret
display: ;numb_s=? numb_g=?
mov a,numb_s
lcall f_numb; 查表
mov dptr,#disp_s;置十位的地址
movx @dptr,a;写数
mov a,numb_g;
lcall f_numb; 查表
mov dptr,#disp_g;置个位的地址
movx @dptr,a;写数
ret
main: ;主程序入口
mov sp,#90h ;设堆栈
mov ip,#00h ;关中断
lcall sprak_on ;发声
lcall delay_2
lcall sprak_on ;发声
mov numb_s,#02h ;显示2
mov numb_g,#01h ;显示1
lcall display ;调用显示程序
lcall loop_led
mov led,#55h; 显示55
lcall disp_led;
loop:
;jnb k1,to_disp
;jnb k2,to_led
;sjmp loop
to_disp:
mov numb_s,#00h ;显示0
mov numb_g,#01h ;显示1
loop1:
lcall display ;显示
lcall delay_2 ;延时
inc numb_s
clr c
mov a,numb_s
subb a,#09h
jnc clr_numb_s
tnumb_g:
inc numb_g
clr c
mov a,numb_g
subb a,#09h
jnc clr_numb_g
tnumb_gg:
mov a,led
cpl a
mov led,a
lcall disp_led
jnb k1,main ;查键
jnb k2,main ;查键
sjmp loop1
clr_numb_s:
mov numb_s,#00h
sjmp tnumb_g
clr_numb_g:
mov numb_g,#00h
sjmp tnumb_gg
to_led:
sjmp $
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -