📄 okupd6464_0929.asm
字号:
mov r6,#0
CALL HB2
MOV LISTCOUNT,R3
MOV LISTCOUNT1,R4
MOV LISTCOUNT2,R5
mov a,LISTCOUNT1
anl a,#0fh
mov disdata,a
mov nby,#2
mov nbx,#4
LCALL displaychar
;-----------------------------------
mov a,LISTCOUNT2
swap a
anl a,#0fh
mov disdata,a
mov nby,#2
mov nbx,#5
LCALL displaychar
;-----------------------------------
mov a,LISTCOUNT2
anl a,#0fh
mov disdata,a
mov nby,#2
mov nbx,#6
LCALL displaychar
;---------------------------------------------display jin du
mov nby,#11
call clrrow
mov nbx,#0
mov nby,#11
mov disdata,#7ch
lcall displaychar
mov jinxinjishu,#16
mov a,jindu
cjne a,#0,jdisplayjinxi
jdisplaykg:
inc nbx
mov disdata,#10h
lcall displaychar
djnz jinxinjishu,jdisplaykg
mov nbx,#17
mov disdata,#7dh
lcall displaychar
jmp dismainexit
jdisplayjinxi:
mov a,jinxinjishu
subb a,jindu
mov jinxinjishu,a
jdisplayjinxi_1:
mov disdata,#1fh
inc nbx
lcall displaychar
djnz jindu,jdisplayjinxi_1
jdisplayjinxi_2:
mov disdata,#10h
inc nbx
lcall displaychar
djnz jinxinjishu,jdisplayjinxi_2
mov nbx,#17
mov disdata,#7dh
lcall displaychar
dismainexit:
setb status.3
ret
;============================================ remote programm
exit:
SETB EA ; 允许中断
pop psw
clr rs1
clr rs0
RETI ;
int_0:
push psw
CLR EA ; 暂时关闭CPU的所有中断请求
;clr rs1
;setb rs0
MOV R6,#10
SB:
CALL YS1; 调用882微秒延时子程序
JB P3.2,EXIT; 延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
DJNZ R6, SB; 重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
JNB P3.2, $ ; 等待高电平避开9毫秒低电平引导脉冲
MOV R6,#4
WAIT4MS:
CALL YS1 ; WAIT 4MS
JNB P3.2,EXIT
DJNZ R6,WAIT4MS
JB P3.2,$
;MOV R7,#16; 忽略前16位系统识别码
;JJJJA:JNB P3.2,$; 等待地址码第一位的高电平信号
;LCALL YS1; 高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
;MOV C,P3.2; 将P3.2引脚此时的电平状态0或1存入C中
;JNC UUUA; 如果为0就跳转到UUUA
;LCALL YS3; 检测到高电平1的话延时1毫秒等待脉冲高电平结束
;UUUA: DJNZ R7,JJJJA
MOV R1,#23H ; 设定1AH为起始RAM区
MOV R2,#4; 接收从1AH到1BH的2个内存,用于存放操作码和操作反码
PP:
MOV R3,#8; 每组数据为8位
JJJJ:
JNB P3.2,$; 等待地址码第一位的高电平信号
LCALL YS1; 高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
MOV C,P3.2; 将P3.2引脚此时的电平状态0或1存入C中
JNC UUU; 如果为0就跳转到UUU
LCALL YS3; 检测到高电平1的话延时1毫秒等待脉冲高电平结束
UUU:
MOV A,@R1; 将R1中地址的给A
RRC A; 将C中的值0或1移入A中的最低位
MOV @R1,A; 将A中的数暂时存放在R1数值的内存中
DJNZ R3,JJJJ; 接收满8位换一个内存
INC R1; 对R1中的值加1,换下一个RAM
DJNZ R2,PP ; 接收完8位数据码和8位数据反码,存放在1AH/1BH中
MOV A,25H
CPL A; 对1AH取反后和1BH比较
CJNE A,26H,EXIT; 如果不等表示接收数据发生错误,放弃
;========================================操作程序
send:
clr status.3 ; clr banduan dismian
mov a,25h
cjne a,#07h,send_1 ;
ljmp voladd
send_1:
cjne a,#06h,send_2
jmp VOLMIUS
send_2:
cjne a,#0fh,send_3
ljmp NEXTTRACK
send_3:
cjne a,#03h,send_4
jmp PRETRACK
send_4:
cjne a,#0bh,send_5
setb status.3 ; clr banduan dismian
ljmp PLAYPAUSE
send_5:
cjne a,#05h,send_6
call sendpower
call sendpower
call sendpower
ljmp tvmode
send_6:
mov a,25h
cjne a,#08h,send_7
; call sendpower
;call sendpower
;call sendpower
ljmp miusemode
;------------------------------------
send_7:
; call sendpower
; call sendpower
; call sendpower
send_7_1:
mov a,25h
jb status.0,tvmodesend ; miuse mode;
miusesend:
cjne a,#01h,miusesend1
jmp NEXTLIST
miusesend1:
cjne a,#09h,miusesend2
jmp PRELIST
miusesend2:
cjne a,#00h,miusesend3
jmp uparrow
miusesend3:
cjne a,#0ah,miusesend4
jmp downarrow
miusesend4:
cjne a,#04h,miusesend5
jmp menu
miusesend5:
cjne a,#02h,miusesend6
jmp select
miusesend6:
jmp exit
;=======================
tvmodesend:
jb searchstaus.2,searchstaussend
;cjne a,#01h,tvmodesend1 ; no searchstaus
;jmp NEXTLIST
tvmodesend1:
;cjne a,#09h,tvmodesend2
;jmp PRELIST
tvmodesend2:
;cjne a,#00h,tvmodesend3
;jmp uparrow
tvmodesend3:
;cjne a,#0ah,tvmodesend4
;jmp downarrow
tvmodesend4:
cjne a,#04h,tvmodesend5
jmp search
tvmodesend5:
;cjne a,#02h,tvmodesend6
;jmp ensure
tvmodesend6:
jmp exit
;------------------------------------
searchstaussend:
jb searchstaus.3,selectstaussend
cjne a,#01h,searchstaussend1
jmp rightarrow
searchstaussend1:
cjne a,#09h,searchstaussend2
jmp leftarrow
searchstaussend2:
cjne a,#00h,searchstaussend3
jmp shangarrow
searchstaussend3:
cjne a,#0ah,searchstaussend4
jmp xianarrow
searchstaussend4:
cjne a,#04h,searchstaussend5
jmp search
searchstaussend5:
cjne a,#02h,searchstaussend6
jmp ensure
searchstaussend6:
jmp exit
;---------------------------------------------------------
selectstaussend:
cjne a,#01h,selectstaussend1
jmp searchstaussend6
selectstaussend1:
cjne a,#09h,selectstaussend2
jmp searchstaussend6
selectstaussend2:
cjne a,#00h,selectstaussend3
jmp shangselect
selectstaussend3:
cjne a,#0ah,selectstaussend4
jmp xianselect
selectstaussend4:
cjne a,#02h,selectstaussend5
jmp selecttrack
selectstaussend5:
;cjne a,#02h,selectstaussend6
;jmp ensure
selectstaussend6:
jmp exit
;****************************************************
;***************************************************remote lose key programm
losekey:
clr ea
setb status.1
mov r7,#37
; CALL YS3
losekey_1:
call D39MS
jnb p3.2,losekey_2
djnz r7,losekey_1
losekey_1_1: ;lose key
clr status.1
jmp loseexit
losekey_2:
CALL YS1
mov losetimes,#6
losekey_2_1:
call YS1
jb p3.2,losekey_1_1; if low 9ms, is high to exit
djnz losetimes,losekey_2_1
jnb p3.2,$ ; wait low 9ms
;----------------------------------- repeat high 2ms
;mov losetimes,#2
losekey3:
;call YS1
;jnb p3.2,loseexit
;djnz losetimes,losekey3
;clr status.1 ; lose key
loseexit:
ret
;================================================ remote delay
YS1: MOV R4,#18 ; 延时子程序1,精确延时882微秒
D1: MOV R5,#21
DJNZ R5,$
DJNZ R4,D1
RET
;------------------------------------
YS2:
MOV R4,#10 ; 延时子程序2,精确延时4740微秒
D2:
MOV R5,#217
DJNZ R5,$
DJNZ R4,D2
RET
;-------------------------------------------
YS3:
MOV R4,#2; 延时程序3,精确延时1000微秒
D3:
MOV R5,#228
DJNZ R5,$
DJNZ R4,D3
RET
;--------------------------------------
D39MS:
MOV R4,#6; 延时程序3,精确延时1000微秒
D39:
MOV R5,#228
DJNZ R5,$
DJNZ R4,D39
RET
;*******************************************************remote lose key programm end
;*******************************************************select status
selecttrack:
call losekey
jb status.1,selecttrack; no losekey go on
mov r0,searchcount
mov a,@r0
mov senddata,a
mov dptr,#exttab26
call writebd
call delay20ms
call displaymain
mov searchstaus,#0
jmp exit
;-------------------------------------------------
xianselect:
call losekey
jb status.1,xianselect; no losekey go on
xianselect_1:
mov disdata,#10h
lcall displaychar
mov a,nby
cjne a,searchtime,xianselect_1_1
mov nby,#0
mov searchcount,#4ch
jmp xianselectend
xianselect_1_1:
INC searchcount
inc nby
xianselectend:
mov disdata,#3bh
call displaychar
jmp exit
;------------------------------------------------
shangselect:
call losekey
jb status.1,shangselect; no losekey go on
shangselect_1:
mov disdata,#10h
lcall displaychar
mov a,nby
cjne a,#0,shangselect_1_1
mov nby,searchtime
mov a,searchtime
add a,searchcount
mov searchcount,a
jmp shangselectend
shangselect_1_1:
dec searchcount
dec nby
shangselectend:
mov disdata,#3bh
call displaychar
jmp exit
;****************************************************seacrh status
leftarrow:
call losekey
jb status.1,leftarrow; no losekey go on
leftarrowend:
mov nby,udcurson
mov nbx,lrcurson
mov disdata,#10h
call displaychar
mov a,lrcurson
cjne a,#4,leftarrowend_1
mov lrcurson,#12
JMP leftarrowend_2
leftarrowend_1:
dec lrcurson
leftarrowend_2:
mov nby,udcurson
mov nbx,lrcurson
mov disdata,#3dh
call displaychar
jmp exit
;------------------------------------------------------
rightarrow:
call losekey
jb status.1,rightarrow; no losekey go on
rightarrowend:
mov nby,udcurson
mov nbx,lrcurson
mov disdata,#10h
call displaychar
mov a,lrcurson
cjne a,#12,rightarrowend_1
mov lrcurson,#4
JMP rightarrowend_2
rightarrowend_1:
INC lrcurson
rightarrowend_2:
mov nby,udcurson
mov nbx,lrcurson
mov disdata,#3dh
call displaychar
jmp exit
;---------------------------------------------------
shangarrow:
call losekey
jb status.1,shangarrow; no losekey go on
shangarrowend:
mov nby,udcurson
mov nbx,lrcurson
mov disdata,#10h
call displaychar
mov a,udcurson
cjne a,#4,shangarrowend_1
mov udcurson,#10
JMP shangarrowend_2
shangarrowend_1:
dec udcurson
dec udcurson
shangarrowend_2:
mov nby,udcurson
mov nbx,lrcurson
mov disdata,#3dh
call displaychar
jmp exit
;----------------------------------
xianarrow:
call losekey
jb status.1,xianarrow; no losekey go on
xianarrowend:
mov nby,udcurson
mov nbx,lrcurson
mov disdata,#10h
call displaychar
mov a,udcurson
cjne a,#10,xianarrowend_1
MOV udcurson,#4
JMP xianarrowend_2
xianarrowend_1:
INC udcurson
INC udcurson
xianarrowend_2:
mov nby,udcurson
mov nbx,lrcurson
mov disdata,#3dh
call displaychar
jmp exit
;===========================================
; function
;1 .in search modle setb searchstatus.2
;2. no search status exit search modle
search:
call losekey
jb status.1,search; no losekey go on
;---------------------------------------------------------
jnb searchstaus.5,search_1
exitsearch: ;------------------no search dao exit search status
clr searchstaus.2
call displaymain
mov searchstaus,#0
jmp exit
;================================
search_1:
setb searchstaus.2
call clrscreen
mov nby,#0
mov nbx,#6
mov disdata,#23h ;S
LCALL displaychar
;mov nby,#0
mov nbx,#7
mov disdata,#55h ;e
LCALL displaychar
;mov nby,#1
mov nbx,#8
mov disdata,#51h ;a
LCALL displaychar
;mov nby,#1
mov nbx,#9
mov disdata,#62h ;r
LCALL displaychar
;mov nby,#1
mov nbx,#10
mov disdata,#53h ;c
LCALL displaychar
;mov nby,#1
mov nbx,#11
mov disdata,#58h ;h
LCALL displaychar
;---------------------------------------display 0-10 a-z
mov count,#0
mov dptr,#searchtab
mov nby,#3
mov nbx,#3
seardisloop:
mov a,count
movc a,@a+dptr
cjne a,#88h,nextline
jmp displayend
nextline:
cjne a,#99h,huanling
inc nby
inc nby
mov nbx,#3
inc count
jmp seardisloop
huanling:
inc nbx
mov disdata,a
call displaychar
inc count
jmp seardisloop
displayend:
mov nby,#4
mov nbx,#4
mov disdata,#3dh
call displaychar
mov lrcurson,#4
mov udcurson,#4
jmp exit
;================================================
ensure:
call losekey
jb status.1,ensure; no losekey go on
mov searchtime,#0
mov searchcode,#4bh ; ji lu search code chu zhi
inc searchcode
setb searchstaus.4 ; enter search select status
mov flashtime,#3
ensureend: ; flash 3 time start
mov nby,udcurson
mov nbx,lrcurson
mov disdata,#10h
call displaychar
call delay100ms
;----------------------------------
mov nby,udcurson
mov nbx,lrcurson
mov disdata,#3dh
call displaychar
call delay100ms
;----------------------------------
djnz flashtime,ensureend
;----------------------------------------------
search_2: ; 计算相配的数据
call clrscreen
mov a,udcurson ; 0-9
cjne a,#4,search_2_1
mov dptr,#searchtab
JMP search_2_4
search_2_1:
cjne a,#6,search_2_2 ; a-j
mov dptr,#searchtab1
JMP search_2_4
search_2_2:
cjne a,#8,search_2_3 ;h-q
mov dptr,#searchtab2
JMP search_2_4
search_2_3:
mov dptr,#searchtab3 ;r-z
search_2_4:
DEC lrcurson ; dec ini data
DEC lrcurson ;
DEC lrcurson ;
DEC lrcurson ;
mov a,lrcurson
movc a,@a+dptr
add a,#30h
mov titlechar,a
ADD A,#20H
MOV titlechar1,a
mov nby,#0
titlesearch:
call delay40ms
mov dptr,#exttab25 ; get numplaying tyracks
mov duizao,#36h
call readwriteipod
mov r0,#89h
mov a,@r0
mov searchcount,a ;numplaying tyracks
mov searchsx,#0ffh
titleseachloop:
call delay80ms
inc searchsx
mov senddata,searchsx
mov dptr,#exttab17 ;
mov duizao,#21h
call readwritebd
;---------------------------------------------------------------
mov r0,#86h
mov a,@r0
cjne a,titlechar1,titleseachloop_1
jmp titleseachloop_2
titleseachloop_1:
cjne a,titlechar,titlesearch_1 ; no xiang den
titleseachloop_2:
inc searchtime
SETB searchstaus.0
setb searchstaus.3 ; in selece module
mov r0,searchcode ; 找到
mov @r0,searchsx ;?记录找到的 索引值
inc searchcode ; ji lu xia yi time
call disoktitlename
djnz searchcount,contineseach
inc searchsx
mov senddata,searchsx
mov dptr,#exttab17
mov duizao,#21h ;
call readwritebd
mov r0,#86h
mov a,@r0
cjne a,titlechar1,titleseachloop_3
jmp titleseachloop_4
titleseachloop_3:
cjne a,titlechar,searchend
titleseachloop_4:
inc searchtime
SETB searchstaus.0
setb searchstaus.3 ; 找到 in selece module
mov r0,searchcode
mov @r0,searchsx ;?记录找到的 索引值
;inc searchcode ; end time bu jilu
call disoktitlename
jmp searchend
;----------------------------------------------
contineseach:
inc nby
jmp titleseachloop
titlesearch_1:
djnz searchcount,titleseachloop
mov senddata,searchsx
mov dptr,#exttab17
mov duizao,#21h ;
call readwritebd
mov r0,#86h
mov a,@r0
cjne a,titlechar1,titleseachloop_5
jmp titleseachloop_6
titleseachloop_5:
cjne a,titlechar,searchend
titleseachloop_6:
SETB searchstaus.0
setb searchstaus.3 ; 找到 in selece module
mov r0,searchcode
mov @r0,searchsx ; 记录找到的 索引值
;inc searchcode
inc searchtime
call disoktitlename
;jmp searchend
;-------------------------------------------
searchend:
JB searchstaus.0,DISNOSEARCHend
;-------------------------------------------- DISPLAY "NO SEARCH "
cpl searchstaus.5
mov count,#0
mov dptr,#NOSEAVHTAB
mov nby,#5
mov nbx,#1
DISNOSEARCH:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -