📄 spdj.asm
字号:
mov orderram1,#'T'
mov orderram2,#'V'
mov orderram3,#0ah
mov ordermark,#0ffh
ret
;**********************************
iniirf: mov coderam0,#0
mov coderam1,#0
mov coderam2,#0
mov coderam3,#0
mov pulsetime,#0 ;初始化INT1中断次数
mov codemark,#00h
ret
;****************************************************
codetab0: db code0 ;"0"的遥控码
db 30h
db code1 ;"1"的遥控码
db 31h
db code2 ;"2"的遥控码
db 32h
db code3 ;"3"的遥控码
db 33h
db code4 ;"4"的遥控码
db 34h
db code5 ;"5"的遥控码
db 35h
db code6 ;"6"的遥控码
db 36h
db code7 ;"7"的遥控码
db 37h
db code8 ;"8"的遥控码
db 38h
db code9 ;"9"的遥控码
db 39h
db 0ffh
codetab1: db codeEJT ;"出盒"的遥控码
db '*stop',0ah
db codeMUTE ;"静音"的遥控码
db '*mute',0ah
db codeTV ;"电视/TV"的遥控码
db '*TV',0ah
; db codePAUSE ;"暂停"的遥控码
; db '*pause',0ah
db codeRL ;"声道"的遥控码
db '*RL',0ah
; db codeFOWARD ;"快进"的遥控码
; db '*FW',0ah
; db codeTOWARD ;"快退"的遥控码
; db '*FD',0ah
db codeFREUP ;"音调大"的遥控码
db '*B+',0ah
db codeFREDW ;"音调小"的遥控码
db '*B-',0ah
db codeVOLDW ;"音量小"的遥控码
db '*N',0ah
db codeVOLUP ;"音量大"的遥控码
db '*M',0ah
db 0ffh
;************** numorder:歌号送入orderram中 **********
;入口参数:r0--播放歌号地址单元
numorder: mov r4,#4
loopord: mov a,@r0
cjne a,#'-',isvod
mov vodovermark,#00h
ret
isvod: mov @r1,a
inc r0
inc r1
djnz r4,loopord
mov vodovermark,#0ffh
ret
;************** movsongnum:移动歌曲号***********
movsongnum: mov r0,#songnub10
mov r1,#songnub20
mov r7,#9
upnum0: mov r4,#4
upnum1: mov a,@r1
mov @r0,a
inc r0
inc r1
djnz r4,upnum1
djnz r7,upnum0
mov songnuba0,#'-'
mov songnuba1,#'-'
mov songnuba2,#'-'
mov songnuba3,#'-'
ret
;************** vodsong:点歌处理程序 ***************************
vodsong: lcall predispm
mov dispram0,#88h
mov dispram1,#0fh
mov r6,#2
lcall sendbyte
mov temp2,#0fh
mov temp3,#88h
mov r2,#1
mov r3,#10
mov r0,#songnub10
loopmenu: mov dispram0,#0c0h
mov a,r2
mov b,#10
div ab
mov a,b
add a,#30h
mov dispram1,a
mov dispram2,#'.'
mov a,@r0
mov dispram3,a
inc r0
mov a,@r0
mov dispram4,a
inc r0
mov a,@r0
mov dispram5,a
inc r0
mov a,@r0
mov dispram6,a
mov r6,#7
lcall sendbyte
mov a,#20h
add a,temp2
mov temp2,a
clr a
addc a,temp3
mov temp3,a
mov dispram0,temp3 ;确定字符写入VideoRam的地址
mov dispram1,temp2
mov r6,#2
lcall sendbyte
inc r2
inc r0
djnz r3,loopmenu
lcall setex1
ret
;************** 字符闪烁 **************
blinkchar: mov a,line
rl a
rl a
mov r0,#songnub10
add a,r0
add a,column
mov r0,a
mov a,@r0
mov tmp,a
mov temp2,#11h
mov temp3,#88h
mov temp0,line
mov temp1,column
loopincline: mov a,line
cjne a,#0,noline0
ljmp loopinccol
noline0: mov a,#20h
add a,temp2
mov temp2,a
clr a
addc a,temp3
mov temp3,a
djnz temp0,noline0
loopinccol: mov a,column
cjne a,#0,nocol0
ljmp tolc
nocol0: mov a,#01h
add a,temp2
mov temp2,a
djnz temp1,nocol0
tolc: mov dispram0,temp3 ;确定字符写入VideoRam的地址
mov dispram1,temp2
mov r6,#2
lcall sendbyte
mov a,#0c0h
orl a,blinkmark
mov dispram0,a
mov dispram1,tmp
mov r6,#2
lcall sendbyte
ret
;******************************************************
clrscreen: mov dispram0,#VCLR
mov r6,#1
lcall sendbyte
ret
;************* sendbyte:输出n字节数据至uPD6464 *****************
;入口参数:r6-输出的数据个数;dispram0-输出数据的起始地址
sendbyte: clr CS
mov r1,#dispram0
nxsloop: mov r7,#8
mov a,@r1
sendloop: clr CLK
rlc a
mov DATAS,c
nop
nop
setb CLK
nop
nop
nop
nop
djnz r7,sendloop
inc r1
djnz r6,nxsloop
setb CS
setb DATAS
lcall delay5ms
ret
;************** 准备显示字符 ***************************
predisp: mov dispram0,#88h ;确定字符写入VideoRam的地址
mov dispram1,#23h
mov r6,#2
lcall sendbyte
predispm: mov dispram0,#80h ;确定显示起始位置
mov dispram1,#81h
mov r6,#2
lcall sendbyte
mov dispram0,#DISPON ;打开显示和LC
mov r6,#1
lcall sendbyte
ret
;************** 延时5ms**********************
delay5ms: mov r5,#10
dlyloop: mov r4,#250
djnz r4,$
djnz r5,dlyloop
ret
;*********** Codegather: 得到遥控码 **********
codegather: mov a,codemark
cjne a,#0aah,if_one
ljmp yescodezero
if_one: cjne a,#55h,eret
setb c
ljmp reccode
yescodezero: clr c
reccode: mov a,coderam3
rlc a
mov coderam3,a
mov a,coderam2
rlc a
mov coderam2,a
mov a,coderam1
rlc a
mov coderam1,a
mov a,coderam0
rlc a
mov coderam0,a
ret
eret: mov codemark,#0fh
ret
;*********** Learer:判断引导头子程序 **************************************
leader: mov a,tmpth0 ;if 1800h<T1<1d00h
;(12.3ms<T1<14.8ms)
cjne a,#2ch,no_th33h ;if TH0=18h
mov a,tmptl0 ;TH0=18h
cjne a,#48h,no_tl90h ;TH0=18h,if TL0=00h
is_lead: mov codemark,#0ffh ;是引导头,置codemark=0ffh
ret
no_tl90h: jnc is_lead ;TH0=18h,TL0>00h,OK!
l_lead: mov codemark,#00h ;Th0<18h(Time<Leader),
;置codemark=00h
ret
no_th33h: jnc glt33 ;TH0>18h
mov codemark,#00h ;TH0<18h(Time<leader),
;置codemark=00h
ret
glt33: cjne a,#35h,no_th35h ;if TH0=1dh
mov a,tmptl0 ;TH0=1dh
cjne a,#50h,no_tl18h ;TH0=1dh,if TL0=0h
ljmp is_lead ;TH0=1dh,TL0=00h,OK!
no_tl18h: jc is_lead ;TH0=1dh,TL0<00h,OK!
mov codemark,#0fh ;TH0=1d,TL0>00h(Time>Leader),
;置codemark=0fh
ret
no_th35h: jc is_lead ;TH0<1dh,OK!
mov codemark,#0fh ;TH0>1dh(Time>Leader),
;置codemark=0fh
ret
;*********** Iscodezero: 判断是否遥控码子程序 *********************************
iscode: mov a,tmpth0 ;if 0100h<T1<0580h
;(512uS<T1<2816uS)
cjne a,#01h,no_t01h ;if TH0=01h
mov a,tmptl0 ;TH0=01h
cjne a,#0d7h,no_t00h ;TH0=01h,if TL0=00h
is_zer: mov codemark,#0ffh ;是"0",置codemark=0ffh
ret
no_t00h: jnc is_zer ;TH0=01h,TL0>00h,OK!
no_zer: mov codemark,#00h ;Th0<01h(Time<Codezero),
;置codemark=00h
ret
no_t01h: jnc gl3 ;TH0>05h
mov codemark,#00h ;Th0<01h(Time<Codezero),
;置codemark=00h
ret
gl3: cjne a,#0ah,no_t5h ;if TH0=05h
mov a,tmptl0 ;TH0=05h
cjne a,#23h,no_t8h ;TH0=05h,if TL0=80h
ljmp is_zer ;TH0=05h,TL0=80h,OK!
no_t8h: jc is_zer ;TH0=05h,TL0<80h,OK!
mov codemark,#0fh ;TH0>05h(Time>Codezero),
;Set codemark=0fh
ret
no_t5h: jc is_zer ;TH0<05h,OK!
mov codemark,#0fh ;TH0>05h(Time>Codezero),
;Set codemark=0fh
ret
;*********** Codezero: 判断遥控码为"0"子程序 *********************************
codezero: mov a,tmpth0 ;if 0100h<T1<0380h
;(512uS<T1<1792uS)
cjne a,#01h,no_th01h ;if TH0=01h
mov a,tmptl0 ;TH0=01h
cjne a,#0d7h,no_tl00h ;TH0=01h,if TL0=00h
is_zero: mov codemark,#0aah ;是"0",置codemark=0aah
ret
no_tl00h: jnc is_zero ;TH0=01h,TL0>00h,OK!
no_zero: mov codemark,#00h ;非"0",置codemark=00h
ret
no_th01h: jnc glt3 ;TH0>01h
ljmp no_zero ;TH0<01h,BAD!
glt3: cjne a,#06h,no_th5h ;if TH0=03h
mov a,tmptl0 ;TH0=03h
cjne a,#74h,no_tl8h ;TH0=03h,if TL0=80h
ljmp is_zero ;TH0=03h,TL0=80h,OK!
no_tl8h: jc is_zero ;TH0=03h,TL0<80h,OK!
ljmp no_zero ;TH0=03h,TL0>80h,BAD!
no_th5h: jc is_zero ;TH0<03h,OK!
ljmp no_zero ;TH0>03h,BAD!
;*********** Codeone: 判断遥控码为"1"子程序 *********************************
codeone: mov a,tmpth0 ;if 038fh<T1<0580h
;(1822uS<T1<2816uS)
cjne a,#06h,no_th03h ;if TH0=03h
mov a,tmptl0 ;TH0=03h
cjne a,#8fh,no_tlf0h ;TH0=03h,if TL0=8fh
is_one: mov codemark,#55h ;是"1",置codemark=55h
ret
no_tlf0h: jnc is_one ;TH0=03h,TL0>8fh,OK!
no_one: mov codemark,#00h ;非"1",置codemark=00h
ret
no_th03h: jnc glt5 ;TH0>03h
ljmp no_one ;TH0<03h,BAD!
glt5: cjne a,#0ah,no_th05h ;if TH0=05h
mov a,tmptl0 ;TH0=05h
cjne a,#23h,no_tl08h ;TH0=05h,if TL0=80h
ljmp is_one ;TH0=05h,TL0=80h,OK!
no_tl08h: jc is_one ;TH0=05h,TL0<80h,OK!
ljmp no_one ;TH0=05h,TL0>80h,BAD!
no_th05h: jc is_one ;TH0<05h,OK!
ljmp no_one ;TH0>05h,BAD!
;*****************************
org 07fdh
ljmp init
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -