⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spdj.asm

📁 8051单片机汇编语言编写的UPD6464视频叠加遥控接收解码点歌程序。用于KTV房遥控点歌。
💻 ASM
📖 第 1 页 / 共 3 页
字号:
		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 + -