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

📄 dz9664emc.asm

📁 1. Source Code for CSTN . 2. Keil ASM with Detail Remark. 3. Winbond Single Chip.
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	
	MOV     A,CONTRAST						;  Low
	AND     A,#0b00001111				
	OR      A,#ELECTRONICVOLUMELOWER
	CALL    WRITE_LCD_1BYTE 
	WRITEOR	#REREGISTERSET,#0b00000000	;SET RE FLAG 000--> INSTRUCTION bank 0        
	RET

;========= Set electronic volume (RF 000~100) =============  
LCD_RF_OUTPUT:
   	WRITEOR	#REREGISTERSET,#0b00000100	;SET RE FLAG 100--> INSTRUCTION bank 4    
	MOV     A,RFSELECT						; High
	AND     A,#0b00000111
	OR      A,#SELECTRF
	CALL    WRITE_LCD_1BYTE 
	RET            
	
;========= NORMAL DISPLAY RET INDEX =============       
DIS_NORMAL_FUN1:     
	JE      A,#1,PICF_1
	JE      A,#2,PICF_2
	JE      A,#3,PICF_3
	JE      A,#4,PICF_4
	JE      A,#5,PICF_5
	JE      A,#6,PICF_6
	JE      A,#7,PICF_7
	JE      A,#8,PICF_8
	
	RET
PICF_1:  
	TBPTL   #GRP1*2         ; Data index
	TBPTM   #GRP1/0x80
	TBPTH   #GRP1/0x8000    
	RET     
PICF_2:  
	TBPTL   #GRP2*2         ; Data index
	TBPTM   #GRP2/0x80
	TBPTH   #GRP2/0x8000    
	RET     
PICF_3:  
	TBPTL   #GRP3*2         ; Data index
	TBPTM   #GRP3/0x80
	TBPTH   #GRP3/0x8000    
	RET                 
PICF_4:  
	TBPTL   #GRP4*2         ; Data index
	TBPTM   #GRP4/0x80
	TBPTH   #GRP4/0x8000    
	RET    
PICF_5:  
	TBPTL   #GRP5*2         ; Data index
	TBPTM   #GRP5/0x80
	TBPTH   #GRP5/0x8000    
	RET   
PICF_6:  
	TBPTL   #GRP6*2         ; Data index
	TBPTM   #GRP6/0x80
	TBPTH   #GRP6/0x8000    
	RET                      
PICF_7:  
	TBPTL   #GRP7*2         ; Data index
	TBPTM   #GRP7/0x80
	TBPTH   #GRP7/0x8000    
	RET   
	
PICF_8:  
	TBPTL   #GRP8*2         ; Data index
	TBPTM   #GRP8/0x80
	TBPTH   #GRP8/0x8000    
	RET               

;----------- DZ9664 initial function ----------------        
; Describe: EM66567 LCD driver initialition 
; Funtion: 1. 
;------------------------------------------------
DZ9664_INI:
	WRITEOR #REREGISTERSET,#0b00000000		;SET RE FLAG 000--> INSTRUCTION bank 0
	WRITEOR #POWERCONTROL,#0b00000001 		;ACL(B0) =1 initialization ON  
	MOV     A,#50                   		;WAIT 50ms FOR DZ9664 INITIAL SETTING
	CALL    WAIT_A_MS
	WRITEOR #BOOSTERSET,#0b00000011			;BOOSTER x 4 (B1 ,B0 = 1 1) 
	WRITEOR #POWERCONTROL,#0b00001010		;BOOSTER CIRCUIT(B1) ON; OPAMP(B3) ON
	WRITEOR #BIASRATIOCONTROL,#0b00000100		;BIAS =1/5 (B2,B1,B0=100)
	NOP
	WRITEOR #LCDDUTYSET,#0b00000111			;LCD Duty Set 1/66 DUTY (B2,B1,B0=111) 
	WRITEOR #INCREMENTCONTROL,#0b00000011		; X (B0) INCREMENT ; Y(B1) INCREMENT
	WRITEOR #DISPLAYSTARTLINELOWER,#0b00000000 	;SET Display Start LOWER Line=0
	WRITEOR #DISPLAYSTARTLINEUPPER,#0b00000000 	;SET Display Start UPPER Line=0    
	WRITEOR #XADDRESSLOWER,#0b00000000		;SET X Add=0
	WRITEOR #XADDRESSUPPER,#0b00000000
	WRITEOR #YADDRESSLOWER,#0b00000000		;SET Y Add=0
	WRITEOR #YADDRESSUPPER,#0b00000000
	WRITEOR #DISPLAYCONTROL1,#0b00001000		;DISPLAY(B0) OFF ; SHIFT(B3) = '1'
	WRITEOR #DISPLAYCONTROL2,#0b00000010		;
	WRITEOR #REREGISTERSET,#0b00000100		;SET RE FLAG 100--> INSTRUCTION bank 4
	
	WRITEOR #ELECTRONICVOLUMELOWER,#0b00001111 	;SET ELECTRONIC LOWER TO MAX 1111		
	WRITEOR #ELECTRONICVOLUMEUPPER,#0b00000111 	;SET ELECTRONIC UPPER TO MAX 0111
	WRITEOR #ELECTRONICVOLUMELOWER,#0b00001111 	;SET ELECTRONIC LOWER TO MAX 1111
		
	WRITEOR #COMMONSTARTLINESET,#0b00000100		;SET COMMON START FROM COM 32
	WRITEOR #STATICPICTGRAPHCONTROL,#0b00000000 	;Static Pictograph Control =000
	WRITEOR #DISPLAYSELECTCONTROL,#0b00000000	;PWM (B3)=1 8-gradation fixed display
	WRITEOR #RAMDATALENGTHSET,#0b00000000		;WLS=0(B0) 8-BIT WIDTH MODE
	WRITEOR #DISCHARGECONTROL,#0b00000000		;Discharge(B0) off; High power mode(B1) off
	WRITEOR #REREGISTERSET,#0b00000000		;SET RE FLAG 000--> INSTRUCTION bank 0
	RET
	    
	
	
	                    
;----------- LCD Initialize SETUP ----------------      
; Describe: LCD Initialize after power on reset
; Funtion: 1. Set Port G output
;          2. Set Port B 0~2 output     
;          3. /CS1 = 0  Chip select
;          4. A0 = 0 instruction input
;          5. CLK0 ENABLE = 21.845K     
;          6. LAHEN ENABLE
;	   7. PORT E low nibble output
;	   8. PORT D all input (Keyin port)
;	   9. Timer 0 generate clock to PE.2
;-------------------------------------------------                  
LCD_INI_SETUP:

	MOV A,#122              ;SET PLL FREQUENCY=8MHz
	MOV PFS,A               
	
	MOV	A,#0b00000000	;PORT C (DATA BUS) PORT_G DEFINE OUTPUT
	AND	DCRC,A
	MOV	A,#0b00111100   ;PORT K (KEYIN BUS) PORT_D ALL INPUT
	OR 	DCRJK,A    			
	BC 	DCRB,4   		
	BC 	DCRB,3  
	BC 	DCRB,2
	BC 	DCRHI,4
	BS	PBCON,4
	
	BS      PORTB,4		;SET /WR=1 WRITE DISABLE (PC.5)
	BS      PORTB,3		;SET /RD=1 READ ENABLE (PB.2) 
	BC      PORTI,2		;SET LCD /CS = 0 LCD CHIP ENABLE (PB.0)
	BS      PORTI,3		;SET LCD RS = 1 INSTRUCTION OUTPUT (PB.1)       
	
	MOV     A,#9
	MOV     TRLIR,a    
	BC      TR2CON,6
	BC      TR2CON,7    
	
	BS      TR01CON,3    
	RET
	
	    
	
	
;----------- LCD DISPLAY DATA RAM WRITE ------------
; Funtion: 1. SET TABPTR 
;          2. WRITE DATA TO LCD RAM  
;---------------------------------------------------                

DATA_WRITE_9664:
	BS      PORTI,3      			; LCD RS = 1 INSTRUCTION OUTPUT
	WRITEOR #XADDRESSLOWER,#0b00000000	;SET X Add=0
	WRITEOR #XADDRESSUPPER,#0b00000000
	WRITEOR #YADDRESSLOWER,#0b00000000	;SET Y Add=0
	WRITEOR #YADDRESSUPPER,#0b00000000     
	  
	;MOV     A,#0b10101010		
	;MOV     TEMPDATA,A  ;#0b10101111		
	   	
	MOV     A,#LINE_Y_MAX			;COMMON = 3FH (63)
	MOV     DRAMX,A
DATA_W1:
	MOV     A,#LINE_X_MAX           	;SEGMENT = 5fh (95)
	MOV     DRAMY,A
	BC      PORTI,3      			;SET LCD RS=0 DATA READ/WRITE
DATA_W2:
	TBRD	01,ACC              		;WRITE LCD SCREEN FROM DATA INDEX
	;MOV    A,#0b111111111			;COMMON = 0FH (15)  
	;MOV    A,TEMPDATA  			;#0b10101111	COMMON = 0FH (15)      
	CALL    WRITE_LCD_1BYTE
	;MOV    A,#0b01010101			;COMMON = 0FH (15)      
	;CALL   WRITE_LCD_1BYTE    
	DEC     DRAMY              
	JBS     STATUSR,FC,DATA_W2
	;COM	TEMPDATA  			;#0b10101111
	
	DEC     DRAMX
	JBS     STATUSR,FC,DATA_W1
	BS      PORTI,3      		;LCD RS = 1 INSTRUCTION OUTPUT
	RET		
	
	  
	
	
	 
;----------------       Write 1 byte to LCD driver  ------------------
;
;INPUT
;  Acc : Data
;  LAHEN : C.5 latch Auto(1) or not(0)
;  TEST M68 MODE LAHEN IS DISABEL
;OUTPUT
;  None
;
;MODIFY
;  Acc, Status
;
;CONDITION
;  Port-B, C.5 : Port-G is write data or command state to LCD DRIVER
;  Do "LCD_OPEN_WRITE" before.
;----------------------------------------------------------------------


WRITE_LCD_1BYTE: 

  
;      JBS     DCRJK,F_LAHEN,WRITE_LCD_1BYTE_1  ;DEFINE LAHEN =1
	BC      PORTB,4                  ;SET /WR=0 ENABLE WRITE
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	MOV     PORTC,A                          ;MOVE A==> PORT_C
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	BS      PORTB,4                  ;SET /WR=1 DISABLE WRITE
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
;      RET
;WRITE_LCD_1BYTE_1:
;      MOV     PORTC,A                          ;MOVE A==> PORT_C
	  
	RET
;  ELSE
  


;----------- READ 1 BYTE ----------------
READ_LCD_1BYTE:
  IFDEF M86
  
	BC      PORTB,3		;SET /RD=0 READ ENABLE
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	MOV     A,PORTC		;MOVE PORT_C ==> A
	NOP
	NOP
	NOP
	BS      PORTB,3		;SET /RD=1 READ DISABLE
	NOP
	NOP
	NOP
	
  ELSE
  
	BS      PORTB,4
	NOP
	BS      PORTB,3		; /RD=0
	NOP
	MOV     A,PORTC		;MOVE PORT_C ==> A
	NOP
	BC      PORTB,3		;/RD=1
	NOP
	NOP      
	
  ENDIF    
      
	RET
      
;%%%%%%%%%%
;WAIT_A_10MS
;%%%%%%%%%%
WAIT_A_MS:
	MOV	PRODL,A			;A=20
	MOV	A,#1
	MOV	TRL0L,A
	CLR	TRL0H
	
	BC  	TR01CON,T0CS
	BS  	TR01CON,T0PSR1
	BC  	TR01CON,T0PSR0
	BS	TR2CON,T0FNEN0		;1:16
	BC  	TR2CON,T0FNEN1  
	
	BS	INTCON,TMR0IE
WAIT_A_MS_1:
	BC	INTSTA,TMR0I
	BC	INTSTAP,TMR0I
WAIT_A_MS_2:
        NOP
	JBC	INTSTAP,0,WAIT_A_MS_2
	BC    	INTSTAP,0
	JDNZ  	PRODL,WAIT_A_MS_1

	BC	INTCON,TMR0IE
	BC	TR2CON,T0FNEN0
	
	RET      
/*;-------------------------------------------------------------------
;       Waiting sub-routine
;       Use timer 1 (Previous vision(EPL65132,EPL43102) used Timer 0)
;       Put ms in A
;-------------------------------------------------------------------
WAIT_A_MS:
	MOV	PRODL,A			;SET A ms INTERVAL
	MOV     A,#7                    ;A==>7 (32K/4/8=1ms)
	MOV     TRL1,A                  ;A==>TIMER1 RELOAD REG
	BS      TR01CON,T1EN            ;ENABLE TIMER1 COUNTER    
	BS      INTCON,TMR1IE		;SET TIMER1 INTERRUPT      
WAIT_A_MS_1:
	BC      INTSTA,TMR1I      	;CLEAR BIT.0 IF UNDERFLOW HAPPENED
	BC      INTSTAP,1      		;CLEAR BIT.0 OF REG_INTSTAP WHICH USER DEFINED
WAIT_A_MS_2:
	JBC     INTSTAP,1,WAIT_A_MS_2  	;WAIT FOR TIMER1 INTERRUPT
	JDNZ    PRODL,WAIT_A_MS_1    	;REPEAT THE LOOP UNTIL SETTING TIME OVER
	BC      INTCON,TMR1IE      		;RELEASE TIMER1 INTERRUPT
	BC      TR01CON,T1EN         	;DISABLE TIMER1 COUNTER
	RET
*/
        
;====================  LCD DISPLAY PATTERN ==================


      
include "zzz.dat"
          

;End of LCD_test.asm

⌨️ 快捷键说明

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