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

📄 t16064.asm

📁 lcm测试程序,对LCM设计者有帮助,希望大家能用上.
💻 ASM
字号:
;*************************************************************************
;      Testing Program for 16064A Graphic LCM
;*************************************************************************

;------------------- 1. 8051 PORT DEFINE ---------------------------------

WR_	   BIT	   P3.6 	       ; WRITE SIGNAL
RD_	   BIT	   P3.7 	       ; READ SIGNAL
CE	   BIT	   P2.7 	       ; CHIP ENABLE SIGNAL, LOW LEVEL:ENABLE
CD	   BIT	   P2.6 	       ; H:INSTRUCTION DATA; L:DISPLAY DATA
RST	   BIT	   P1.4 	       ; RESET SIGNAL
FS	   BIT	   P3.2 	       ; Font Select	(INT0)
DBUS	   EQU	   P0		       ; Data Bus

DTADDR	   EQU	   3FFFH
CMADDR	   EQU	   7FFFH
;------------------- 2. 8051 RAM DEFINE ------------------------------

IR	   EQU	   22H
DR1	   EQU	   23H
DR2	   EQU	   24H
DTREG	   EQU	   25H
LOOPNUM    EQU	   26H
LOOPBLK    EQU	   27H

ROW_LINE   EQU	   65
COL_UNIT   EQU	   20

X_LOC	   EQU	   28H
Y_LOC	   EQU	   29H
DLYTIME    EQU	   2AH
;------------------- 3. COMMAND CODE DEFINE --------------------------

DW_ADP_I   EQU	   0C0H
DR_ADP_I   EQU	   0C1H

;=====================================================================
	   ORG	   0000H
	   LJMP    START
	   ORG	   0013H
	   LJMP    KEY_PRS
	   ORG	   0030H
START:
	   MOV	   SP,#50H
	   MOV	   DLYTIME,#35
	   MOV	   TCON,#00001100B
	   MOV	   IE,#10000100B
BEGIN:
	   ACALL   INIT_T6963C
;**********************************************************
; GRAPHIC MODE
;**********************************************************
	   MOV	   DTREG,#0FFH
	   ACALL   ALLSCR
	   LCALL   DELAYL
	   MOV	   DTREG,#000H
	   ACALL   ALLSCR

	   MOV	   DTREG,#0AAH
	   ACALL   ALLSCR
	   LCALL   DELAYL
	   MOV	   DTREG,#055H
	   ACALL   ALLSCR
	   LCALL   DELAYL
	   MOV	   DTREG,#000H
	   ACALL   ALLSCR
;----------------------------------------------------------
	   MOV	   IR, #90H	       ; TURN OFF DISPLAY
	   LCALL   COMMAND_WR

	   MOV	   R0,#000H	       ; ADDRESS POINTER 0078H
	   MOV	   R1,#000H	       ; R1-->ADDR_H, R0-->ADDR_L
	   LCALL   DT2
	   MOV	   IR,#24H
	   LCALL   COMMAND_WR

	   MOV	   R6,#ROW_LINE
H1_LOOT:
	   MOV	   R7,#COL_UNIT
H1_LOO1:   MOV	   A,#0FFH
	   LCALL   DT1
	   MOV	   IR,#0C0H
	   LCALL   COMMAND_WR
	   DJNZ    R7,H1_LOO1

	   MOV	   R7,#COL_UNIT
H1_LOO2:   MOV	   A,#000H
	   LCALL   DT1
	   MOV	   IR,#0C0H
	   LCALL   COMMAND_WR
	   DJNZ    R7,H1_LOO2

	   DJNZ    R6,H1_LOOT

	   MOV	   IR,#98H
	   LCALL   COMMAND_WR

	   LCALL   DELAYL
;----------------------------------------------------------
	   MOV	   IR, #90H	       ; TURN OFF DISPLAY
	   LCALL   COMMAND_WR

	   MOV	   R0,#000H	       ; ADDRESS POINTER 0078H
	   MOV	   R1,#000H	       ; R1-->ADDR_H, R0-->ADDR_L
	   LCALL   DT2
	   MOV	   IR,#24H
	   LCALL   COMMAND_WR

	   MOV	   R6,#ROW_LINE
H2_LOOT:
	   MOV	   R7,#COL_UNIT
H2_LOO1:   MOV	   A,#000H
	   LCALL   DT1
	   MOV	   IR,#0C0H
	   LCALL   COMMAND_WR
	   DJNZ    R7,H2_LOO1

	   MOV	   R7,#COL_UNIT
H2_LOO2:   MOV	   A,#0FFH
	   LCALL   DT1
	   MOV	   IR,#0C0H
	   LCALL   COMMAND_WR
	   DJNZ    R7,H2_LOO2

	   DJNZ    R6,H2_LOOT

	   MOV	   IR,#98H
	   LCALL   COMMAND_WR

	   LCALL   DELAYL
;----------------------------------------------------------
	   MOV	   IR, #90H	       ; TURN OFF DISPLAY
	   LCALL   COMMAND_WR

	   MOV	   R0,#000H	       ; ADDRESS POINTER 0078H
	   MOV	   R1,#000H	       ; R1-->ADDR_H, R0-->ADDR_L
	   LCALL   DT2
	   MOV	   IR,#24H
	   LCALL   COMMAND_WR

	   MOV	   R6,#ROW_LINE
X1_LOOT:
	   MOV	   R7,#COL_UNIT
X1_LOO1:   MOV	   A,#0AAH
	   LCALL   DT1
	   MOV	   IR,#0C0H
	   LCALL   COMMAND_WR
	   DJNZ    R7,X1_LOO1

	   MOV	   R7,#COL_UNIT
X1_LOO2:   MOV	   A,#055H
	   LCALL   DT1
	   MOV	   IR,#0C0H
	   LCALL   COMMAND_WR
	   DJNZ    R7,X1_LOO2

	   DJNZ    R6,X1_LOOT

	   MOV	   IR,#98H
	   LCALL   COMMAND_WR

	   LCALL   DELAYL
;----------------------------------------------------------
	   MOV	   IR, #90H	       ; TURN OFF DISPLAY
	   LCALL   COMMAND_WR

	   MOV	   R0,#000H	       ; ADDRESS POINTER 0078H
	   MOV	   R1,#000H	       ; R1-->ADDR_H, R0-->ADDR_L
	   LCALL   DT2
	   MOV	   IR,#24H
	   LCALL   COMMAND_WR

	   MOV	   R6,#ROW_LINE
X2_LOOT:
	   MOV	   R7,#COL_UNIT
X2_LOO1:   MOV	   A,#055H
	   LCALL   DT1
	   MOV	   IR,#0C0H
	   LCALL   COMMAND_WR
	   DJNZ    R7,X2_LOO1

	   MOV	   R7,#COL_UNIT
X2_LOO2:   MOV	   A,#0AAH
	   LCALL   DT1
	   MOV	   IR,#0C0H
	   LCALL   COMMAND_WR
	   DJNZ    R7,X2_LOO2

	   DJNZ    R6,X2_LOOT

	   MOV	   IR,#98H
	   LCALL   COMMAND_WR

	   LCALL   DELAYL

;	   ACALL   LOC_DEMO
	   ACALL   DISP_ICON

	   LJMP    BEGIN
;-------------------------------------------------------------------------
;		 LOCATE DISPLAY DEMO
;-------------------------------------------------------------------------
LOC_DEMO:
	   MOV	   DTREG,#00H
	   ACALL   ALLSCR

	   MOV	   IR, #90H	       ; TURN OFF DISPLAY
	   LCALL   COMMAND_WR

	   MOV	   R0,#14H	       ; ADDRESS POINTER 0014H
	   MOV	   R1,#00H
	   LCALL   DT2
	   MOV	   IR,#24H
	   LCALL   COMMAND_WR
;------------------------------------------------
	   MOV	   R7,#20

   LOO1:   MOV	   A,#0FFH
	   LCALL   DT1
	   MOV	   IR,#0C0H
	   LCALL   COMMAND_WR
	   DJNZ    R7,LOO1

	   MOV	   R0,#000H	       ; ADDRESS POINTER 0500H
	   MOV	   R1,#005H
	   LCALL   DT2
	   MOV	   IR,#24H
	   LCALL   COMMAND_WR
;------------------------------------------------
	   MOV	   R7,#20

   LOO2:   MOV	   A,#0FFH
	   LCALL   DT1
	   MOV	   IR,#0C0H
	   LCALL   COMMAND_WR
	   DJNZ    R7,LOO2

	   MOV	   IR,#98H
	   LCALL   COMMAND_WR

	   LCALL   DELAYL
	   RET
;----------------------------------------------------------
;      Display Bitmap : "OLYLAI" at Screen
;----------------------------------------------------------
DISP_ICON:
	   MOV	   DPTR,#BITMAP
	   MOV	   IR, #90H	       ; TURN OFF DISPLAY
	   LCALL   COMMAND_WR

	   MOV	   R0,#14H	       ; ADDRESS POINTER 0000H
	   MOV	   R1,#00H
	   LCALL   DT2
	   MOV	   IR,#24H
	   LCALL   COMMAND_WR
;------------------------------------------------
	   MOV	   R6,#ROW_LINE

   LOP1:   MOV	   R7,#COL_UNIT

   LOP2:   CLR	   A
	   MOVC    A,@A+DPTR
	   LCALL   DT1
	   MOV	   IR,#0C0H
	   LCALL   COMMAND_WR

	   INC	   DPTR

	   DJNZ    R7,LOP2
	   DJNZ    R6,LOP1

	   MOV	   IR,#98H
	   LCALL   COMMAND_WR

	   LCALL   DELAYL
	   RET
;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
;      Initialize Display Device
;===============================================================
INIT_T6963C:
	   CLR	   FS
;RESET T6963C
	   LCALL   DELAYL	       ; RESET T6963C
	   CLR	   RST
	   LCALL   DELAYL
	   SETB    RST
	   LCALL   DELAYL

	   MOV	   IR,#90H	       ; TURN OFF DISPLAY
	   LCALL   COMMAND_WR

;GRAPHIC HOME ADDRESS SET
	   MOV	   R0,#00H	       ; GRAPHIC HOME ADDRESS 0000H
	   MOV	   R1,#00H
	   LCALL   DT2
	   MOV	   IR,#42H	       ; GR_HOME
	   LCALL   COMMAND_WR

;GRAPHIC AREA SET
	   MOV	   R0,#20	       ; COLUMNS = 20 (8*20=160)
	   MOV	   R1,#00H
	   LCALL   DT2
	   MOV	   IR,#43H	       ; GR_AREA
	   LCALL   COMMAND_WR

;SET CURSOR LOCATION
	   MOV	   R0,#00H	       ; COUSOR POINTER LOCATE 0000H
	   MOV	   R1,#00H
	   LCALL   DT2
	   MOV	   IR,#21H
	   LCALL   COMMAND_WR

;SET MODE ("OR" MODE,INTERNAL CHARACTER GENERATER MODE)
	   MOV	   IR,#80H
	   LCALL   COMMAND_WR

;SET DISPLAY MODE (TEXT ON,GRAPHICS ON,CURSOR ON)
	   MOV	   IR,#93H
	   LCALL   COMMAND_WR

	   RET
;===================================================================
ALLSCR:
	   MOV	   IR, #90H	       ; TURN OFF DISPLAY
	   LCALL   COMMAND_WR
;------------------------------------------------
	   MOV	   R0,#00H	       ; ADDRESS POINTER 0000H
	   MOV	   R1,#00H
	   LCALL   DT2
	   MOV	   IR,#24H
	   LCALL   COMMAND_WR
;------------------------------------------------
	   MOV	   R6,#ROW_LINE        ; 64*20*8 Dots
  SLOOP1:  MOV	   R7,#COL_UNIT        ; 64*20 DDRAM Units
  SLOOP2:  MOV	   A,DTREG
	   LCALL   DT1
	   MOV	   IR,#0C0H
	   LCALL   COMMAND_WR
	   DJNZ    R7,SLOOP2
	   DJNZ    R6,SLOOP1
;------------------------------------------------
	   MOV	   IR,#98H
	   LCALL   COMMAND_WR
;------------------------------------------------
	   RET
;****************************************************************************
;SUBROUTINE:COMMMAND WRITE,1&2-BYTE DATA WRITE,AUTO WRITE MODE,DELAY&DELAYA
;****************************************************************************
; COMMAND WRITE ROUTINE
COMMAND_WR:
	   PUSH    ACC
	   PUSH    DPH
	   PUSH    DPL
	   MOV	   DPTR,#CMADDR
	   MOV	   A,IR
	   MOVX    @DPTR,A
	   POP	   DPL
	   POP	   DPH
	   POP	   ACC
	   RET

; DATA WRITE (1 BYTE) ROUTINE
DT1:
	   PUSH    ACC
	   PUSH    DPH
	   PUSH    DPL
	   MOV	   DPTR,#DTADDR
	   MOVX    @DPTR,A
	   POP	   DPL
	   POP	   DPH
	   POP	   ACC
	   RET

; DATA WRITE (2 BYTE) ROUTINE
DT2:
	   PUSH    ACC
	   PUSH    DPH
	   PUSH    DPL
	   MOV	   DPTR,#DTADDR
	   MOV	   A,R0
	   MOVX    @DPTR,A

	   MOV	   A,R1
	   MOVX    @DPTR,A
	   POP	   DPL
	   POP	   DPH
	   POP	   ACC
	   RET
;****************************************************************************
;      CLEAR SCREEN
;****************************************************************************
CLRSCR:
	   MOV	   R0,#00H
	   MOV	   R1,#00H	       ; SET ADDRESS POINTER TO 0000H
	   LCALL   DT2		       ; (GRAPHIC HOME ADDRESS)
	   MOV	   IR,#24H	       ; ADPSET
	   LCALL   COMMAND_WR

	   MOV	   IR,#0B0H	       ; AWRON (DATA AUTO WRITE SET)
	   LCALL   COMMAND_WR

	   MOV	   R2,#01FH	       ; CLEAR ALL 8K
CLR1:	   MOV	   R3,#0FFH
CLR2:	   MOV	   A,#DR1	       ; DATA WRITE
	   LCALL   ADT		       ; (BLANK CODE WRITE)
	   DJNZ    R3,CLR2
	   DJNZ    R2,CLR1

	   MOV	   IR,#0B2H	       ; AWROFF (AUTO RESET)
	   LCALL   COMMAND_WR
	   RET

; AUTO WRITE MODE ROUTINE
ADT:
	   PUSH    ACC
	   PUSH    DPH
	   PUSH    DPL
	   MOV	   DPTR,#DTADDR
	   MOVX    @DPTR,A
	   POP	   DPL
	   POP	   DPH
	   POP	   ACC
	   RET
;-------------------------------------------------------------------------
;
;-------------------------------------------------------------------------
DELAYL:    MOV	   R5,DLYTIME
 DELAY:    MOV	   R6,#1FH
	   MOV	   R7,#50H
  DEL:	   DJNZ    R7,$
	   DJNZ    R6,DEL
	   DJNZ    R5,DELAY
	   RET
;-------------------------------------------------------------------------
;
;-------------------------------------------------------------------------
KEY_PRS:
	   MOV	   R4,#0
	   DJNZ    R4,$
	   PUSH    ACC
	   MOV	   A,DLYTIME
	   ADD	   A,#5
	   MOV	   DLYTIME,A
	   POP	   ACC
	   RETI
;=========================================================================
BITMAP:
;-------------------------------------------------------------------------
	 END

⌨️ 快捷键说明

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