;__CONFIG_DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC
; chip configuration word, watchdog off, power-on delay on, power-down detection off, low-voltage programming off, encryption, 4M crystal HS oscillation
#define RSPORTA,5 ; Command/Data Selection
#define RWPORTA,4 ; read/write selection
#define EPORTA,3 ; Enable signal
#define PSBPORTA, 2 ; parallel port / serial port selection (H / L)
#define RSTPORTA,0 ; reset signal
;-----------------------------------------------
LCD_X EQU 30H ; page address
LCD_Y EQU 31H ; Y address
COUNT EQU 32H ; loop count
COUNT1 EQU 33H ; loop count
COUNT2 EQU 34H ; loop count
COUNT3 EQU 35H
;-----------------------------------------------
POINT EQU 36H ; lookup table offset address
POINT1 EQU 37H ; lookup table offset address
POINT2 EQU 38H ; lookup table offset address
POINT3 EQU 40H
TEMP EQU 39H ; temporary register
TEMP1 EQU 3AH ; temporary register
;-----------------------------------------------
ORG 0000H ; reset address
NOP ; empty instructions required by ICD
GOTO MAIN ; jump to the main program
;********************** main program **************************
MAIN
BANKSEL TRISA
CLRF TRISA ; A port output
CLRF TRISD ; D port output
BANKSEL ADCON1
MOVLW 06H
MOVWF ADCON1 ; A port is all digital port
CLRF STATUS
BCF RST ; reset LCD
CALL DELAY ; delay for a while
BSF RST ; clear reset signal
NOP
BSF PSB ; parallel communication
;**************************initialization**********************
MOVLW 30H ; basic instruction operation
CALL SEND_I
MOVLW 01H ; clear display
CALL SEND_I
MOVLW 06H ; specifies the direction in which the cursor moves when writing or reading
CALL SEND_I
MOVLW 0CH ; On display, off cursor, not flashing
CALL SEND_I
;***********************Show Chinese characters **************************
HAN_WR2
CALL CLEAR_P ; clear screen
HAN_WR2A ; "Shenzhen Ganlongsheng Electronics"
CALL QUSHU
GOTO $
;************************ Write preparation***********************
WR_ZB
MOVLW 34H
CALL SEND_I
MOVFW LCD_Y ; Y address
CALL SEND_I
MOVFW LCD_X ; page address
CALL SEND_I
MOVLW 30H
CALL SEND_I
RETURN
;***********************Clear screen************************
CLEAR_P
MOVLW 1H ; clear display
CALL SEND_I
RETURN
;***********************Fetch display program *******************
CLRF POINT ; the lower address of the fetch address
CLRF POINT+1 ; the address of the fetch is 8 bits high (because a total of (128/8) * 64 data is required)
CLRF POINT2 ; temporary register of POINT
CLRF POINT3 ; temporary register of POINT+1
MOVLW 02H ; the whole screen is divided into two small screens (32 lines per small screen)
MOVWF COUNT3
MOVLW 80H ; starting address of the upper half of the screen
MOVWF LCD_X
QUSHU1
MOVLW 80H ; the address of the first byte of each line
MOVWF LCD_Y
MOVLW 20H ; 32 lines per small screen
MOVWF COUNT2
QUSHU2
MOVLW 10H ; 16 bytes per line (16*8=128)
MOVWF COUNT1
CALL WR_ZB ; call write preparation function
QUSHU3
CALL TAB1 ; look up the table
CALL SEND_D ; written to the GDROM of the LCD
CLRF POINT3
INCF POINT, 1 ; offset address plus 1, find the next data
BTFSC STATUS, Z ; whether there are overflows in the lower 8 bits
INCF POINT+1, 1 ; Yes, high 8 digits +1
DECFSZ COUNT1, 1 ; whether to write a line of 16 bytes
GOTO QUSHU3 ; No, go back and continue writing
INCFLCD_Y, 1 ; Yes, write a line
DECFSZ COUNT2, 1 ; whether to write 32 lines
GOTO QUSHU2 ; No, continue to write
MOVLW 88H ; Yes, write half screen
MOVWF LCD_X
DECFSZ COUNT3, 1 ; whether to write the lower half of the screen
GOTO QUSHU1 ; No, continue to write
; yes, open display
MOVLW 36H ; extended instruction, graphic display on
CALL SEND_I
MOVLW 30H ; basic instructions
CALL SEND_I
RETURN
;************************ Send data to LCD***********************
; write data subroutine
; RS=1, RW=0, E=high pulse, D0-D7=data
;************************************************* *********
SEND_D
MOVWF TEMP1 ; temporary data
CALL CHK_BUSY ; determine if the bus is busy
BSF RS
BCF RW
MOVFW TEMP1
MOVWF PORTD ; send data
BSF E
NOP
NOP
BCF E
RETURN
;************************ Send commands to LCD***********************
; write instruction subroutine
; RS=0, RW=0, E=high pulse, D0-D7=execution code
;************************************************* *********
SEND_I
MOVWF TEMP1 ; staging command
CALL CHK_BUSY ; determine if the bus is busy
BCF RS
BCF RW
MOVFW TEMP1
MOVWF PORTD ; send command
BSF E
NOP
NOP
BCF E
RETURN
;************************Check if the bus is busy ***********************
; measuring busy subroutine
; RS=0, RW=1, E=H, D0-D7=Status Word
;************************************************* *********
CHK_BUSY
BANKSEL TRISD
MOVLW 0FFH
MOVWF TRISD ; D port is set to input
CLRF STATUS
MOVLW 0FFH
MOVWF PORTD
BCF RS
BSF RW
CHECK_BUSY_1
NOP
NOP
NOP
BSF E
NOP
NOP
NOP
BTFSS PORTD, 7 ; D7 is high for bus busy, low for bus idle
GOTO $+6
NOP
NOP
NOP
BCF E
GOTO CHECK_BUSY_1
BCF E
BANKSEL TRISD
CLRF TRISD ; restore D port as output
CLRF STATUS
RETURN
;***************************Delay program*******************
DELAY
MOVLW 0afH
MOVWF 20H
MOVLW 0ffh
MOVWF 21H
DECFSZ 21H, 1
GOTO $-1
DECFSZ 20H, 1
GOTO $-5
RETURN
;***************************Delay program 1******************
; display flashing
DELAY1
MOVLW 05H
MOVWF 22H
CALL DELAY
DECFSZ 22H, 1
GOTO $-2
RETURN
;***************************Data Form********************
TAB1
MOVLW LOW(TAB1A); Get the lower 8-bit address of the data header
ADDWF POINT, 0 ; and take the lower 8 bits of the number
MOVWF POINT2 ; dumped to POINT2
BTFSC STATUS, C ; determine if the lower 8 bits have overflow
INCF POINT3, 1 ; Yes, high 8 digits +1
MOVLW HIGH(TAB1A); Get the upper 8-bit address of the data header
ADDWF POINT3, 0
ADDWF POINT+1, 0 ; and the upper 8 bits of the number
MOVWF PCLATH ; prepare the top 5 of the PC
MOVFW POINT2
MOVWF PCL ; prepare the lower 8 bits of the PC
TAB1A: ; data sheet
DT 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00
DT 0X18, 0XFC, 0XB7, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XE0, 0X00, 0X00
DT 0X1E, 0X7F, 0X0C, 0X00, 0X00, 0X07, 0XFF, 0XFF, 0X80, 0X00, 0X0F, 0XF8, 0X7F, 0XE0, 0X03, 0XC0
DT 0X1F, 0XE7, 0X80, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XC0, 0X00, 0X7F, 0XE1, 0XFF, 0XE0, 0X0C, 0X60
DT 0X1F, 0X9B, 0XE0, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XF0, 0X01, 0X80, 0X07, 0XFF, 0XE0, 0X0C, 0X60
DT 0X1F, 0XCF, 0XE0, 0X00, 0X1F, 0XFF, 0XFF, 0XFF, 0XF8, 0X01, 0X00, 0X1F, 0XFF, 0XE0, 0X0C, 0X60
DT 0X13, 0XE4, 0XF0, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFE, 0X00, 0X00, 0XFF, 0X0E, 0X20, 0X0C, 0X60
DT 0X10,0XF0,0XF0,0X00,0XFF,0XFE,0XFF,0XFF,0XFF,0X00,0X00,0XF8,0X0E,0X20,0X0C,0X60
DT 0X1C, 0X7C, 0X38, 0X01, 0XEF, 0XF4, 0X0F, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X7F, 0XE0, 0X0C, 0X60
DT 0X1F, 0X1E, 0X08, 0X03, 0X9F, 0XC0, 0X00, 0XFE, 0XFF, 0XC0, 0X00, 0X07, 0XFF, 0XE0, 0X0D, 0X60
DT 0X1F, 0X03, 0X80, 0X07, 0X27, 0X80, 0X00, 0X3F, 0X3F, 0XE0, 0X00, 0X7F, 0XFF, 0XE0, 0X0D, 0XE0
DT 0X1E, 0XE0, 0XC0, 0X06, 0X4F, 0X00, 0X00, 0X3F, 0XBF, 0XF0, 0X00, 0XFE, 0X1C, 0X20, 0X07, 0XC0
DT 0X1F, 0XF0, 0X20, 0X0E, 0X4E, 0X00, 0X00, 0X1F, 0XCF, 0XF8, 0X00, 0X00, 0X7F, 0XA0, 0X00, 0XC0
DT 0X1F, 0XFE, 0X00, 0X0C, 0X9C, 0X00, 0X00, 0X0F, 0XFF, 0XF8, 0X00, 0X00, 0X7F, 0XE0, 0X00, 0XE0
DT 0X1F, 0XFF, 0X80, 0X1D, 0XF8, 0X00, 0X00, 0X0F, 0XF3, 0XFC, 0X00, 0X3F, 0X8E, 0XE0, 0X00, 0X00
DT 0X1E, 0X03, 0X00, 0X1F, 0X78, 0X00, 0X00, 0X07, 0XC7, 0XFC, 0X00, 0X0F, 0X7F, 0XA0, 0X00, 0X00
DT 0X1F, 0X80, 0X00, 0X1B, 0XF0, 0X00, 0X00, 0X09, 0XCF, 0XFC, 0X00, 0X00, 0X0F, 0XE0, 0X0F, 0X00
DT 0X1F, 0XFE, 0X00, 0X19, 0XF0, 0X00, 0X00, 0X07, 0XC9, 0XFE, 0X00, 0X07, 0X1F, 0XE0, 0X06, 0X00
DT 0X1F, 0XFF, 0XC0, 0X0F, 0XE0, 0X00, 0X00, 0X03, 0XC1, 0XFE, 0X00, 0XFF, 0XFF, 0XE0, 0X06, 0X00
DT 0X1F, 0XC0, 0X40, 0X0F, 0XC0, 0X00, 0X00, 0X03, 0XE7, 0XFE, 0X00, 0X9F, 0XFF, 0X20, 0X06, 0X00
DT 0X1F, 0X00, 0X00, 0X0F, 0XC0, 0X00, 0X00, 0X07, 0XE7, 0XFC, 0X00, 0X0B, 0XCF, 0X20, 0X06, 0X00
DT 0X1F, 0X78, 0X00, 0X0F, 0XC0, 0X00, 0X00, 0X07, 0XE7, 0XFC, 0X00, 0X00, 0X0F, 0XE0, 0X06, 0X00
DT 0X1F, 0XFF, 0X80, 0X07, 0XF0, 0X00, 0X00, 0X03, 0XEF, 0XFC, 0X00, 0X00, 0X3F, 0XE0, 0X06, 0X00
DT 0X13, 0XFF, 0XE0, 0X07, 0XFE, 0X01, 0XE0, 0X01, 0XCF, 0XFC, 0X00, 0X00, 0X3F, 0XE0, 0X06, 0X60
DT 0X1F, 0XFC, 0X00, 0X07, 0XE3, 0X03, 0XF8, 0X06, 0XDF, 0XFC, 0X00, 0X1F, 0XFE, 0X60, 0X06, 0X60
DT 0X1F, 0X80, 0X00, 0X03, 0X80, 0X80, 0XC0, 0X01, 0XFF, 0XF8, 0X00, 0X0F, 0X3F, 0XE0, 0X0F, 0XE0
DT 0X1C, 0X00, 0X00, 0X01, 0X80, 0X41, 0XC0, 0X06, 0XFF, 0XF8, 0X00, 0X00, 0XF3, 0XE0, 0X00, 0X00
DT 0X13, 0XFC, 0X00, 0X03, 0XFC, 0X41, 0XFC, 0X03, 0X7F, 0XF0, 0X00, 0X00, 0X0F, 0XE0, 0X00, 0X00
DT 0X1F, 0XFF, 0X00, 0X03, 0XFE, 0X40, 0XFF, 0X00, 0XFF, 0XF0, 0X00, 0X07, 0XFF, 0XE0, 0X07, 0XC0
DT 0X1F, 0XC0, 0X00, 0X02, 0XF0, 0X40, 0XE1, 0X00, 0X78, 0XF0, 0X00, 0X3C, 0XFC, 0X20, 0X0C, 0X60
DT 0X1E, 0X00, 0X00, 0X02, 0XC0, 0XC0, 0X60, 0X00, 0XF3, 0X70, 0X00, 0X03, 0XFF, 0XE0, 0X00, 0X60
DT 0X10,0X00,0X00,0X02,0X00,0X80,0X60,0X00,0X67,0X30,0X00,0X00,0X7F,0XE0,0X00,0XC0
DT 0X17, 0XFF, 0X00, 0X03, 0X01, 0X80, 0X30, 0X00, 0XFC, 0XB0, 0X00, 0X3F, 0XCF, 0XE0, 0X01, 0X80
DT 0X1F, 0XFA, 0X00, 0X03, 0X03, 0X80, 0X18, 0X01, 0XFC, 0X70, 0X00, 0X3C, 0X8F, 0XE0, 0X03, 0X00
DT 0X1F, 0XB0, 0X00, 0X03, 0X0F, 0X00, 0X0C, 0X02, 0XFE, 0X30, 0X00, 0X0D, 0X3F, 0X60, 0X06, 0X00
DT 0X1F, 0X00, 0X00, 0X03, 0X0F, 0X00, 0X04, 0X05, 0XEE, 0X30, 0X00, 0X03, 0XDF, 0X20, 0X0C, 0X00
DT 0X1C, 0X00, 0X00, 0X02, 0X01, 0X06, 0X00, 0X07, 0XE3, 0X30, 0X01, 0X00, 0XDF, 0XE0, 0X0C, 0X60
DT 0X10,0X1E,0X00,0X03,0X03,0X03,0X80,0X07,0XF1,0X30,0X00,0XE0,0X33,0XE0,0X0F,0XE0
DT 0X1F, 0XEC, 0X00, 0X02, 0X03, 0X01, 0XE0, 0X09, 0XF0, 0X60, 0X00, 0X3C, 0X8E, 0X60, 0X00, 0X00
DT 0X1F, 0X30, 0X00, 0X03, 0X03, 0X9D, 0X30, 0X13, 0XFC, 0X60, 0X00, 0X1F, 0X3F, 0XA0, 0X00, 0X00
DT 0X1F, 0XC1, 0X8C, 0X02, 0X81, 0XF3, 0X10, 0X0F, 0XF0, 0XC0, 0X03, 0X87, 0XC7, 0XE0, 0X03, 0X80
DT 0X1A, 0X06, 0X30, 0X03, 0X03, 0X80, 0X08, 0X13, 0XE0, 0XC0, 0X00, 0XE3, 0XF1, 0XE0, 0X06, 0XC0
DT 0X1C, 0X1C, 0X40, 0X01, 0X82, 0X00, 0X04, 0X0F, 0XE1, 0X80, 0X00, 0X78, 0XFE, 0X60, 0X0C, 0X60
DT 0X13, 0XF8, 0X80, 0X01, 0X46, 0X00, 0X00, 0X07, 0XE3, 0X00, 0X00, 0X3E, 0X7F, 0XE0, 0X0C, 0X60
DT 0X1F, 0X63, 0X00, 0X01, 0X8C, 0X00, 0X00, 0X07, 0XFE, 0X00, 0X00, 0X0F, 0X9F, 0XE0, 0X0D, 0X60
DT 0X1F, 0X8E, 0X04, 0X01, 0X47, 0XEE, 0X00, 0X07, 0XFE, 0X00, 0X00, 0X87, 0XEF, 0XE0, 0X0D, 0X60
DT 0X1E, 0X3C, 0X1C, 0X00, 0XA7, 0XFF, 0X8C, 0X03, 0XF8, 0X00, 0X00, 0XC1, 0XFF, 0XE0, 0X0C, 0X60
DT 0X1F, 0X78, 0X38, 0X00, 0XC3, 0X93, 0X8E, 0X07, 0XF0, 0X00, 0X00, 0X78, 0X7F, 0XE0, 0X0C, 0X60
DT 0X1F, 0XF1, 0X60, 0X00, 0XE3, 0X80, 0X06, 0X07, 0XF0, 0X00, 0X00, 0X3A, 0X1F, 0XE0, 0X06, 0XC0
DT 0X1F, 0XE1, 0X40, 0X00, 0X13, 0XC8, 0X00, 0X0B, 0XF0, 0X00, 0X00, 0X1E, 0X13, 0XE0, 0X03, 0X80
DT 0X17, 0X8F, 0X84, 0X00, 0X61, 0XF8, 0X00, 0X17, 0XF0, 0X00, 0X00, 0X0F, 0XB0, 0XE0, 0X00, 0X00
DT 0X1F, 0X1E, 0X29, 0X80, 0X33, 0X00, 0X00, 0X0F, 0XFC, 0X00, 0X00, 0X43, 0XFD, 0X60, 0X00, 0X00
DT 0X1E, 0X7C, 0X73, 0X00, 0X3A, 0X10, 0X00, 0X0F, 0XF4, 0X00, 0X00, 0X21, 0XFF, 0XA0, 0X03, 0X80
DT 0X15,0XF8,0XE3,0X00,0X1E,0X18,0X00,0X1F,0XF6,0X00,0X00,0X18,0XFF,0XE0,0X06,0XC0
DT 0X1B, 0XE1, 0X86, 0X00, 0X1E, 0X00, 0X00, 0X3F, 0XE6, 0X00, 0X03, 0X0E, 0X7F, 0XE0, 0X0C, 0X60
DT 0X1F, 0XC7, 0X8C, 0X00, 0X1E, 0X00, 0X00, 0X7F, 0XE7, 0X00, 0X03, 0X85, 0X1B, 0XE0, 0X0C, 0X60
DT 0X1F, 0X0F, 0X39, 0X20, 0X07, 0X00, 0X01, 0XFF, 0XCF, 0X00, 0X01, 0XC3, 0XCD, 0XE0, 0X0D, 0X60
DT 0X1E, 0X3E, 0X73, 0X40, 0X03, 0X80, 0X0F, 0XFF, 0X9F, 0X80, 0X00, 0XF1, 0XF0, 0X60, 0X0D, 0X60
DT 0X18,0X7C,0XF6,0X20,0X01,0XE0,0X3F,0XFE,0X3F,0XE0,0X00,0X78,0XFE,0X60,0X0C,0X60
DT 0X11, 0XFB, 0XE6, 0X40, 0X01, 0XFF, 0XFF, 0XFC, 0X7F, 0XFC, 0X08, 0X3C, 0X7F, 0XE0, 0X0C, 0X60
DT 0X1F, 0XF7, 0XFE, 0X40, 0X02, 0XFF, 0XFF, 0XF9, 0XFF, 0XFF, 0X00, 0X0F, 0X3F, 0XE0, 0X06, 0XC0
DT 0X1F, 0XFF, 0XFC, 0X88, 0X06, 0XFF, 0XFD, 0XF3, 0XFF, 0XFF, 0XC1, 0X8F, 0X9F, 0XE0, 0X03, 0X80
DT 0X1F, 0XFF, 0XB9, 0X38, 0X0E, 0XFE, 0X71, 0XE7, 0XFF, 0XFF, 0XE8, 0XC3, 0XEF, 0XE0, 0X00, 0X00
DT 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00
;***************************End of source program*******************
EndMicrosoft Surface Charger
Microsoft Surface charger have 4 types. For Surface Pro 1/2/3/4.
Surface Pro 1/2: 12V 3.6A
Surface Pro 3: 12V 2.58A
Surface Pro 4: 15V 1.6A
Microsoft charger has different connector with other Laptop Adapter. Its connector is magnetic tip.
Definitely Charge Faster, excellent power supply for Microsoft Surface Pro. Just drop it in your bag or even pocket and get going – no need to carry anything else, as power is always within easy reach.
Microsoft Surface Charger,Microsoft Surface RT Charger,Microsoft Surface Tablet Charger,Charger For Microsoft Surface
Shenzhen Waweis Technology Co., Ltd. , https://www.waweis.com