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

📄 dz9664emc.asm

📁 1. Source Code for CSTN . 2. Keil ASM with Detail Remark. 3. Winbond Single Chip.
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;***********************************************************************
;
; File : DZ9664.ASM (DZ9664 test code)
;
;       * Initial setteing
;       * LCD display function (64 x 96 256 Color)
;	* cpu	   :  PIC
;***********************************************************************
;
include "CPUregister.h"
include "diag_mc45.res"
DEFINE M86   ;( WHEN TEST 68 FAMILY MODE SET "DISABLE")
;****************************
;
;       LCD IOCS constant difinition
;
;****************************

;Command for LCD Driver
;========== Bank 0 RE[2..0]=[000] ====================================
XADDRESSLOWER           EQU     0b00000000	;X Address Lower
XADDRESSUPPER           EQU     0b00010000	;X Address Upper
YADDRESSLOWER           EQU     0b00100000	;Y Address Lower
YADDRESSUPPER           EQU     0b00110000	;Y Address Upper
DISPLAYSTARTLINELOWER   EQU     0b01000000	;Display Start Line Lower
DISPLAYSTARTLINEUPPER   EQU     0b01010000	;Display Start Line Upper
LINEALTERNATIONLOWER    EQU     0b01100000	;Alternation Line Lower
LINEALTERNATIONUPPER    EQU     0b01110000	;Alternation Line Upper
DISPLAYCONTROL1         EQU     0b10000000	;Display Control 1
DISPLAYCONTROL2         EQU     0b10010000	;Display Control 2
INCREMENTCONTROL        EQU     0b10100000	;Increment Mode Selection
POWERCONTROL            EQU     0b10110000	;Power Control (Internal OP,Boosting,Resetting..)
LCDDUTYSET              EQU     0b11000000	;Set LCD Duty Ratio
BOOSTERSET              EQU     0b11010000	;Set the number of Boosting steps
BIASRATIOCONTROL        EQU     0b11100000	;Set Bias for LCD driver
REREGISTERSET           EQU     0b11110000	;Set RE Flag

;========== Bank 1 RE[2..0]=[001] ====================================
GRADATIONPALETTEA0LOWER EQU     0b00000000      ; Set Gradation Palette Group 1
GRADATIONPALETTEA0UPPER EQU     0b00010000
GRADATIONPALETTEA1LOWER EQU     0b00100000
GRADATIONPALETTEA1UPPER EQU     0b00110000
GRADATIONPALETTEA2LOWER EQU     0b01000000
GRADATIONPALETTEA2UPPER EQU     0b01010000
GRADATIONPALETTEA3LOWER EQU     0b01100000
GRADATIONPALETTEA3UPPER EQU     0b01110000
GRADATIONPALETTEA4LOWER EQU     0b10000000
GRADATIONPALETTEA4UPPER EQU     0b10010000
GRADATIONPALETTEA5LOWER EQU     0b10100000
GRADATIONPALETTEA5UPPER EQU     0b10110000
GRADATIONPALETTEA6LOWER EQU     0b11000000
GRADATIONPALETTEA6UPPER EQU     0b11010000      ; Without 'hE address reg.

;========== Bank 2 RE[2..0]=[010] ====================================
GRADATIONPALETTEA7LOWER EQU     0b00000000
GRADATIONPALETTEA7UPPER EQU     0b00010000
GRADATIONPALETTEB0LOWER EQU     0b00100000
GRADATIONPALETTEB0UPPER EQU     0b00110000
GRADATIONPALETTEB1LOWER EQU     0b01000000
GRADATIONPALETTEB1UPPER EQU     0b01010000
GRADATIONPALETTEB2LOWER EQU     0b01100000
GRADATIONPALETTEB2UPPER EQU     0b01110000
GRADATIONPALETTEB3LOWER EQU     0b10000000
GRADATIONPALETTEB3UPPER EQU     0b10010000
GRADATIONPALETTEB4LOWER EQU     0b10100000
GRADATIONPALETTEB4UPPER EQU     0b10110000
GRADATIONPALETTEB5LOWER EQU     0b11000000
GRADATIONPALETTEB5UPPER EQU     0b11010000

;========== Bank 3 RE[2..0]=[011] ====================================
GRADATIONPALETTEB6LOWER EQU     0b00000000
GRADATIONPALETTEB6UPPER EQU     0b00010000
GRADATIONPALETTEB7LOWER EQU     0b00100000
GRADATIONPALETTEB7UPPER EQU     0b00110000
GRADATIONPALETTEC0LOWER EQU     0b01000000
GRADATIONPALETTEC0UPPER EQU     0b01010000
GRADATIONPALETTEC1LOWER EQU     0b01100000
GRADATIONPALETTEC1UPPER EQU     0b01110000
GRADATIONPALETTEC2LOWER EQU     0b10000000
GRADATIONPALETTEC2UPPER EQU     0b10010000
GRADATIONPALETTEC3LOWER EQU     0b10100000
GRADATIONPALETTEC3UPPER EQU     0b10110000
GRADATIONPALETTEC4LOWER EQU     0b11000000
GRADATIONPALETTEC4UPPER EQU     0b11010000
 
;========== Bank 4 RE[2..0]=[100] ====================================
GRADATIONPALETTEC5LOWER EQU     0b00000000
GRADATIONPALETTEC5UPPER EQU     0b00010000
GRADATIONPALETTEC6LOWER EQU     0b00100000
GRADATIONPALETTEC6UPPER EQU     0b00110000
GRADATIONPALETTEC7LOWER EQU     0b01000000
GRADATIONPALETTEC7UPPER EQU     0b01010000
COMMONSTARTLINESET      EQU     0b01100000
STATICPICTGRAPHCONTROL  EQU     0b01110000
DISPLAYSELECTCONTROL    EQU     0b10000000
RAMDATALENGTHSET        EQU     0b10010000
ELECTRONICVOLUMELOWER   EQU     0b10100000
ELECTRONICVOLUMEUPPER   EQU     0b10110000
REGISTERREADADDRESS     EQU     0b11000000
SELECTRF		EQU     0b11010000
DISCHARGECONTROL        EQU     0b11100000

LINE_X_MAX      	EQU     95		;LCD Segment 5FH (8-bit mode)
LINE_Y_MAX      	EQU     65		;LCD Common  3FH (8-bit mode)
MAX_CONTRAST    	EQU     0b01111111
MIN_CONTRAST    	EQU     0b00000000
MAX_RF    		EQU     0b00000100
MIN_RF    		EQU     0b00000000

WRITEOR macro  REGSEL,INSDAT  
    MOV     A,INSDAT           
    OR      A,REGSEL
    CALL    WRITE_LCD_1BYTE 
    endm 
        
WRITEAND macro  REGSEL1,INSDAT1  
    MOV     A,INSDAT1           
    OR      A,REGSEL1
    CALL    WRITE_LCD_1BYTE 
    endm    
     
WRITETO macro  REGSEL2,INSDAT2  
    MOV     A,INSDAT2           
    OR      A,REGSEL2
    CALL    WRITE_LCD_1BYTE 
    endm         
;****************************
;
;       LCD IOCS routines
;
;****************************

RESET_SEG       CSEG    0x00

	LJMP	MSTART		;(0x00) Initialize
	LJMP	INPTINT		;(0x02) Input Port and Touch panel  Interrupt
	LJMP	CAPINT          ;(0x04) Capture input interrupt
	LJMP	SPHINT          ;(0x06) Speech Timer interrupt
	LJMP    TIMERINT	;(0x08) Timer-0,1,2 Interrupt
	LJMP	PERIPH		;(0x0A) Peripheral Interrupt

INT     CSEG         0x20 
;--------------------------
; Timer 0,1,2 Interrupt
;--------------------------
TIMERINT:
	MOV	    ACC_BAK,A           ;ACC BACKUP

	MOVPR   STATUS_BAK,STATUSR  	;STATUS BACKUP
    
	;MOVRP	ACC,INTSTA	        ;INT STATUS flag keep
	;MOV	INTSTAP,A

	JBS	INTSTA,0,Timer0
	JBS	INTSTA,1,Timer1
	JBS	INTSTA,2,Timer2
	JMP	TIMERINT_3

Timer0:
	BC      INTSTA,0
	;CLR    DCRJK
	;BTG  	PORTC,4
	BS      INTSTAP,0
	JMP	TIMERINT_3

Timer1:
	BC      INTSTA,1
	;CLR    DCRJK
	;BTG  	PORTC,5
	BS      INTSTAP,1
	JMP	TIMERINT_3

Timer2:
	BC      INTSTA,2
	;CLR    DCRJK
	;BTG  	PORTC,6
	BS      INTSTAP,2
TIMERINT_3:
	MOVRP   STATUSR,STATUS_BAK  	;STATUS BACKUP
	MOVRP	ACC,ACC_BAK		;Z flag keep

	RETI


PERIPH:
INPTINT:				;(0x02) Input Port and Touch panel  Interrupt
CAPINT:                      		;(0x04) Capture input interrupt
SPHINT:     
      ;Reverse ACC ini_value when interrupt happens
      ;MOV     STK_INT,A
      ;BTG     REG_PORTB,F_INTMON
      ;BC      REG_INTSTA,F_LVDI
      ;BC      REG_INTSTA,F_SRBFI
      ;BC      REG_INTSTA,F_UERRI
      ;BC      REG_INTSTA,F_UTXI
      ;BC      REG_INTSTA,F_URXI
      ;MOV     A,REG_INTSTA
      ;MOV     REG_INTSTAP,A
      ;MOV     A,STK_INT
      RETI


;=========== Program start point =============
;When [Reset], Program couner jumps here.
;
MSTART:
	NOP
	NOP
	NOP
	BS	CPUCON,GLINT   ;ENABLE GLOBAL INTERRUPT
	MOV     A,#50                   ;WAIT 50ms FOR INITIAL SETTING
	CALL    WAIT_A_MS
	NOP       
	CALL    LCD_INI_SETUP           ;EPG MPU setting (I/O SETUP, /CS1=0,RS=1, CLK0=21.845K)
	
	BC      PORTI,0              ;Hardware Reset = "0"   	
	MOV     A,#10                   ;WAIT 50ms FOR INITIAL SETTING
	CALL    WAIT_A_MS      
	BS      PORTI,0             	;Hardware Reset = "1"        	
	    
	CALL	DZ9664_INI      		;Initial setting DZ9664
	TBPTL   #GRP3*2         		;DEFINE DATA INDEX FOR DISPLAY "FUNCTION MENU"
	TBPTM   #GRP3/0x80
	TBPTH   #GRP3/0x8000    
	CALL    DATA_WRITE_9664        ;SHOW 64X96 DOTS FIGURE	
	WRITEOR	#DISPLAYCONTROL1,#0b00001001		;SET DISPLAY ON (B0)=1
	
	MOV 	A,#0b01111111           ;SET CONTRAST ELECTRIC VALUE=7F
	MOV 	CONTRAST,A
		
	MOV     A,#1
	MOV     PIC_NUM,A
LCD_FUNC1_11:    
	MOV     A,PIC_NUM
	CALL    DIS_NORMAL_FUN1
	CALL    DATA_WRITE_9664
	CALL    KEY_INPUT_FUNF
	MOV     A,KEYDATA
	JE      A,#0b11111110,LCD_FUNC1_11
	JMP     LCD_FUNC1_11   

;========= KEY INPUT ============= 
KEY_INPUT_FUNF:
	MOV     A,PORTK
	JE      A,#0xFF,KEY_INPUT_FUNF
	MOV     KEYDATA,A
	MOV     A,#120                                 ;WAIT 20ms 
	CALL    WAIT_A_MS               
	MOV     A,PORTK
	JE      A,KEYDATA,KEY_INPUT_FUNF2
	JMP     KEY_INPUT_FUNF
	
KEY_INPUT_FUNF2: 
	;JE	A,#0b11111110,KEY_INPUT_FUN6F            ;ESC
	;JE	A,#0b11111101,KEY_INPUT_FUN5F            ;FUNCTION ENTER
	JE 	A,#0b11111011,KEY_INPUT_FUN3F            ;FUNCTION UP
	JE 	A,#0b11110111,KEY_INPUT_FUN4F            ;FUNCTION DOWN
	JE 	A,#0b10111111,KEY_INPUT_FUN5F            ;CONTRAST UP
	JE 	A,#0b01111111,KEY_INPUT_FUN6F            ;CONTRAST DOWN          
	JE 	A,#0b11101111,KEY_INPUT_FUN7F            ;ESC
	JE 	A,#0b11011111,KEY_INPUT_FUN8F            ;FUNCTION ENTER      
	
	JMP     KEY_INPUT_FUNF
	
KEY_INPUT_FUN3F:                        ;SHOW PICTURE FROM DATA INDEX
      MOV     A,PIC_NUM                
      ADD     A,#1
      JGE     A,#9,KEY_INPUT_FUN3F_1    ;(1-12)12 PICTURES COULD BE SELECTED
      MOV     PIC_NUM,A
      RET
      
KEY_INPUT_FUN3F_1:                      ;RESET TO 1ST PICTURE
      MOV     A,#1
      MOV     PIC_NUM,A
      RET
        
KEY_INPUT_FUN4F:
      MOV     A,PIC_NUM
      DECA    PIC_NUM
      JLE     A,#0,KEY_INPUT_FUN4F_1
      MOV     PIC_NUM,A
      RET
      
KEY_INPUT_FUN4F_1:       
      MOV     A,#8
      MOV     PIC_NUM,A
      RET    
       
KEY_INPUT_FUN5F:                                  ;CONTRAST INCREASE DIRECTLY
      MOV     A,CONTRAST
      ADD     A,#1
      JGE     A,#MAX_CONTRAST,KEY_INPUT_FUN5F_1
      MOV     CONTRAST,A
      JMP     KEY_CONTRAST

KEY_INPUT_FUN5F_1:   
      MOV     A,#MIN_CONTRAST
      MOV     CONTRAST,A
      JMP     KEY_CONTRAST
        
KEY_INPUT_FUN6F:                                  ;CONTRAST DECREASE DIRECTLY
      DECA    CONTRAST
      JLE     A,#MIN_CONTRAST,KEY_INPUT_FUN6F_1
      MOV     CONTRAST,A
      JMP     KEY_CONTRAST

KEY_INPUT_FUN6F_1:   
      MOV     A,#MAX_CONTRAST
      MOV     CONTRAST,A
      JMP     KEY_CONTRAST



KEY_INPUT_FUN7F:                                  ;RF INCREASE DIRECTLY
      MOV     A,RFSELECT
      ADD     A,#1
      JGE     A,#MAX_RF,KEY_INPUT_FUN7F_1
      MOV     RFSELECT,A
      JMP     KEY_RFSELECT

KEY_INPUT_FUN7F_1:   
      MOV     A,#MIN_RF
      MOV     RFSELECT,A
      JMP     KEY_RFSELECT
        
KEY_INPUT_FUN8F:                                  ;RF DECREASE DIRECTLY
      DECA    RFSELECT
      JLE     A,#MIN_RF,KEY_INPUT_FUN8F_1
      MOV     RFSELECT,A
      JMP     KEY_RFSELECT

KEY_INPUT_FUN8F_1:   
      MOV     A,#MAX_RF
      MOV     RFSELECT,A
      JMP     KEY_RFSELECT

KEY_CONTRAST:
      JMP     LCD_CONTRAST_OUTPUT
KEY_RFSELECT:
      JMP     LCD_RF_OUTPUT
        
KEY_INPUT_ENT:
      RET
;========= Set electronic volume (DV 6~0) =============  
LCD_CONTRAST_OUTPUT:
	WRITEOR	#REREGISTERSET,#0b00000100	;SET RE FLAG 100--> INSTRUCTION bank 4    
	MOV     A,CONTRAST						; High
	SWAP    ACC
	AND     A,#0b00000111
	OR      A,#ELECTRONICVOLUMEUPPER
	CALL    WRITE_LCD_1BYTE 

⌨️ 快捷键说明

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