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

📄 hz12864.asm

📁 达盛单片机试验箱
💻 ASM
字号:
XPOS   		EQU     20H						;列方向地址指针
YPOS   		EQU     21H						;行方向地址指针

CS2			EQU		0200H					;P2.1
CS1			EQU		0400H					;P2.2
CS			EQU		8000H					;P2.7
RW     		EQU     0800H					;P2.3	
RS			EQU		0100H					;P2.0

	        ORG     0000H
	        
	        AJMP     START
	        	        
	        ORG		0030H
	        
START:  	MOV     SP,#60H
MAIN:       CALL    LCDRESET				;复位
	      	MOV		A,#00H	
	       	CALL	LCDFILL					;空格填充整屏
	       	MOV		XPOS,#00H				;设置页
	 		MOV		YPOS,#00H				;设置列
	        MOV		DPTR,#STRING1			;字符串首地址
MAIN1:      CALL	PUTSTR								
	        JMP		MAIN1
	        
;*****************************************************************************
;		/* 显示字符子程序 */
;*****************************************************************************

PUTSTR:		CALL    LCDRESET				;复位
			CALL	DELAY					;延时
			CALL	GETADDR					;取要显示字符的地址
			PUSH	DPL
			PUSH	DPH
			JNB		B.7,PSRE				;判断是中文还是英文
			CALL	HZKPOS							
			CALL	PUTCHARDOT				;显示中文
			CALL	PUTCHARDOT
			JMP		PSR1
PSRE:		CALL	HZKPOS					;显示英文					
			CALL	PUTCHARDOT
PSR1:		POP		DPH
			POP		DPL
			RET
			
;*****************************************************************************
;		/* 计算字符在库中的地址 */
;*****************************************************************************

HZKPOS:		MOV		R2,#5					;32字节								
HZKPOS1:	CLR		C
			RLC		A
			MOV		R0,A
			MOV		A,B
			RLC		A
			MOV		B,A
			MOV		A,R0
			DJNZ	R2,HZKPOS1			
			MOV		DPTR,#HZKDOT
			ADD		A,DPL
			MOV		DPL,A
			MOV		A,B
			ADDC	A,DPH
			MOV		DPH,A
			RET

;*****************************************************************************
;		/* 显示半个中文或一个英文子程序 */
;*****************************************************************************
        	
PUTCHARDOT:	MOV		R7,#8
PAC_PA:		CLR		A
			MOVC	A,@A+DPTR				;取出字符
			CALL	LCDWRITE				;显示字符(上半段)
			INC		YPOS
			INC		DPTR
			CLR		A
			MOVC	A,@A+DPTR				;取出字符
			CALL	LCDWRITE				;显示字符(下半段)
			DEC		YPOS
			INC		DPTR
			CALL	CUSORNEXT
			MOV		A,XPOS
			JNZ		PAC_LAX
			INC		YPOS
PAC_LAX:	DJNZ	R7,PAC_PA
			RET
			
;*****************************************************************************
;		/* 调整行列指针 */
;*****************************************************************************
	
CUSORNEXT:	ANL		YPOS,#7
			INC		XPOS
			MOV		A,XPOS
			JNB		ACC.7,CNT_LAX
			MOV		XPOS,#0					;满128列列指针赋初值
			INC		YPOS					;行指针加1
			MOV		A,YPOS
			ANL		A,#0F8H
			JZ		CNT_LAX
			MOV		YPOS,#0					;满8行行指针赋初值
CNT_LAX:	RET

;*****************************************************************************
;		/* 取字符的地址 */
;*****************************************************************************
        
GETADDR:	CLR		A									
			MOVC	A,@A+DPTR		
			INC		DPTR
			MOV		B,A
			INC		A
			JZ		GETADDR1				;取出的数据的为00转并清零标志位
			CLR		A
			MOVC	A,@A+DPTR
			CJNE	A,#0FFH,GETADDR2		;检查是否是最后一个字符
			CALL	DELAY400MS							
			CALL	DELAY400MS
			CALL	DELAY400MS
GETADDR1:	AJMP	START					;若是最后一个字符转到开始
GETADDR2:	INC		DPTR
			RET

;*****************************************************************************
;		/* 定位并写数据子程序 */
;*****************************************************************************

LCDWRITE:   CALL    LCDPOS					;内部写数指针定位
	        CALL    LCDWD					;写数据
	        RET
	        
;*****************************************************************************
;		/* 内部写数指针定位子程序*/
;*****************************************************************************

LCDPOS:  	PUSH    ACC
	        MOV     A,XPOS
	        JB      ACC.6,LPOS1
	        MOV     A,YPOS					;XPOS列方向小于64则对CS1操作
	        ANL     A,#07H
	        ADD     A,#0B8H
	        CALL    LCDWC1					;设页码
	        MOV     A,XPOS
	        ANL     A,#3FH
	        ADD     A,#40H
	        CALL    LCDWC1					;设列码
	        AJMP	LPOS2
LPOS1:		MOV     A,YPOS					;XPOS列方向大于等于64则对CS2操作
	        ANL     A,#07H
	        ADD     A,#0B8H
	        CALL    LCDWC2					;设页码
        	MOV     A,XPOS
        	ANL     A,#3FH
        	ORL     A,#40H
        	CALL    LCDWC2					;设列码
LPOS2:		POP     ACC
        	RET
        	
;*****************************************************************************
;		/* 送数据子程序 */
;*****************************************************************************
             	
LCDWD:     	MOV     B,A          						
       		MOV     A,XPOS
       	 	JB      ACC.6,LWD1
        	MOV     A,B						;XPOS列方向小于64则对CS1操作
        	CALL    LCDWD1
        	JMP     LWD2
LWD1:		MOV     A,B						;XPOS列方向大于等于64则对CS2操作
        	CALL    LCDWD2
LWD2:		RET 

;*****************************************************************************
;		/* LCD整屏显示A的内容 */
;*****************************************************************************

LCDFILL:    MOV     R7,A
	        MOV     YPOS,#00H
LCDFILL1: 	MOV     XPOS,#00H
LCDFILL2: 	MOV     A,R7
	        CALL    LCDWRITE				;定位并写数据
	        INC     XPOS
	        MOV     A,XPOS
	        CJNE    A,#128,LCDFILL2			;XPOS<128则循环(128列)
	        INC     YPOS
	        MOV     A,YPOS
	        CJNE    A,#8,LCDFILL1			;YPOS<8则循环(8页)
	        MOV     XPOS,#0
	        MOV     YPOS,#0
	        RET

;*****************************************************************************
;		/* LCD控制器复位 */
;*****************************************************************************
     
LCDRESET:   MOV     A,#3FH					;打开LCD显示  
        	CALL    LCDWC1
        	CALL    LCDWC2
        	MOV     A,#0C0H					;设显示起始行
        	CALL    LCDWC1
        	CALL    LCDWC2
       		RET
       	
;*****************************************************************************
;		/* 送控制字子程序 */
;*****************************************************************************     		

LCDWC1:    	PUSH	DPH
			PUSH	DPL
			CALL    WAITIDLE1
			MOV		DPTR,#CS+CS1			;E=1 CS1=1 RS=0
			MOVX	@DPTR,A
       		POP		DPL
       		POP		DPH
       		RET    		

LCDWC2: 	PUSH	DPH
			PUSH	DPL
			CALL    WAITIDLE2
			MOV		DPTR,#CS+CS2			;E=1 CS2=1 RS=0
			MOVX	@DPTR,A
       		POP		DPL
       		POP		DPH
      	 	RET

;*****************************************************************************
;		/* 写数据子程序 */
;*****************************************************************************     	 	

LCDWD1:	 	PUSH	DPH
			PUSH	DPL
			CALL    WAITIDLE1
			MOV		DPTR,#CS+CS1+RS			;E=1 CS1=1 RS=1
			MOVX	@DPTR,A
       		POP		DPL
       		POP		DPH
       		RET   

LCDWD2:	 	PUSH	DPH
			PUSH	DPL
			CALL    WAITIDLE2
			MOV		DPTR,#CS+CS2+RS			;E=1 CS2=1 RS=1
			MOVX	@DPTR,A
      	 	POP		DPL
       		POP		DPH
       		RET 

;*****************************************************************************
;		/* 读数据子程序 */
;*****************************************************************************

LCDRD1:	 	PUSH	DPH
			PUSH	DPL
			CALL    WAITIDLE1
			MOV		DPTR,#CS+CS1+RS+RW		;E=1 CS1=1 RS=1
			MOVX	A,@DPTR
       		POP		DPL
       		POP		DPH
       		RET   
       		
LCDRD2:	   	PUSH	DPH
			PUSH	DPL
			CALL    WAITIDLE2
			MOV		DPTR,#CS+CS2+RS+RW		;E=1 CS2=1 RS=1
			MOVX	A,@DPTR
       		POP		DPL
       		POP		DPH
       		RET 

;*****************************************************************************
;		/* 检忙子程序 */
;*****************************************************************************

WAITIDLE1:	PUSH	DPH
			PUSH	DPL
			PUSH	ACC
			MOV		DPTR,#CS+CS1+RW			;E=1 CS2=1 RS=1
WT1_PA:		MOVX	A,@DPTR
			JB		ACC.7,WT1_PA
       		POP		ACC
       		POP		DPL
       		POP		DPH
			RET    
	   	
WAITIDLE2:	PUSH	DPH
			PUSH	DPL
			PUSH	ACC
			MOV		DPTR,#CS+CS2+RW			;E=1 CS2=1 RS=1
WT2_PA:		MOVX	A,@DPTR
			JB		ACC.7,WT2_PA
	       	POP		ACC
	       	POP		DPL
	       	POP		DPH
			RET   

;*****************************************************************************
;		/* 延时子程序 */
;*****************************************************************************			

DELAY400MS:	MOV     R7,#20             		 ;400MS			
DL4_PA: 	MOV     R6,#100
DL4_PB: 	MOV     R5,#100
        	DJNZ    R5,$
        	DJNZ    R6,DL4_PB
       		DJNZ    R7,DL4_PA
        	RET

DELAY:		MOV		R6,#2
DLY_PA:		MOV		R5,#0
DLY_PB:		MOV		R4,#0
			DJNZ	R4,$
			DJNZ	R5,DLY_PB
			DJNZ	R6,DLY_PA
			RET           	

STRING1:	DB		80H,00H,80H,01H,80H,02H,80H,03H,80H,04H,80H,05H
			DB		80H,06H,80H,07H,80H,08H,80H,09H,00H,1CH,00H,0AH
			DB		00H,0BH,00H,0CH,00H,0DH,00H,0EH,00H,0FH,00H,1CH
			DB		00H,1DH,00H,10H,00H,0DH,00H,11H,00H,12H,00H,13H
			DB		00H,14H,00H,15H,00H,16H,00H,1CH,00H,17H,00H,0EH
			DB		00H,18H,00H,14H,00H,0BH,00H,14H,00H,13H,00H,14H
			DB		00H,15H,00H,1CH,00H,1CH,00H,19H,00H,19H,00H,19H
			DB		00H,1EH,00H,1AH,00H,14H,00H,1BH,00H,1EH,00H,10H
			DB		00H,0DH,00H,11H,00H,1EH,00H,10H,00H,0EH,00H,0FFH

HZKDOT:													
;启CC6F4(00)
			DW		0040H,0020H,0018H,0F807H,4800H,487EH,4822H,4922H
			DW		4E22H,4A22H,4822H,4822H,4822H,787EH,0000H,0000H

;东CB6AB(01)
			DW		0000H,0400H,0420H,0C418H,0B40EH,8C04H,8720H,8440H
			DW		0F4FFH,8400H,8402H,8404H,8418H,0430H,0000H,0000H

;市CCAD0(02)
			DW		0400H,0400H,0400H,0E43FH,2400H,2500H,2500H,0FEFFH
			DW		2400H,2400H,2410H,2420H,0E41FH,0400H,0400H,0000H
			
;微CCEA2(03)
			DW		1001H,8800H,0F7FFH,2240H,5C20H,501FH,5F01H,5001H
			DW		5CBFH,2050H,0F821H,1716H,1208H,0F0F7H,1040H,0000H
			
;机CBBFA(04)
			DW		0804H,0803H,0C800H,0FFFFH,4800H,8841H,0830H,000CH
			DW		0FE03H,0200H,0200H,0200H,0FE3FH,0040H,0078H,0000H
				
;应CD3A6(05)
			DW		0040H,0038H,0FC07H,4420H,8420H,042FH,1424H,2520H
			DW		0C623H,8430H,042CH,0423H,0E420H,4422H,0020H,0000H
			
;用CD3C3(06)
			DW		0080H,0040H,0030H,0FE0FH,2202H,2202H,2202H,2202H
			DW		0FEFFH,2202H,2202H,2242H,2282H,0FE7FH,0000H,0000H
			
;研CD1D0(07)
			DW		0201H,0C200H,0F23FH,4E10H,0C29FH,0240H,4020H,4218H
			DW		0FE07H,4200H,4200H,4200H,0FEFFH,4200H,4200H,0000H
			
;究CBEBF(08)
			DW		0000H,4C00H,2440H,9420H,8410H,840CH,0F503H,8600H
			DW		8400H,843FH,1440H,2440H,4440H,0C40H,0478H,0000H
			
;所CCBF9(09)
			DW		0040H,0FE3FH,1201H,1201H,1181H,0F141H,0130H,000CH
			DW		0FE03H,2200H,2200H,2100H,0E1FFH,2100H,2100H,0000H

;Q(0A)
			DW		0E00FH,1018H,0824H,0824H,0838H,1050H,0E04FH,0000H
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
			
;I(0B)
			DW		0000H,8020H,9820H,983FH,0020H,0020H,0000H,0000H
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
			
;D(0C)
			DW		0000H,000EH,0011H,8020H,8020H,8810H,0F83FH,0020H
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
			
;O(0D)
			DW		0000H,001FH,8020H,8020H,8020H,8020H,001FH,0000H
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
			
;N(0E)
			DW		8020H,803FH,0021H,8000H,8000H,8020H,003FH,0020H
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
			
;G(0F)
			DW		0000H,006BH,8094H,8094H,8094H,8093H,8060H,0000H
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
			
;C(10)
			DW		0000H,000EH,0011H,8020H,8020H,8020H,0011H,0000H
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
			
;M(11)
			DW		8020H,803FH,8020H,8000H,803FH,8020H,8000H,003FH
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
			
;P(12)
			DW		8080H,80FFH,00A1H,8020H,8020H,0011H,000EH,0000H
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H

;U(13)
			DW		8000H,801FH,0020H,0020H,0020H,8010H,803FH,0020H
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
			
;T(14)	
			DW		0000H,8000H,8000H,0E01FH,8020H,8020H,0000H,0000H
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
			
;E(15)
			DW		0000H,001FH,8022H,8022H,8022H,8022H,0013H,0000H
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
			
;R(16)
			DW		8020H,8020H,803FH,0021H,8020H,8000H,8001H,0000H
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
				
;I(17)
			DW		0000H,0820H,0820H,0F83FH,0820H,0820H,0000H,0000H
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
			
;S(18)
			DW		0000H,0033H,8024H,8024H,8024H,8024H,8019H,0000H
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
			
;W(19)
			DW		0800FH,8030H,000CH,8003H,000CH,8030H,800FH,8000H
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
			
;Q(1A)
			DW		0000H,000EH,0011H,8020H,8020H,80A0H,80FFH,0080H
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H

;H(1B)
			DW		0820H,0F83FH,0021H,8000H,8000H,8020H,003FH,0020H
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
				
;空格(1C)
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
			
;μ(1D)
			DW		0F87FH,0004H,0008H,0008H,0004H,0F807H,0008H,0004H
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
			
;.(1E)
			DW		0000H,0000H,0030H,0030H,0000H,0000H,0000H,0000H	 
			DW		0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
			
			        
        	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -