📄 recplay.asm
字号:
moto_on bit p0.6 ;马达控制
cdct bit p0.5 ;电磁铁控制
rec_c bit p3.6 ;录音开关控制
play_c bit p3.7 ;放音开关控制
;comm bit p3.3 ;=1 关闭 =0 启动
vol1 bit p1.0 ;音量控制
vol2 bit p1.1
comm1 bit p1.7 ;放音状态返回
cspin bit p1.6
clkpin bit p1.5
dipin bit p1.4
mode_sw bit p3.4 ;模式开关
rec_sw bit p3.5 ;录音开关
power_led bit p0.0 ;电源指示
rec_led bit p0.1 ;录音指示
play_led bit p0.2 ;放音指示
ffw_led bit p0.3 ;快进指示
rew_led bit p0.4 ;快倒指示
kh1_pad bit p2.3 ;键扫行1
kh2_pad bit p2.4 ;键扫行2
kh3_pad bit p2.5 ;键扫行3
kl1_pad bit p2.6 ;键扫列1
kl2_pad bit p2.7 ;键扫列1
k_num equ 5bh ;按键计数
pio2_tal equ 5ch ;端口累加器高
pio1_tal equ 5dh ;端口累加器低
sys_pwr equ 5eh ;电源标志 3关闭1接通2锁定
;遥控机芯代码 4停机5放音6快进7快倒8录音
lcdbuf equ 60h
lcdbufend equ 6fh
lcdmm equ 70h
tim equ 71h ;定时
ff_old equ 72h ;机芯模式
play_m equ 73h ;暂停前记忆
play_mem equ 74h ;暂停后记忆 0:无 1:录音 2:放音 3:快进 4:快倒
count0 equ 75h ;磁带计数低位首地址
count1 equ 76h
count2 equ 77h
count3 equ 78h ;磁带计数高位
au_to equ 79h ;自动停机计数
san equ 7ah ;闪显计数
count1_t equ 7bh ;液晶显示用
count2_t equ 7ch ;
count3_t equ 7dh ;
woshou equ 7eh ;握手计数器
wo_t equ 7fh ;握手计时器
;
read_p bit 18h ;端口读标志
rec_cbit bit 19h ;允许录音
play_cbit bit 1ah ;允许放音
ffw_cbit bit 1bh ;允许快进
rew_cbit bit 1ch ;允许快倒
fang bit 1dh ;记忆计数方向 1:进 0:倒
san_bit bit 1eh ;闪亮
p_sw bit 1fh
key_clr bit 20h
key_rec bit 21h
key_play bit 22h
key_ff bit 23h
key_rew bit 24h
key_stop bit 25h
;
org 0000h
ljmp start ;跳转到主程序
;
org 0003h
ljmp b_int0 ;中断0
ljmp start
;
org 000bh
ljmp b_t0 ;T0定时中断
ljmp start
;
org 0013h
ljmp b_int1 ;中断1
ljmp start
;
org 001bh
ljmp start ;T1
;
org 0023h
ljmp start
;
org 0100h
;
tst: ljmp test_open
;
start:
mov sp,#30h
lcall cjdata ;采集端口
clr c
mov a,20h
addc a,21h
jz tst ;转测试程序
;
mov sp,#30h
mov psw,#00h
mov r7,#08h ;进入初始开机状态
loopp3: mov r6,#0ffh
loopp2: mov r5,#0ffh
loopp1: djnz r5,loopp1
djnz r6,loopp2
djnz r7,loopp3
;
start0: lcall startdata
lcall lcdreset ;lcd复位
lcall reset ;机芯复位
;
start1: lcall key ;键扫描
mov count1_t,count1
mov count2_t,count2
mov count3_t,count3
start1_1: lcall led_dis ;发光管显示
lcall autostop ;自动停机
clr power_led
lcall lcd_data ;生成lcd数据
lcall transram ;lcd数据传送
lcall woshou_ctl ;握手控制
mov a,sys_pwr
cjne a,#03h,start1_2
ljmp start2 ;转关闭
start1_2: cjne a,#02h,start1
;转集控
mov count1_t,#10h ;显示"---"
mov count2_t,#10h
mov count3_t,#10h
ljmp start1_1
;
start2: mov a,play_mem ;关闭
jz start3
lcall stop_ctl
lcall jxc
start3: setb play_led
setb rec_led
setb rew_led
setb ffw_led
jb san_bit,start4
setb power_led
sjmp start5
start4: clr power_led
start5: mov count1_t,#0fh ;显示"OFF"
mov count2_t,#0fh
mov count3_t,#00h
lcall lcd_data ;生成lcd数据
lcall transram ;lcd数据传送
lcall woshou_ctl ;握手控制
mov a,sys_pwr
cjne a,#03h,start1_1
ljmp start2
;
cjdata: mov 20h,#00h
mov 21h,#00h
mov c,p1.0
mov 00h,c ;l1
mov c,p1.1
mov 01h,c ;l2
mov c,p1.7
mov 02h,c ;l3
mov c,p3.2
mov 03h,c ;l5
mov c,p3.5
mov 04h,c ;l6
mov c,p3.4
mov 05h,c ;l7
mov c,p3.7
mov 06h,c ;l8
mov c,p3.6
mov 07h,c ;l9
mov c,p0.5
mov 08h,c ;l10
mov c,p0.6
mov 09h,c ;l11
ret
;
test_open: mov sp,#30h
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr read_p ;
mov pio1_tal,#00h
mov pio2_tal,#00h
mov k_num,#00h
mov 24h,#00h
lcall lcdreset ;lcd复位
open0: mov c,p3.3 ;测试程序
jc open1
jb read_p,open0 ;p3.3=0, 已读退出
setb read_p
lcall cjdata ;读端口
clr c
mov a,pio1_tal
addc a,20h
mov pio1_tal,a ;读端口累加
clr c
mov a,pio2_tal
addc a,21h
mov pio2_tal,a ;读端口累加
sjmp open0
open1: clr read_p ;p3.3=1,清除读标志
mov a,pio1_tal
cjne a,#0ffh,open2
mov a,pio2_tal
cjne a,#03h,open2
clr p0.0 ;端口测试通过,电源灯亮
lcall key_test
mov count1_t,#10h
mov count2_t,k_num
mov count3_t,#10h
mov a,24h
cjne a,#3fh,open1_1
mov count1_t,#08h ;测试完成
mov count2_t,#08h
mov count3_t,#08h
open1_1: lcall lcd_data ;生成lcd数据
lcall transram ;lcd数据传送
sjmp open0
open2: mov count1_t,#10h ;端口测试未通过
mov count2_t,#10h
mov count3_t,#10h
lcall lcd_data ;生成lcd数据
lcall transram ;lcd数据传送
sjmp open0
;
startdata: mov p3,#0ffh ;(11111111)
mov p2,#0ffh ;(11111111)
mov p1,#0ffh ;(11111111)
mov p0,#0ffh
mov play_mem,#0 ;机芯当前记忆
mov play_m,#0 ;暂停前记忆
clr p_sw
setb rec_c
setb play_c
clr comm1
mov count0,#0
mov count1,#0
mov count2,#0
mov count3,#0
mov woshou,#00h
mov wo_t,#00h
mov sys_pwr,#03h
mov tmod,#21h ;T0方式1定时,T1方式2
mov th0,#0dch
mov tl0,#0
mov th1,#0ffh
mov tl1,#0ffh
clr vol2 ;音量1
setb vol1
;mov scon,#50h ;串行方式1允许中断接收
;mov pcon,#80h ;T1波特发生器,57600 bit/s
;mov ip,#00h ;串口中断优先
clr et1 ;禁止t1中断
clr tf1 ;清中断标志
setb tr0
setb tr1
setb it0 ;外中断0 边沿触发
setb it1 ;外中断1 边沿触发
setb ex0 ;允许外中断0
setb ex1 ;允许外中断1
setb et0 ;允许t0中断
setb ea ;开放中断
ret
;
wos1: jnc wos0
ret
woshou_ctl: mov a,wo_t
cjne a,#20,wos1
wos0: mov a,woshou
mov woshou,#00h
jz wos2
cjne a,#01h,wo_c2
mov sys_pwr,#01h ;自由
lcall stop_ctl ;停机
lcall jxc
sjmp wos2
wo_c2: cjne a,#03h,wo_c3
mov sys_pwr,#03h ;关闭
sjmp wos2
wo_c3: cjne a,#04h,wo_c4
mov sys_pwr,#02h ;集控
lcall stop_ctl ;停机
lcall jxc
sjmp wos2
wo_c4: cjne a,#05h,wo_c5
mov sys_pwr,#02h ;集控
lcall play_ctl_x ;放音
lcall jxc
sjmp wos2
wo_c5: cjne a,#06h,wo_c6
mov sys_pwr,#02h ;集控
lcall ffw_ctl ;快进
lcall jxc
sjmp wos2
wo_c6: cjne a,#07h,wo_c7
mov sys_pwr,#02h ;集控
lcall rew_ctl ;快倒
lcall jxc
sjmp wos2
wo_c7: cjne a,#08h,wo_c8
mov sys_pwr,#02h ;集控
lcall rec_ctl_x ;录音
lcall jxc
sjmp wos2
wo_c8: cjne a,#09h,wo_c9
clr vol2 ;音量0
clr vol1
sjmp wos2
wo_c9: cjne a,#0ah,wo_c10
clr vol2 ;音量1
setb vol1
sjmp wos2
wo_c10: cjne a,#0bh,wo_c11
setb vol2 ;音量2
clr vol1
sjmp wos2
wo_c11: cjne a,#0ch,wos2
setb vol2 ;音量3
setb vol1
wos2: ret
;
;
b_t0: mov th0,#0dch
mov tl0,#0
push psw
push acc
dec tim ;T0定时中断 ,10ms
;mov comm,#00h ;清除通讯字节
inc au_to
inc wo_t
inc san
mov a,san
cjne a,#30,b_t0_1
b_t0_0: cpl san_bit
mov san,#0
sjmp b_t0_2
b_t0_1: jnc b_t0_0
b_t0_2: pop acc
pop psw
reti
;
nop
nop
ljmp start
nop
nop
;
key: clr kl1_pad ;键扫程序
setb kl2_pad
jnb kh1_pad,stop_p
jnb kh2_pad,rew_p
jnb kh3_pad,ffw_p
setb kl1_pad
clr kl2_pad
jnb kh1_pad,play_p
jnb kh2_pad,rec_p
jnb kh3_pad,clear_p
sjmp key_end2 ;无键按下
;
stop_p: lcall delay_5ms
jnb kh1_pad,stop_p1
sjmp key_end1
stop_p1: lcall stop_ctl
sjmp key_end
;
rew_p: lcall delay_5ms
jnb kh2_pad,rew_p1
sjmp key_end1
rew_p1: lcall rew_ctl
sjmp key_end
;
ffw_p: lcall delay_5ms
jnb kh3_pad,ffw_p1
sjmp key_end1
ffw_p1: lcall ffw_ctl
sjmp key_end
;
play_p: lcall delay_5ms
jnb kh1_pad,play_p1
sjmp key_end1
play_p1: lcall play_ctl
sjmp key_end
;
rec_p: lcall delay_5ms
jnb kh2_pad,rec_p1
sjmp key_end1
rec_p1: lcall rec_ctl
sjmp key_end
;
clear_p: lcall delay_5ms
jnb kh3_pad,clear_p1
sjmp key_end1
clear_p1: lcall clear_ctl
sjmp key_end1
;
key_end: lcall jxc
key_end1: mov a,p2 ;等待按键松开
anl a,#38h ;读3根行线
cjne a,#38h,key_end1
key_end2: setb kh1_pad
setb kh2_pad
setb kh3_pad
ret
;
delay10ms: mov r3,#20
dy1: mov r2,#230
djnz r2,$
djnz r3,dy1
ret
;
nop
nop
ljmp start
nop
nop
;
clear_ctl: mov count0,#0 ;计数器清零
mov count1,#0
mov count2,#0
mov count3,#0
ret
;
play_ctl_x: jb p_sw,play_ctl_x3 ;放音
setb play_cbit
clr ffw_cbit
clr rew_cbit
clr rec_cbit
mov play_mem,#2
mov play_m,#0
lcall jxctl
play_ctl_x3: ret
;
nop
nop
ljmp start
nop
nop
;
play_ctl: mov a,play_mem ;放音及暂停控制
cjne a,#02h,play_ctl2
jb moto_on,play_ctl1
mov au_to,#0 ;暂停
setb moto_on
mov play_m,play_mem
sjmp play_ctl3
play_ctl1: mov au_to,#0 ;重启
clr moto_on
mov play_m,#0
sjmp play_ctl3
;
play_ctl2: jb p_sw,play_ctl3 ;放音
setb play_cbit
clr ffw_cbit
clr rew_cbit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -