📄 呼叫器4.asm
字号:
read_key equ p3.2
del_key equ p3.3
service_key equ p3.4
VOICE EQU P3.5
VT EQU P2.1
LATCH EQU P2.0
read_flag bit 0 ;1=read
org 0
jmp main
org 0bh
jmp int
main:
call delay1
clr read_flag
mov r4,#22 ;初始化赋值
mov r0,#30h
clr_ram:
mov @r0,#0ffh
inc r0
djnz r4,clr_ram
mov scon,#0 ;设置串口方式
mov sbuf,#0fdh ;clear screen
jnb ti,$ ;判断完没有
clr ti ;清标志
mov sbuf,#0fdh ;发送数据
jnb ti,$ ;判断完没有
clr ti ;清标志
clr latch
setb latch ;output latch
mov r1,#30h
scan:
mov r4,#10 ;初始化赋值
mov r0,#30h
l1:
call key
cpl P2.2 ;TEST POINT
jnb VT,l1 ;判断是否有信号
call delay1
jnb VT,l1
clr read_flag
mov a,p1
anl a,#0fh ;屏蔽高四位!!!
mov b,#10
div ab
xch a,b
mov dptr,#tab3 ;查表
movc a,@a+dptr
cpl a
mov @r0,a ;存数据
inc r0
mov sbuf,a ;发送数据
jnb ti,$ ;判断完没有
clr ti ;清标志
mov a,b
mov dptr,#tab3 ;查表
movc a,@a+dptr
cpl a
mov @r0,a ;存数据
inc r0
mov sbuf,a ;发送数据
jnb ti,$ ;判断完没有
clr ti ;清标志
clr latch
setb latch ;output latch
call speaker ;调用扬声器
clr et0
djnz r4,l1 ;程序循环20次
jmp scan
key:
jb read_key,to_1
call delay1
jb read_key,to_1
jmp read
to_1:
jb del_key,to_2
call delay1
jb del_key,to_2
jmp del
to_2:
jb service_key,to_3
call delay1
jb service_key,to_3
jmp servise
to_3:
ret
read:
setb read_flag
mov a,@r1
cpl a
jz end_of_record
cpl a
inc r1
mov sbuf,a; 发送数据
jnb ti,$; 判断完没有
clr ti; 清标志
mov a,@r1
inc r1
mov sbuf,a ;发送数据
jnb ti,$ ;判断完没有
clr ti ;清标志
clr latch
setb latch
jnb read_key,$
jnb del_key,$
jnb service_key,$
ret
end_of_record:
cjne r1,#30h,record_start
mov sbuf,#0fdh ;clear screen
jnb ti,$ ;判断完没有
clr ti ;清标志
mov sbuf,#0fdh ;发送数据
jnb ti,$ ;判断完没有
clr ti ;清标志
clr latch
setb latch ;output latch
jnb read_key,$
jnb del_key,$
jnb service_key,$
ret
record_start:
mov r1,#30h
jmp read
del:
push 0
push 1
jb read_flag,del_read_mode
del_receive_mode:
mov a,r0
mov r1,a
dec r1
dec r1
move_next1:
mov a,@r0
mov @r1,a
inc r0
inc r1
mov a,@r0
mov @r1,a
inc r0
inc r1
cjne r1,#44h,move_next1
pop 1
pop 0
mov a,r0
mov r1,a
dec r0
dec r0
jmp read
del_read_mode:
mov a,r1
clr c
subb a,#30h
jz del_done
mov a,r1
mov r0,a
dec r1
dec r1
move_next2:
mov a,@r0
mov @r1,a
inc r0
inc r1
mov a,@r0
mov @r1,a
inc r0
inc r1
cjne r1,#46h,move_next2
pop 1
pop 0
dec r1
dec r1
dec r0
dec r0
jmp read
del_done:
pop 1
pop 0
ret
servise:
jb read_flag,servise_read_mode
servise_receive_mode:
dec r0
dec r0
mov a,@r0
anl a,#0feh
mov @r0,a
inc r0
mov a,@r0
anl a,#0feh
mov @r0,a
inc r0
mov a,r0
mov r1,a
dec r1
dec r1
jmp read
servise_read_mode:
; mov a,r1
; mov r0,a
dec r1
dec r1
mov a,@r1
anl a,#0feh
mov @r1,a
inc r1
mov a,@r1
anl a,#0feh
mov @r1,a
inc r1
dec r1
dec r1
jmp read
speaker:
mov a,#5
call delay
mov a,#6
call delay
mov a,#1
call delay
; mov a,#2
; call delay
; mov a,#3
; call delay
; mov a,#2
; call delay
; mov a,#4
; call delay
ret
delay:
mov r3, #0
mov r2,a ;暂存
mov b,#2
mul ab ;变址
mov b,a ;暂存
mov dptr,#tab1
movc a,@a+dptr
mov th0,a ;赋定时器初值
mov a,b
inc dptr
movc a,@a+dptr
mov tl0,a
mov tmod,#01h
setb ea
setb et0
setb tr0
mov dptr,#tab2
mov a,r2
movc a,@a+dptr
cjne r3,#1,$
cjne r3,#0,$
cjne a,55h,$
ret
int: cpl VOICE
mov a,r2
mov b,#2
mul ab
mov b,a
mov dptr,#tab1
movc a,@a+dptr
mov th0,a
inc dptr
mov a,b
movc a,@a+dptr
mov tl0,a
inc r3
mov 55h,r3
reti
tab1: dw 0,61719,62134,62505,62670,62948,63263,63511
tab2: db 0, 6,38,74,93,136,184,238
tab3: db 0fch,60h,0dah,0f2h,66h,0b6h,0beh,0e0h,0feh,0f6h
delay1: MOV R6,#40
LOOP1: MOV R7,#0
LOOP2: DJNZ R7,LOOP2
DJNZ R6,LOOP1
; MOV R6,#20
; MOV R7,#0
RET
display:
mov sbuf,#0
jnb ti,$ ;判断完没有
clr ti ;清标志
mov sbuf,#0
jnb ti,$ ;判断完没有
clr ti ;清标志
mov sbuf,a ;发送数据
jnb ti,$ ;判断完没有
clr ti ;清标志
mov sbuf,#0
jnb ti,$ ;判断完没有
clr ti ;清标志
mov sbuf,#0
jnb ti,$ ;判断完没有
clr ti ;清标志
clr latch
setb latch;
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -