📄 cd64k.asm
字号:
JNB HSBHOLD,HSBSMSGFF
SETB HSBBCK
SETB HSBSEND
CLR HSBHOLD
MOV HSBTCNT,#29H
HSBSMSG11: NOP ;
JNB HSBSEND,HSBSMSG3F
NOP
JB HSBBCK,HSBSMSG11
NOP
JB HSBBCK,HSBSMSG11
MOV HSBBUFPNT,#00H
MOV HSBBUF,R6
MOV HSBBUF+1,R7
HSBSMSG12: MOV A,HSBBUF+1
RLC A
MOV HSBBUF+1,A
MOV A,HSBBUF
RLC A
MOV HSBBUF,A
MOV HSBSDA,C
INC HSBBUFPNT
MOV A,HSBBUFPNT
MOV C,ACC.0
MOV HSBHOLD,C
HSBSMSG15: NOP
NOP
JNB HSBSEND,HSBSMSG3F
MOV A,HSBBUFPNT
MOV C,HSBBCK
MOV ACC.0,C
XRL A,HSBBUFPNT
JNZ HSBSMSG15
MOV A,HSBBUFPNT
CJNE A,#10H,HSBSMSG16
MOV HSBBUF,#80H ;发送停止位1
HSBSMSG16: MOV A,#10H
CLR C
SUBB A,HSBBUFPNT
JNC HSBSMSG12
SETB HSBHOLD
SETB HSBBCK
SETB HSBSDA
NOP
CLR IE1
NOP
CLR HSBSEND
CLR IE1
SETB EX1
CLR A ;发送成功标志
RET
HSBSMSG3F: MOV A,#01H ;发送不成功标志
HSBSMSGFF: CLR IE1
SETB EX1
RET
;-----------------------------------------------------------
;ACC.2 HORVKEY , ACC.1 POWERKEY , ACC.0 MENUKEY
READPUSHKEY: SETB HORVKEY
SETB POWERKEY
SETB MENUKEY
MOV A,#0FFH
MOV C,HORVKEY
MOV ACC.6,C
MOV C,POWERKEY
MOV ACC.5,C
MOV C,MENUKEY
MOV ACC.4,C
XCH A,KEYSTEMP ;保存新状态
XRL A,KEYSTEMP ;新状态相同位为 0
MOV R1,A ;新状态相同位为 0
CPL A
MOV R2,A ;新状态相同位为 1
MOV A,KEYSTEMP
XRL A,KEYSTATE ;新-原状态比较
ANL A,#0F0H ;不同位为 1
ANL A,R2 ;新状态不同,当位清0
SWAP A
ORL A,KEYSTATE ;与未处理的变化相加
ANL A,#0FH
MOV R3,A ;按键变化状态
MOV A,KEYSTATE
ANL A,R1 ;
MOV R4,A ;如新状态相同,原状态清0
MOV A,KEYSTEMP
ANL A,R2 ;如新状态不同,新状态清0
ORL A,R4 ;如新状态相同,取新状态
ANL A,#0F0H ;如新状态不同,取原状态
ORL A,R3
MOV KEYSTATE,A
RET
;-------------------------------------------------------------------
INITHDW: CLR RMKEYENB
CLR RMTSNLHI
MOV RMKEYINPUT,#ISNULL
MOV SYSTCRL,#32H ;5ms定时
MOV SYSTCRH,#0AH ;50ms定时
CLR INKEYENB
MOV PENYBAK,#00H
MOV PENXBAK,#00H
MOV DSPFLCTR,#64H ;500ms
CLR DSPFLENB ;闪动标志
CLR RPENB ;数码电位器已旋转标志
MOV KEYSTATE,#0F0H
MOV KEYSTEMP,#0FFH
CLR ENBDELAYMUTE ;延迟静音使能
MOV DELAYMUTECTR,#14H ;延迟静音
CLR HSBRECEIVE
CLR HSBREQUEST
CLR HSBSEND
CLR HSBCMDENB
SETB HSBHOLD
SETB HSBBCK
SETB HSBSDA
SETB HSBINTESLT
MOV HSBTCNT,#29H
SETB P2.7
MOV C,P2.7
MOV MULTILANGUAGE,C ;多语言系统
CLR ISCHINESE ;为英文语言
CLR LANCHANGE
MOV PROGSTATE,#00H
MOV TCON,#05H ;INT0,INT1为下降沿触发
MOV TMOD,#62H ;T0为自动重装八位计时 T1计数
MOV TL0,#9CH ;T0作0.1ms定时器
MOV TH0,#9CH
MOV TL1,#0FFH ;T1作数码电位器中断
MOV TH1,#0FFH
CLR TR0
CLR TR1
CLR TF0
CLR TF1
RET
NOP
NOP
NOP
;-------------------------------------------------------------------
hsbtmp: mov r6,#34h
mov r7,#80h
lcall HSBMSGRET
JNZ HSBTMP
NOP
NOP
RET
;-------------------------------------------------------------------
START: CLR EA
MOV SP,#60H
MOV PSW,#00H
NOP
; CLR POWERUPDISP
; LCALL DELAY100MS
LCALL INITHDW
MOV DPTR,#L24F7
LCALL L20BD ;初始化
; DW PLMAINEV ;MAIN VERTICAL
xl1: MOV DPTR,#PLWELEH ;公司版面H
; MOV DPTR,#PLWELEV ;公司版面V
LCALL L20EC
; ljmp xl1
NOP
NOP
NOP
MOV IP,#06H ;INT1,T0优先
MOV IE,#8FH ;INT0,INT1,T0,T1
SETB TR0
SETB TR1
NOP
MOV HSBERRNUMTCR,#14H
CLR HSBERRENB ;出错使能
; LCALL HSBTMP
; MOV R6,#08H
; MOV R7,#80H
; LCALL HSBSENDMSG
LCALL STARTGR32B
LJMP POWERDOWN
;-------------------------------------------------------------------
WLOOP: MOV HSBERRNUMTCR,#10H ;出错次数
CLR HSBERRENB ;出错使能
JNB GETPENENBLED,WLP110
CLR GETPENENBLED
LCALL GETPENKEYNAME
MOV A,B
JZ WLP110
LJMP WLP801
WLP110: JNB INKEYENB,WLP111
JNB ENBDELAYMUTE,WLP110K1 ;延迟静音使能
DJNZ DELAYMUTECTR,WLP110K1 ;延迟静音
CLR ENBDELAYMUTE
MOV C,ENBMUTE
MOV MUTEPORT,C
WLP110K1: CLR INKEYENB
LCALL READPUSHKEY
WLP111: MOV B,#00H
MOV A,KEYSTATE
JNB ACC.1,WLP112
ANL KEYSTATE,#0FDH
JB ACC.5,WLP112 ;为松开按键
MOV B,#MASTPWRKEY ;插入开机/关机处理
LJMP WLP801
WLP112: JNB ACC.0,WLP113
ANL KEYSTATE,#0FEH
JB ACC.4,WLP113 ;为松开按键
MOV B,#MASTMENUKEY ;插入菜单按键处理
LJMP WLP801
WLP113: JNB ACC.2,WLP101
ANL KEYSTATE,#0FBH
JB ACC.6,WLP114 ;横向
SETB PLACEDIR ;插入更新为纵向显示
MOV B,#MASTDIRKEY
LJMP WLP801
WLP114: CLR PLACEDIR ;插入更新为横向显示
MOV B,#MASTDIRKEY
LJMP WLP801
WLP101: MOV A,RMKEYINPUT ;遥控===========
CJNE A,#INPUTENB,WLP121
MOV DPTR,#REMOTEKEYTAB
WLP102: CLR A
MOVC A,@A+DPTR
JZ WLP108
INC DPTR
MOV R1,A
CLR A
MOVC A,@A+DPTR
INC DPTR
CJNE A,RMKEYWORD,WLP102
JB RMKEYCNTUE,WLP103 ;连续键
SJMP WLP106
WLP103: MOV A,R1
CJNE A,#02H,WLP104
SJMP WLP106
WLP104: CJNE A,#03H,WLP108
WLP106: MOV B,R1
MOV RMKEYINPUT,#ISNULL
LJMP WLP801
WLP108: MOV RMKEYINPUT,#ISNULL
WLP121: JNB RPENB,WLP131 ;旋钮
CLR RPENB
JB RPDIR,WLP122
MOV B,#MASTDOWNKEY
LJMP WLP801
WLP122: MOV B,#MASTUPKEY
LJMP WLP801
WLP131: JNB HSBKEYENB,WLP132 ;数码流状态改变处理
MOV A,MASTINPUT
XRL A,#10H
JZ WLP131K
MOV MASTDSNAME,HSBKEYBUF
MOV MASTDSFORMAT,HSBKEYBUF+1
WLP131K: CLR HSBKEYENB
MOV B,#MASTHSBKEY
LCALL GDSFMTROK
LJMP WLP801
WLP132: LJMP WLOOP
WLP801: MOV A,POWERSTATE ;不能改变B
XRL A,#SPOWERUP
JZ WLP802 ;已开机
MOV A,B ;已关机
XRL A,#01H
JZ WLP802 ;电源请求
LJMP WLOOP
WLP802: LCALL GETPRGSTATE
LCALL GETPRGFUN
JC WLP803
LJMP WLOOP
WLP803: MOV A,R2
ANL A,#3FH
MOV R2,A
ADD A,R2
ADD A,R2
MOV DPTR,#FUNTABLE
JMP @A+DPTR
WLEND: LJMP WLOOP
NOP
NOP
NOP
LJMP START
;-----------------------------------------------------------------
;返回状态数据地址于DPTR
GETPRGSTATE: MOV DPTR,#PRGSTATETABLE
CLR C
MOV A,#MAXPRGSTATE
SUBB A,PROGSTATE
JNC GETPRGST01
MOV PROGSTATE,#MAXPRGSTATE
GETPRGST01: MOV A,PROGSTATE
RL A
MOV R1,A
MOVC A,@A+DPTR
XCH A,R1
INC DPTR
MOVC A,@A+DPTR
MOV DPL,A
MOV A,R1
MOV DPH,A
RET
;-----------------------------------------------------------------
GETPRGFUN: MOV A,#00H
MOVC A,@A+DPTR
CLR C
JZ GETFUN003
CJNE A,B,GETFUN00E
SETB C
GETFUN003: MOV A,#01H
MOVC A,@A+DPTR
MOV PROGSTATE,A ;得到状态
MOV A,#02H ;
MOVC A,@A+DPTR ;
MOV R2,A ;得到函数指针位置
RET
GETFUN00E: INC DPTR
INC DPTR
INC DPTR
LJMP GETPRGFUN
;-------------------------------------------------------------------
DELAY100MS: MOV R2,#0AH ;100ms
SJMP SLJ04
DELAY200MS: MOV R2,#14H ;200ms
SLJ04: LCALL DRAY10MS
DJNZ R2,SLJ04
RET
NOP
NOP
NOP
LJMP START
DRAY10MS: MOV R1,#10H ;10mS
SLJ02: MOV R0,#0FFH
SLJ03: NOP
NOP
NOP
DJNZ R0,SLJ03
DJNZ R1,SLJ02
RET
NOP
NOP
NOP
LJMP START
;-------------------------------------------------------------------
;初始化SED1335F
L20BD: MOV A,#08H ;初始化SED1335F
MOVC A,@A+DPTR
INC A
; MOV 41H,A
MOV A,#18H
MOVC A,@A+DPTR
; MOV 42H,A ;#0A0H
MOV B,#08H
DIV AB
; MOV 43H,A
MOV A,#0EH ;#14H
MOVC A,@A+DPTR
; MOV 44H,A
CLR SEDCTLCS
MOV A,#00H
MOVC A,@A+DPTR
L20D8: MOV R2,A
INC DPTR
MOV A,#00H
MOVC A,@A+DPTR
MOV R0,A
MOV A,R2
MOVX @R0,A ;IS @R0,A
INC DPTR
MOV A,#00H
MOVC A,@A+DPTR
CJNE A,#0FFH,L20D8
; SETB SEDCTLCS
RET
L24F7: DB 40H, 01H
DB 10H, 00H ;OR SINGLE DRIVER CGROM
DB 87H, 00H
DB 07H, 00H
DB 13H, 00H ;每行字节 @08H+1=0X14 -> 41H
DB 73H, 00H
DB 9FH, 00H
DB 14H, 00H ;@0EH = 0X14 -> 44H
DB 00H, 00H
DB 44H, 01H
DB 00H, 00H
DB 00H, 00H
DB 0A0H, 00H ;@18H = 0XA0 -> 42H
DB 00H, 00H ;@18H/8 -> 43H
DB 10H, 00H
DB 0A0H, 00H
DB 00H, 00H
DB 04H, 00H
DB 00H, 00H
DB 40H, 00H
DB 5AH, 01H
DB 00H, 00H
DB 5BH, 01H
DB 0DH, 00H
DB 58H, 01H
DB 06H, 00H
DB 46H, 01H
DB 00H, 00H
DB 00H, 00H
DB 52H, 01H
DB 5DH, 01H
DB 07H, 00H
DB 87H, 00H
DB 59H, 01H
DB 4CH, 01H
DB 0FFH
;------------------------------------------------------------------
;清除窗口背景
CLRWINBCK: CLR SEDCTLCS
MOV A,#4CH
MOV R0,#01H
MOVX @R0,A
MOV A,#46H ;CSRW:1000H
MOV R0,#01H
MOVX @R0,A
MOV A,#00H
MOV R0,#00H
MOVX @R0,A
MOV A,#10H
MOVX @R0,A
MOV A,#42H
MOV R0,#01H
MOVX @R0,A
MOV R4,#LCDHEIGH
MOV R5,#LCDLINE
MOV R0,#00H
CLR A
CLRWBCK1: MOVX @R0,A
DJNZ R4,CLRWBCK1
MOV R4,#LCDHEIGH
DJNZ R5,CLRWBCK1
; SETB SEDCTLCS
RET
;------------------------------------------------------------------
DISPWIN: MOV DPTR,#8000H
ANL A,#0FH
JZ DSPWN02
CJNE A,#01H,DSPWN03
DSPWN02: MOV DPTR,#MPWNDSH
MOV C,MULTILANGUAGE ;多语言系统
ANL C,ISCHINESE ;为中文语言标志
JNC DSPWN05
MOV DPTR,#MPWNDSCH
SJMP DSPWN05
DSPWN03: MOV C,MULTILANGUAGE ;多语言系统
ANL C,ISCHINESE ;为中文语言标志
MOV LANCHANGE,C ;0DAH 语言模块切换信号
DSPWN05: MOV C,PLACEDIR
CPL C
MOV ACC.4,C
MOV R1,A
ADD A,R1
MOV R1,A
MOVC A,@A+DPTR
XCH A,R1
INC A
MOVC A,@A+DPTR
MOV DPL,A
XCH A,R1
MOV DPH,A
LJMP L20EC
;-------------------------------------------------------------------
;显示一屏
L20EC: CLR SEDCTLCS
NOP
MOV A,#58H ;Disp off
MOV R0,#01H
MOVX @R0,A ;IS @R0,A
MOV A,#04H
MOV R0,#00H
MOVX @R0,A ;IS @R0,A
MOV A,#59H ;Disp on
MOV R0,#01H
MOVX @R0,A ;IS @R0,A
MOV A,#4CH ;movement +1
MOV R0,#01H
MOVX @R0,A ;IS @R0,A
MOV A,#46H ;cursor address #0000h
MOV R0,#01H
MOVX @R0,A ;IS @R0,A
MOV A,#00H
MOV R0,#00H
MOVX @R0,A ;IS @R0,A
MOV A,#00H
MOV R0,#00H
MOVX @R0,A ;IS @R0,A
MOV A,#42H ;Write disp memory
MOV R0,#01H
MOVX @R0,A ;IS @R0,A
MOV R4,#LCDHEIGH
MOV R5,#LCDLINE
MOV R2,#01H
L211C: MOV A,R2
JZ L211D1
CLR A ;包开始
MOVC A,@A+DPTR
INC DPTR
MOV R7,A
ANL A,#0C0H
MOV R3,A ;MODE
MOV A,R7
ANL A,#3FH
MOV R7,A ;AH
CLR A
MOVC A,@A+DPTR
INC DPTR
MOV R6,A ;AL
MOV R2,#00H
MOV A,R3
XRL A,#80H
JNZ L211D1
CLR A
MOVC A,@A+DPTR
INC DPTR
MOV R1,A
L211D1: INC R6 ;个数--
DJNZ R6,L211D2
DEC R7
L211D2: DEC R6
MOV A,R6
ORL A,R7
JNZ L211D3
MOV R2,#01H ;当前包已完成
L211D3: MOV A,R3
XRL A,#80H
JNZ L211D5
MOV A,R1 ;压缩包
SJMP L211DE
L211D5: MOV A,R3
XRL A,#40H
JNZ L211DF
CLR A ;非压缩包
MOVC A,@A+DPTR
INC DPTR
L211DE: MOV R0,#00H
MOVX @R0,A
DJNZ R4,L211C
MOV R4,#LCDHEIGH
DJNZ R5,L211C
L211DF: ;SETB SEDCTLCS
RET
;-------------------------------------------------------------------
FilRect: JB PLACEDIR,FRCT01
MOV R3,DPY0 ;纵向座标转换
MOV R4,DPY1
MOV DPY0,DPX0
MOV DPY1,DPX1
MOV A,#9FH
CLR C
SUBB A,R4
MOV DPX0,A
MOV A,#9FH
CLR C
SUBB A,R3
MOV DPX1,A
FRCT01: MOV A,DPX0
MOV B,#08H
DIV AB
MOV R7,A
MOV A,DPX1
MOV B,#08H
DIV AB
MOV R6,B
CLR C
SUBB A,R7
MOV R7,A ;满8 bit line width
MOV A,DPY1
CLR C
SUBB A,DPY0
INC A
MOV R5,A ;line number
CLR SEDCTLCS
NOP
MOV A,#58H ;Disp off
MOV R0,#01H
MOVX @R0,A
MOV A,#14H
MOV R0,#00H
MOVX @R0,A
MOV A,#59H ;Disp on
MOV R0,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -