📄 spdj.asm
字号:
inc dptr
ljmp gotcode
ifstart: mov a,#codeFOWARD
cjne a,coderam2,ifpresong
lcall clrmark
lcall clrscreen
lcall predisp
mov dispram0,#0c0h ;Display "START"
mov dispram1,#'S'
mov dispram2,#'T'
mov dispram3,#'A'
mov dispram4,#'R'
MOV DISPRAM5,#'T'
mov r6,#6
lcall sendbyte
ljmp playnext
ifpresong: mov a,#codePRE ;判断是否"上一首歌"
cjne a,coderam2,ifnextsong
lcall clrmark
lcall clrscreen
mov r0,#songnub10
mov r1,#orderram2
lcall numorder
mov a,vodovermark
cjne a,#00h,reptsong
mov ordermark,#00h
ljmp exitint0
reptsong: mov orderram0,#'*'
mov orderram1,#0f0h
mov orderram6,#0ah
mov ordermark,#0ffh
lcall predisp
mov dispram0,#0c0h ;Display "PREVIOUS"
mov dispram1,#'P'
mov dispram2,#'R'
mov dispram3,#'E'
mov dispram4,#'V'
mov dispram5,#'I'
mov dispram6,#'O'
mov dispram7,#'U'
mov dispram8,#'S'
mov r6,#09h
lcall sendbyte
lcall setex1
ljmp exitint0
ifnextsong: mov a,#codeNEXT ;判断是否"下一首歌"
cjne a,coderam2,ifinsert
lcall clrmark
lcall clrscreen
lcall predisp
mov dispram0,#0c0h ;Display "NEXT"
mov dispram1,#'N'
mov dispram2,#'E'
mov dispram3,#'X'
mov dispram4,#'T'
mov r6,#05h
lcall sendbyte
playnext: lcall ifdl
lcall movsongnum
mov r0,#songnub10
mov r1,#orderram2
lcall numorder
mov a,vodovermark
cjne a,#00h,nextsong
mov ordermark,#00h
ljmp exitint0
nextsong: mov orderram0,#'*'
mov orderram1,#0f0h
mov orderram6,#0ah
mov ordermark,#0ffh
mov songmark,#00h
lcall setex1
ljmp exitint0
ifinsert: mov a,#codeINS ;if "INSERT"
cjne a,coderam2,ifenter0
mov insertmark,#0ffh
mov songmark,#00h
lcall clrscreen
lcall predisp
mov dispram0,#0c0h ;Display "INSERT"
mov dispram1,#'I'
mov dispram2,#'N'
mov dispram3,#'S'
mov dispram4,#'E'
mov dispram5,#'R'
mov dispram6,#'T'
mov dispram7,#':'
mov r6,#08h
lcall sendbyte
mov dispram0,#0c2h
mov dispram1,#'-'
mov r6,#02h
lcall sendbyte
lcall vodsong
ljmp exitint0
ifenter0: mov a,#codeCONT1 ;判断是否"菜单"
cjne a,coderam2,ifenter1
ljmp showmenu
ifenter1: mov a,#codeCONT2
cjne a,coderam2,ifnum
showmenu: mov a,tvmark
cjne a,#0ffh,sss
ljmp dispm
sss: lcall switv
mov tvmark,#0ffh
dispm: lcall clrscreen
mov songmark,#0ffh
mov insertmark,#00h
lcall vodsong
mov blinkmark,#02h
lcall blinkchar
ljmp exitint0
ifnum: mov dptr,#codetab0 ;比较是否"0~9"
gottcode: clr a
movc a,@a+dptr ;取遥控码
cjne a,#0ffh,datacode
mov a,songmark
cjne a,#0ffh,outint0
ljmp xiugai
outint0: ljmp exitint0
datacode: cjne a,coderam2,jmpnxnum
clr a
inc dptr
movc a,@a+dptr
mov tmp,a
mov a,insertmark
cjne a,#00h,isinsnum
mov a,songmark
cjne a,#0ffh,outint0
ljmp isvodnum
jmpnxnum: ljmp nextnum
isinsnum: mov a,tmp
cjne a,#31h,ifnum2
ljmp exitint0
ifnum2: cjne a,#32h,vailnum
ljmp exitint0
vailnum: mov dispram0,#88h ;确定字符写入VideoRam的地址
mov dispram1,#2ah
mov r6,#2
lcall sendbyte
mov dispram0,#0c0h
mov dispram1,tmp
mov r6,#02h
lcall sendbyte
mov a,tmp
anl a,#00001111b
cjne a,#0,nonum10
mov a,#10
nonum10: mov r3,a
dec r3
dec r3
rl a
rl a
mov r0,#songnub10
add a,r0
dec a
mov r0,a
mov tmp,a
mov r1,#temp3
mov r4,#4
movnum: mov a,@r0
cjne a,#'-',proins
ljmp exitint0
proins: mov @r1,a
dec r0
dec r1
djnz r4,movnum
mov r1,tmp
dec tmp
dec tmp
dec tmp
dec tmp
mov r0,tmp
dwnextnum: mov r4,#4
dwnum: mov a,@r0
mov @r1,a
dec r0
dec r1
djnz r4,dwnum
djnz r3,dwnextnum
mov songnub20,temp0
mov songnub21,temp1
mov songnub22,temp2
mov songnub23,temp3
lcall setex1
ljmp exitint0
isvodnum: mov a,line
rl a
rl a
mov r0,#songnub10
add a,r0
add a,column
mov r0,a
mov a,tmp
mov @r0,a
mov blinkmark,#0
lcall blinkchar
mov a,column
cjne a,#3,ifcolerr
mov column,#0
mov a,line
cjne a,#9,iflineerr
ljmp blinknext
ifcolerr: jnc colineerr
inc column
blinknext: mov blinkmark,#02h
lcall blinkchar
lcall setex1
ljmp exitint0
iflineerr: jnc colineerr
inc line
ljmp blinknext
colineerr: mov line,#1
mov column,#0
ljmp blinknext
nextnum: inc dptr ;准备比较下一个遥控码
inc dptr
ljmp gottcode
xiugai: mov a,#codePAUSE
cjne a,coderam2,exitint0
mov a,line
cjne a,#1,ifc0
mov a,column
cjne a,#0,ifc0
ljmp exitint0
ifc0: mov blinkmark,#00h
lcall blinkchar
mov a,column
cjne a,#0,rrr
mov column,#3
dec line
ljmp wfj
rrr: dec column
wfj: mov a,line
rl a
rl a
mov r0,#songnub10
add a,r0
add a,column
mov r0,a
mov a,#'-'
mov @r0,a
mov blinkmark,#02h
lcall blinkchar
lcall setex1
exitint0: clr tr0
mov th0,#0
mov tl0,#0
lcall iniirf
clr LED
clr ie0
setb ex0
clr BEEP
reti
;************** Comm: 串行通信中断程序 *******************
comm: clr es
push acc
push psw
push b
setb rs0
clr rs1
looprec0: mov a,sbuf
mov recram0,a
clr ri
mov a,recram0
cjne a,#0ffh,ifoverord ;是否'*NOP\n'命令
mov a,ordermark
cjne a,#0ffh,jmpnop
senddata: mov r0,#orderram0
loopti: mov a,@r0
mov sbuf,a
inc r0
jnb ti,$
clr ti
cjne a,#0ah,loopti
ljmp exites
jmpnop: mov orderram0,#'*' ;命令单元存放"*NOP\n"
mov orderram1,#0ffh
mov orderram2,#0ah
ljmp senddata
ifoverord: cjne a,#0f0h,jmpnop ;是否'*over\n'命令
lcall ifdl
lcall movsongnum
mov r0,#songnub10
mov r1,#orderram2
lcall numorder
mov a,vodovermark
cjne a,#0ffh,jmptvk
mov orderram0,#'*'
mov orderram1,#0f0h
mov orderram6,#0ah
ljmp senddata
jmptvk: mov a,tvmark
cjne a,#0ffh,jmpnop
lcall switv
mov tvmark,#00h
ljmp senddata
exites: pop b
pop psw
pop acc
setb es
mov ordermark,#00h
reti
;************** EX1中断:延时4S 后关闭叠加的字符***************
displayoff: mov a,dpofftl
add a,#1
mov dpofftl,a
clr a
addc a,dpoffth
mov dpoffth,a
clr a
addc a,dpoffhh
mov dpoffhh,a
cjne a,#04h,ifx1over
dpoff: clr ex1
acall initime
acall clrmark
mov songmark,#00h
mov insertmark,#00h
lcall clrscreen
reti
ifx1over: jnc dpoff
reti
;*******************************************
clrmark: mov songmark,#00h
mov insertmark,#00h
ret
;************************************
ifdl: mov r0,#songnuba0
mov r1,#orderram1
lcall numorder
mov a,line
cjne a,#01h,lfg
ret
lfg: mov a,vodovermark
cjne a,#0ffh,xswc
ret
xswc: dec line
ret
;*************************************
setex1: setb ex1
initime: mov dpofftl,#0
mov dpoffth,#0
mov dpoffhh,#0
ret
;***********************************************
switv: mov orderram0,#'*'
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -