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

📄 cd64k.asm

📁 Keil中文版
💻 ASM
📖 第 1 页 / 共 5 页
字号:
			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 + -