📄 dz9664emc.asm
字号:
;***********************************************************************
;
; 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 + -