Post on 05-Jun-2018
SUNLIKE
Min Typ Max
VDD- O
℃
℃
℃
VDD-VSS
I SC1602B(16x2)
SC2004C(20x4)
High VIH1
Low VIL1
High VOH1
Low VOL1
R/W
×××× ×××× SUNLIKE
VVVVDDDDDDDD VVVVSSSSSSSS
SC1602BSLB ×
SC2004C ×
O VSS
(VDD) GND VSS)
(Vo) LED
(A) (K) LCD
DB0 DB7 E R/W
RS LCD LCD
COM 16 SEG 40 LCD
LCD
LCD LCD ×
SC1602BSLB × SC2004C ×
SC1602BSLB ×
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
SC2004C ×
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53
14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27
54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67
0000 CG
RAM
CG RAM CGRAM
CG RAM
CG RAM
DD RAM DDRAM
DD RAM
DD RAM
BF BF
BF AC
10 CGRAM DDRAM
DDRAM CGRAM
11 CGRAM DDRAM
DDRAM CGRAM
DDRAM
20H AC DDRAM
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
AC DDRAM
DDRAM
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
DDRAM
DDRAM CGRAM
S=1 DDRAM
DDRAM
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
I/D
I/D
I/D
I/D
I/D
DDRAM
D=0 DDRAM
D=1
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
D
D
DDRAM AC
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
S/C R/L
S/C= R/L
S/C= R/L
S/C= R/L
S/C= R/L
DB7 DB4
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
DL
DL= DB7 DB0
DL= DB7 DB4
N=
N= N=
= ×
= × N=
CGRAMCGRAMCGRAMCGRAM
CGRAM AC MPU
CGRAM CGRAM DB5
DB0
CGRAM
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
DDRAMDDRAMDDRAMDDRAM
DDRAM AC
MPU DDRAM DDRAM DB
DB0
DDRAM
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
BF
BF=
AC AC CGRAM DDRAM
DB DB0
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
BF
10101010 CGRAMCGRAMCGRAMCGRAM DDRAMDDRAMDDRAMDDRAM
DDDDDDDD CGRAM DDRAM
(7)CGRAM (8)DDRAM
DB DB0
10 CGRAM DDRAM
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
11111111 CGRAMCGRAMCGRAMCGRAM DDRAMDDRAMDDRAMDDRAM
DDDDDDDD CGRAM DDRAM
(7)CGRAM (8)DDRAM
DDRAM
DDRAM
DB DB0
11 CGRAM DDRAM
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
↓↓↓↓
WAITWAITWAITWAIT
VDD
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
BF
↓↓↓↓
WAITWAITWAITWAIT
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
BF
↓↓↓↓
WAITWAITWAITWAIT μμμμ
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
BF
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
×
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
RAM
↓↓↓↓
↓↓↓↓
WAITWAITWAITWAIT
VDD
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4
BF
↓↓↓↓
WAITWAITWAITWAIT
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4
BF
↓↓↓↓
WAITWAITWAITWAIT μμμμ
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4
BF
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4
×
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4
RAM
↓↓↓↓
×
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
CGRAM DDRAM
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
↓↓↓↓
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
↓↓↓↓
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
↓↓↓↓
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4
CGRAM DDRAM
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
↓↓↓↓
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
↓↓↓↓
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4
↓↓↓↓
RS R/W DB7 DB6 DB5 DB4 □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
↓↓↓↓
PIC16F877
SC1602BSLB ×
SC2004C × SUNLIKE
→
SUNLIKESUNLIKESUNLIKESUNLIKE VDDVDDVDDVDD VSSVSSVSSVSS
Vo Ω
VSS VSS
;
; LCD DB7 DB0 PIC RB0 RB7
; LCD RS,R/W,E PIC RA2,RA1,RA0
;
;
;
;
;
;
;***********************************************************
LIST P=PIC16F877
INCLUDE P16F877.INC
;
;
;***********************************************************
;
;***********************************************************
COUNT EQU 20H
COUNT1 EQU 21H
COUNT2 EQU 22H
COUNT3 EQU 23H
COUNT4 EQU 24H
DPDT EQU 25H
POINT EQU 26H
RS SET 2
RW SET 1
E SET 0
BUSY_F SET 7
ORG 0
;
;
;
;
;
;
;
;
; LCD
; LCD
; LCD
;
; LCD
;
;
;***********************************************************
;
;***********************************************************
BSF STATUS,RP0
MOVLW B'00000110'
MOVWF ADCON1
MOVLW B'11111000'
; Bank 1
; PortA,E
; ADCON1
; RA2,RA1,RA0
MOVWF TRISA
CLRF TRISB
BCF STATUS,RP0
; PortA
; PortB
; Bank 0
;***********************************************************
;
;***********************************************************
START
CALL LCD_INI
CALL LCD_BUSY
MOVLW B'00001110'
CALL LCD_CMD
CALL TIME1S
;
; 10
;
; 11
; 12 ON ON
; 13
; 14 WAIT( )
TEXT_OUT1
CLRF POINT
ROW_1
MOVF POINT,W
CALL TABLE
ADDLW 0
BTFSC STATUS,Z
GOTO TEXT_OUT2
CALL LCD_DATA
CALL TIME1S
INCF POINT,F
GOTO ROW_1
; 15
; 16
; 17 Wreg (OFFSET)
; 18
; 19 Wreg
;
; TEXT_OUT2
; LCD
; 20 WAIT( )
; 21
; 22 ROW_1
TEXT_OUT2
INCF POINT,F
MOVLW B'11000000'
CALL LCD_CMD
CALL TIME1S
; 23
; 24
; 25
; 26 WAIT( )
ROW_2
MOVF POINT,W
CALL TABLE
ADDLW 0
; 27
; 28 Wreg (OFFSET)
; 29
; 30 Wreg
BTFSC STATUS,Z
GOTO TEXT_CLEAR
CALL LCD_DATA
CALL TIME1S
INCF POINT,F
GOTO ROW_2
;
; TEXT_CLEAR
; LCD
; 31 WAIT( )
; 32
; 33 ROW_2
TEXT_CLEAR
MOVLW B'00000001'
CALL LCD_CMD
CALL TIME1S
;
GOTO TEXT_OUT1
; 34
; 35
; 36 WAIT( )
; 37
TABLE
ADDWF PCL,F
DT "SPECTRUM ",0
DT "0123456789ABCDEF",0
;
; 38 PC OFFSET
;
; TABLE PC+OFFSET
;***********************************************************
; 39
;***********************************************************
LCD_INI
CALL TIME10M
CALL TIME10M
MOVLW B'00110000'
CALL LCD_CMD
CALL TIME10M
MOVLW B'00110000'
CALL LCD_CMD
CALL TIME100
MOVLW B'00110000'
CALL LCD_CMD
CALL TIME100
MOVLW B'00111000'
CALL LCD_CMD
; 40 WAIT( ms)
; WAIT( ms) 10ms× 20ms 15ms
; 41 (8bit )
; 42
; 43 WAIT( ms) 4.1ms
; 44 (8bit )
; 45
; 46 WAIT(100μs)
; 47 (8bit )
; 48
; 49 WAIT(100μs)
; 50 (8bit ,1/16
; 51
CALL LCD_BUSY
MOVLW B'00001000'
CALL LCD_CMD
CALL LCD_BUSY
MOVLW B'00000001'
CALL LCD_CMD
CALL LCD_BUSY
MOVLW B'00000110'
CALL LCD_CMD
RETURN
; 52
; 53
; 54
; 55
; 56
; 57
; 58
; 59
; +1
; 60
;***********************************************************
;
;***********************************************************
LCD_CMD
MOVWF PORTB
BCF PORTA,RW
BCF PORTA,RS
BSF PORTA,E
NOP
BCF PORTA,E
RETURN
; 61
; 62 DB0 DB7
; 63 R/W = 0
; 64 RS = 0
; 65 E = 1 H
; 66 E 220ns
; 67 E = 0 L
;***********************************************************
;
;***********************************************************
LCD_DATA
MOVWF PORTB
BCF PORTA,RW
BSF PORTA,RS
BSF PORTA,E
NOP
BCF PORTA,E
RETURN
; 68
; 69 DB0 DB7
; 70 R/W = 0
; 71 RS = 1
; 72 E = 1 H
; 73 E 220ns
; 74 E = 0 L
;
;***********************************************************
;
;***********************************************************
LCD_BUSY
BSF STATUS,RP0
MOVLW 0FFH
MOVWF TRISB
BCF STATUS,RP0
BCF PORTA,RS
BSF PORTA,RW
BSF PORTA,E
MOVF PORTB,W
BCF PORTA,E
MOVWF DPDT
BTFSC DPDT,BUSY_F
GOTO LCD_BUSY
BCF PORTA,RW
BSF STATUS,RP0
MOVLW 0H
MOVWF TRISB
BCF STATUS,RP0
RETURN
; 75
; 76 Bank 1
; 77
; PortB
; 78 Bank 0
; 79 RS = 0
; 80 R/W = 1
; 81 E = 1 H
; 82 DDRAM
; 83 E = 0 L
; 84
; 85
; BUSY_F=1 LCD_BUSY
; BUSY_F=0
; 86 R/W = 0
; 87 Bank 1
; 88
; PortB
; 89 Bank 0
;
;***********************************************************
;
;***********************************************************
; μ
;
;
;
;
;
;
;
END
PROCESSOR LIST
PROCESSOR PIC16F877
LIST P=PIC16F877
Special Function Register
INC MPLAB
INCLUDE P16F877.INC
#INCLUDE P16F877.INC
ORG ORG
ORG 0 ;0
0
0
Bank 1 Bank 1 Bank 1 Bank 1
PIC Special Register
PIC Special Register
Register File Register File Bank0, Bank1,
Bank2, Bank3
RESET Bank0 Bank1 Bank
Bank0 Bank1
Bank1 STATUS RP0 RP1 Bank
Bank0
Bank1
BSF STATUS,RP0
PortA,E PortA,E PortA,E PortA,E
ADCON1ADCON1ADCON1ADCON1
RARARARA RERERERE ADCON1ADCON1ADCON1ADCON1
RA RE ADCON1
PIC RA RE A/D
ADCON1 LCD
RA0 RA1 RA2
PCFGx 0110 0111 RA0 RA1 RA2
ADCON1 →ADCON1
PCFGx 0110 ADCON1→ ’ ’
RA0 RA1 RA2
RA2,RA1,RA0RA2,RA1,RA0RA2,RA1,RA0RA2,RA1,RA0 PortA PortA PortA PortA
” ” RA2,RA1,RA0
RA ” ” RA
PORTB PORTB PORTB PORTB
CLRF TRISB
B
Bank 0 Bank 0 Bank 0 Bank 0
Bank1
BCF STATUS,RP0
LCD_INI
Busy Flag LCD_BUSY
ONONONON ONONONON
OFF
LCD_CMD
WAIT(WAIT(WAIT(WAIT( ))))
TIME1S
POINT
POINT
ROW_1
WregWregWregWreg
TABLE
WregWregWregWreg
TEXT_OUT2TEXT_OUT2TEXT_OUT2TEXT_OUT2
LCDLCDLCDLCD
” ”
” ” ” ”
” ”
LCD_DATA
TEXT_OUT2
WAIT(WAIT(WAIT(WAIT( ))))
TIME1S
OFFSET
ROW_1 ROW_1 ROW_1 ROW_1
ROW_1
DDRAM ’
’
LCD_CMD
WAIT(WAIT(WAIT(WAIT( ))))
TIME1S
ROW_2
WWWWregregregreg
TABLE
WregWregWregWreg
TEXT_CLEARTEXT_CLEARTEXT_CLEARTEXT_CLEAR
LCDLCDLCDLCD
” ”
” ” ” ”
” ”
LCD_DATA
TEXT_CLEAR
WAIT(WAIT(WAIT(WAIT( ))))
TIME1S
OFFSET
ROW_2 ROW_2 ROW_2 ROW_2
ROW_2
LCD_CMD
WAIT(WAIT(WAIT(WAIT( ))))
TIME1S
TEXT_OUT1
TABLETABLETABLETABLE PC+OFFSETPC+OFFSETPC+OFFSETPC+OFFSET
PCPCPCPC OFFSETOFFSETOFFSETOFFSET
Wreg
ADDWF PCL,F ; Wreg
WAIT(WAIT(WAIT(WAIT( ms)ms)ms)ms)
WAIT(WAIT(WAIT(WAIT( ms)ms)ms)ms) 10ms×10ms×10ms×10ms× 20ms20ms20ms20ms 15ms15ms15ms15ms
(8bit(8bit(8bit(8bit ))))
LCD_CMD
WAIT(WAIT(WAIT(WAIT( ms)ms)ms)ms) 4.1ms4.1ms4.1ms4.1ms
(8bit(8bit(8bit(8bit ))))
LCD_CMD
WAIT(100μs)WAIT(100μs)WAIT(100μs)WAIT(100μs)
μ μ
μ
(8bit(8bit(8bit(8bit ))))
LCD_CMD
WAIT(100μs)WAIT(100μs)WAIT(100μs)WAIT(100μs)
μ μ
μ
(8bit(8bit(8bit(8bit ,1/16,1/16,1/16,1/16 ,,,, ×××× ))))
LCD_CMD
Busy Flag
LCD_BUSY
LCD_CMD
Busy Flag
LCD_BUSY
LCD_CMD
Busy Flag
LCD_BUSY
+1+1+1+1
LCD_CMD
DB0DB0DB0DB0 DB7DB7DB7DB7
R/W = 0 R/W = 0 R/W = 0 R/W = 0
RS = 0 RS = 0 RS = 0 RS = 0
E = 1 E = 1 E = 1 E = 1 HHHH
EEEE 220ns220ns220ns220ns
n NOP
ON OFF
50ns
ON OFF
NOP
E = 0 E = 0 E = 0 E = 0 LLLL
DB0DB0DB0DB0 DB7DB7DB7DB7
R/W = 0 R/W = 0 R/W = 0 R/W = 0
RS = 1 RS = 1 RS = 1 RS = 1
E = 1 E = 1 E = 1 E = 1 HHHH
EEEE 220ns220ns220ns220ns
n NOP
E = 0 E = 0 E = 0 E = 0 LLLL
Bank 1 Bank 1 Bank 1 Bank 1
RB Bank
PortB PortB PortB PortB
” ”
Bank 0 Bank 0 Bank 0 Bank 0
RS = 0 RS = 0 RS = 0 RS = 0
R/W = 1 R/W = 1 R/W = 1 R/W = 1
E = 1 E = 1 E = 1 E = 1 HHHH
DDRAMDDRAMDDRAMDDRAM
RB DDRAM
E = 0 E = 0 E = 0 E = 0 LLLL
DPDT
BUSY_F=1BUSY_F=1BUSY_F=1BUSY_F=1 LCD_BUSYLCD_BUSYLCD_BUSYLCD_BUSY
BUSY_F=0BUSY_F=0BUSY_F=0BUSY_F=0
DPDT (BF)
BF=1
R/W = 0 R/W = 0 R/W = 0 R/W = 0
Bank 1 Bank 1 Bank 1 Bank 1
RB Bank
PortB PortB PortB PortB
” ”
Bank 0 Bank 0 Bank 0 Bank 0
BSFBSFBSFBSF BCFBCFBCFBCF NOPNOPNOPNOP
BSF BCF
BSF BCF
50nsec
NOP
;***********************************************************
;
;***********************************************************
LCD_CMD
MOVWF PORTB
BCF PORTA,RW
NOPNOPNOPNOP
BCF PORTA,RS
NOPNOPNOPNOP
BSF PORTA,E
; 61
; 62 DB0 DB7
; 63 R/W = 0
;;;;
; 64 RS = 0
;;;;
; 65 E = 1 H
NOP
BCF PORTA,E
RETURN
; 66 E 220ns
; 67 E = 0 L
;***********************************************************
;
;***********************************************************
LCD_DATA
MOVWF PORTB
BCF PORTA,RW
NOPNOPNOPNOP
BSF PORTA,RS
NOPNOPNOPNOP
BSF PORTA,E
NOP
BCF PORTA,E
RETURN
; 68
; 69 DB0 DB7
; 70 R/W = 0
;;;;
; 71 RS = 1
;;;;
; 72 E = 1 H
; 73 E 220ns
; 74 E = 0 L
;
;***********************************************************
;
;***********************************************************
LCD_BUSY
BSF STATUS,RP0
MOVLW 0FFH
MOVWF TRISB
BCF STATUS,RP0
BCF PORTA,RS
NOPNOPNOPNOP
BSF PORTA,RW
NOPNOPNOPNOP
BSF PORTA,E
MOVF PORTB,W
BCF PORTA,E
MOVWF DPDT
BTFSC DPDT,BUSY_F
GOTO LCD_BUSY
BCF PORTA,RW
BSF STATUS,RP0
MOVLW 0H
; 75
; 76 Bank 1
; 77
; PortB
; 78 Bank 0
; 79 RS = 0
;;;;
; 80 R/W = 1
;;;;
; 81 E = 1 H
; 82 DDRAM
; 83 E = 0 L
; 84
; 85
; BUSY_F=1 LCD_BUSY
; BUSY_F=0
; 86 R/W = 0
; 87 Bank 1
; 88
SC1602BSLB ×
SC2004C × SUNLIKE
→
SUNLIKESUNLIKESUNLIKESUNLIKE VDDVDDVDDVDD VSSVSSVSSVSS
Vo Ω
VSS VSS
DB0 DB3 GND
DB0 DB3
ow
DB0DB0DB0DB0 DB3DB3DB3DB3 GNDGNDGNDGND
× PIC
→
lcd_2.asm
→
lcd_2.hex
;***********************************************************
;
; (LCD)
;
;
; LCD DB7 DB4 PIC RB4 RB7
; LCD DB3 DB0 GND
; LCD RS,R/W,E PIC RB2,RB1,RB0
;
;
;
;
;
;
;***********************************************************
LIST P=PIC16F877
INCLUDE P16F877.INC
;
;
;***********************************************************
;
;***********************************************************
COUNT EQU 20H
COUNT1 EQU 21H
COUNT2 EQU 22H
COUNT3 EQU 23H
COUNT4 EQU 24H
DPDT EQU 25H
POINT EQU 26H
RS SET 2
RW SET 1
E SET 0
BUSY_F SET 7
ORG 0
;
;
;
;
;
;
;
;
; LCD
; LCD
; LCD
;
; LCD
;
;
;***********************************************************
;
;***********************************************************
BSF STATUS,RP0
CLRF TRISB
BCF STATUS,RP0
; Bank 1
; PortB
; Bank 0
;***********************************************************
;
;***********************************************************
START
CALL LCD_INI
CALL LCD_BUSY_4
MOVLW B'00001110'
CALL LCD_CMD_4
CALL TIME1S
;
; 10
;
; 11
; 12 ON ON
; 13
; 14 WAIT( )
TEXT_OUT1
CLRF POINT
ROW_1
MOVF POINT,W
CALL TABLE
; 15
; 16
; 17 Wreg (OFFSET)
; 18
ADDLW 0
BTFSC STATUS,Z
GOTO TEXT_OUT2
CALL LCD_DATA_4
CALL TIME1S
INCF POINT,F
GOTO ROW_1
; 19 Wreg
;
; TEXT_OUT2
; LCD
; 20 WAIT( )
; 21
; 22 ROW_1
TEXT_OUT2
INCF POINT,F
MOVLW B'11000000'
CALL LCD_CMD_4
CALL TIME1S
; 23
; 24
; 25
; 26 WAIT( )
ROW_2
MOVF POINT,W
CALL TABLE
ADDLW 0
BTFSC STATUS,Z
GOTO TEXT_CLEAR
CALL LCD_DATA_4
CALL TIME1S
INCF POINT,F
GOTO ROW_2
; 27
; 28 Wreg (OFFSET
; 29
; 30 Wreg
;
; TEXT_CLEAR
; LCD
; 31 WAIT( )
; 32
; 33 ROW_2
TEXT_CLEAR
MOVLW B'00000001'
CALL LCD_CMD_4
CALL TIME1S
;
GOTO TEXT_OUT1
; 34
; 35
; 36 WAIT( )
; 37
TABLE
ADDWF PCL,F
DT "SPECTRUM ",0
DT "0123456789ABCDEF",0
;
; 38 PC OFFSET
;
; TABLE PC+OFFSET
;***********************************************************
; 39
;***********************************************************
LCD_INI
CALL TIME10M
CALL TIME10M
MOVLW B'00110000'
CALL LCD_CMD
CALL TIME10M
MOVLW B'00110000'
CALL LCD_CMD
CALL TIME100
MOVLW B'00110000'
CALL LCD_CMD
CALL TIME100
MOVLW B'00100000'
CALL LCD_CMD
CALL LCD_BUSY_4
MOVLW B'00101000'
CALL LCD_CMD_4
CALL LCD_BUSY_4
MOVLW B'00001000'
CALL LCD_CMD_4
CALL LCD_BUSY_4
MOVLW B'00000001'
CALL LCD_CMD_4
CALL LCD_BUSY_4
MOVLW B'00000110'
CALL LCD_CMD_4
RETURN
; 40 WAIT( ms)
; WAIT( ms) 10ms× 20ms 15ms
; 41 (8bit )
; 42
; 43 WAIT( ms) 4.1ms
; 44 (8bit )
; 45
; 46 WAIT(100μs)
; 47 (8bit )
; 48
; 46' WAIT(100μs)
; 47' (4bit )
; 48'
; 49
; 50 (4bit ,1/16
; 51
; 52
; 53
; 54
; 55
; 56
; 57
; 58
; 59
; +1
; 60
;***********************************************************
;
;***********************************************************
LCD_CMD_4
MOVWF DPDT
ANDLW 0F0H
CALL LCD_CMD
SWAPF DPDT,W
ANDLW 0F0H
CALL LCD_CMD
RETURN
LCD_CMD
MOVWF PORTB
BCF PORTB,RW
BCF PORTB,RS
BSF PORTB,E
NOP
BCF PORTB,E
RETURN
; 101 4
; 102
; 103
; 104
; 105
; 106
; 107
; 61
; 62 DB4 DB7
; 63 R/W = 0
; 64 RS = 0
; 65 E = 1 H
; 66 E 220ns
; 67 E = 0 L
;***********************************************************
;
;***********************************************************
LCD_DATA_4
MOVWF DPDT
ANDLW 0F0H
CALL LCD_DATA
SWAPF DPDT,W
ANDLW 0F0H
CALL LCD_DATA
RETURN
LCD_DATA
MOVWF PORTB
BCF PORTB,RW
BSF PORTB,RS
BSF PORTB,E
NOP
; 111 4
; 112
; 113
; 114
; 115
; 116
; 117
; 68
; 69 DB4 DB7
; 70 R/W = 0
; 71 RS = 1
; 72 E = 1 H
; 73 E 220ns
BCF PORTB,E
RETURN
; 74 E = 0 L
;
;***********************************************************
;
;***********************************************************
LCD_BUSY_4
BSF STATUS,RP0
MOVLW 0F0H
MOVWF TRISB
BCF STATUS,RP0
BCF PORTB,RS
BSF PORTB,RW
BSF PORTB,E
MOVF PORTB,W
BCF PORTB,E
MOVWF DPDT
BSF PORTB,E
MOVF PORTB,W
BCF PORTB,E
BTFSC DPDT,BUSY_F
GOTO LCD_BUSY_4
BCF PORTB,RW
BSF STATUS,RP0
MOVLW 0H
MOVWF TRISB
BCF STATUS,RP0
RETURN
; 75
; 76 Bank 1
; 77
; PortB
; 78 Bank 0
; 79 RS = 0
; 80 R/W = 1
; 81 E = 1 H
; 82 DDRAM
; 83 E = 0 L
; 84
; 81' E = 1 H
; 82' DDRAM
; 83' E = 0 L
; 85
; BUSY_F=1 LCD_BUSY_4
; BUSY_F=0
; 86 R/W = 0
; 87 Bank 1
; 88
; PortB
; 89 Bank 0
;
;***********************************************************
;
;***********************************************************
; μ
;
;
;
;
;
;
;
END
PROCESSOR LIST
PROCESSOR PIC16F877
LIST P=PIC16F877
Special Function Register
INC MPLAB
INCLUDE P16F877.INC
#INCLUDE P16F877.INC
ORG ORG
ORG 0 ;0
0
0
Bank 1 Bank 1 Bank 1 Bank 1
PIC Special Register
PIC Special Register
Register File Register File Bank0, Bank1,
Bank2, Bank3
RESET Bank0 Bank1 Bank
Bank0 Bank1
Bank1 STATUS RP0 RP1 Bank
Bank0
Bank1
BSF STATUS,RP0
PORTA
PORTB PORTB PORTB PORTB
CLRF TRISB
B
Bank 0 Bank 0 Bank 0 Bank 0
Bank1
BCF STATUS,RP0
LCD_INI
Busy Flag
LCD_BUSY_4
ONONONON ONONONON
OFF
LCD_CMD_4
WAIT(WAIT(WAIT(WAIT( ))))
TIME1S
POINT
POINT
ROW_1
WregWregWregWreg
TABLE
WregWregWregWreg
TEXT_OUT2TEXT_OUT2TEXT_OUT2TEXT_OUT2
LCDLCDLCDLCD
” ”
” ” ” ”
” ”
LCD_DATA_4
TEXT_OUT2
WAIT(WAIT(WAIT(WAIT( ))))
TIME1S
OFFSET
ROW_1 ROW_1 ROW_1 ROW_1
ROW_1
DDRAM ’
’
LCD_CMD_4
WAIT(WAIT(WAIT(WAIT( ))))
TIME1S
ROW_2
WregWregWregWreg
TABLE
WregWregWregWreg
TEXT_CLEARTEXT_CLEARTEXT_CLEARTEXT_CLEAR
LCDLCDLCDLCD
” ”
” ” ” ”
” ”
LCD_DATA_4
TEXT_CLEAR
WAIT(WAIT(WAIT(WAIT( ))))
TIME1S
OFFSET
ROW_2 ROW_2 ROW_2 ROW_2
ROW_2
LCD_CMD_4
WAIT(WAIT(WAIT(WAIT( ))))
TIME1S
TEXT_OUT1
TABLETABLETABLETABLE PC+OFFSETPC+OFFSETPC+OFFSETPC+OFFSET
PCPCPCPC OFFSETOFFSETOFFSETOFFSET
Wreg
ADDWF PCL,F ; Wreg
WAIT(WAIT(WAIT(WAIT( ms)ms)ms)ms)
WAIT(WAIT(WAIT(WAIT( ms)ms)ms)ms) 10ms×10ms×10ms×10ms× 20ms20ms20ms20ms 15ms15ms15ms15ms
(8bit(8bit(8bit(8bit ))))
LCD_CMD
WAIT(WAIT(WAIT(WAIT( ms)ms)ms)ms) 4.1ms4.1ms4.1ms4.1ms
(8bit(8bit(8bit(8bit ))))
LCD_CMD
WAIT(100μs)WAIT(100μs)WAIT(100μs)WAIT(100μs)
μ μ
μ
(8bit(8bit(8bit(8bit ))))
LCD_CMD
’’’’ WAIT(100μs)WAIT(100μs)WAIT(100μs)WAIT(100μs)
μ μ
μ
’’’’ (((( bitbitbitbit ))))
’’’’
LCD_CMD
Busy Flag
LCD_BUSY_4
(4bit(4bit(4bit(4bit ,1/16,1/16,1/16,1/16 ,,,, ×××× ))))
LCD_CMD_4
Busy Flag
LCD_BUSY_4
LCD_CMD_4
Busy Flag
LCD_BUSY_4
LCD_CMD_4
Busy Flag
LCD_BUSY_4
+1+1+1+1
LCD_CMD_4
101101101101 4444
102102102102
DPDT
103103103103
104104104104
105105105105
DPDT
106106106106
107107107107
DB4DB4DB4DB4 DB7DB7DB7DB7
R/W = 0 R/W = 0 R/W = 0 R/W = 0
RS = 0 RS = 0 RS = 0 RS = 0
E = 1 E = 1 E = 1 E = 1 HHHH
EEEE 220ns220ns220ns220ns
n NOP
ON OFF
50ns
ON OFF
NOP
E = 0 E = 0 E = 0 E = 0 LLLL
111111111111 4444
112112112112
DPDT
113113113113
114114114114
115115115115
DPDT
116116116116
117117117117
DB4DB4DB4DB4 DB7DB7DB7DB7
R/W = 0 R/W = 0 R/W = 0 R/W = 0
RS = 1 RS = 1 RS = 1 RS = 1
E = 1 E = 1 E = 1 E = 1 HHHH
EEEE 220ns220ns220ns220ns
n NOP
E = 0 E = 0 E = 0 E = 0 LLLL
BBBBank 1 ank 1 ank 1 ank 1
RB Bank
RB4 RB7
” ” ” ”
RS R/W E RB3
Bank 0 Bank 0 Bank 0 Bank 0
RS = 0 RS = 0 RS = 0 RS = 0
R/W = 1 R/W = 1 R/W = 1 R/W = 1
E = 1 E = 1 E = 1 E = 1 HHHH
DDRAMDDRAMDDRAMDDRAM
RB DDRAM
E = 0 E = 0 E = 0 E = 0 LLLL
DPDT
’’’’ E = 1 E = 1 E = 1 E = 1 HHHH
’’’’ DDRAMDDRAMDDRAMDDRAM
RB DDRAM
’’’’ E = 0 E = 0 E = 0 E = 0 LLLL
BUSY_F=1BUSY_F=1BUSY_F=1BUSY_F=1 LCD_BUSY_4 LCD_BUSY_4 LCD_BUSY_4 LCD_BUSY_4
BUSY_F=0BUSY_F=0BUSY_F=0BUSY_F=0
DPDT (BF)
BF=1
R/W = 0 R/W = 0 R/W = 0 R/W = 0
Bank 1 Bank 1 Bank 1 Bank 1
RB Bank
PortB PortB PortB PortB
” ”
Bank 0 Bank 0 Bank 0 Bank 0
BSFBSFBSFBSF BCFBCFBCFBCF NOPNOPNOPNOP
BSF BCF
BSF BCF
50nsec
NOP
NOP 2001.6.11
;***********************************************************
;
;***********************************************************
LCD_CMD
MOVWF PORTB
BCF PORTB,RW
NOPNOPNOPNOP
BCF PORTB,RS
NOPNOPNOPNOP
BSF PORTB,E
NOP
BCF PORTB,E
RETURN
; 61
; 62 DB4 DB7
; 63 R/W = 0
;;;;
; 64 RS = 0
;;;;
; 65 E = 1 H
; 66 E 220ns
; 67 E = 0 L
;***********************************************************
;
;***********************************************************
LCD_DATA
MOVWF PORTB
BCF PORTB,RW
NOPNOPNOPNOP
BSF PORTB,RS
NOPNOPNOPNOP
BSF PORTB,E
NOP
BCF PORTB,E
RETURN
; 68
; 69 DB4 DB7
; 70 R/W = 0
;;;;
; 71 RS = 1
;;;;
; 72 E = 1 H
; 73 E 220ns
; 74 E = 0 L
;
;***********************************************************
;
;***********************************************************
LCD_BUSY_4
BSF STATUS,RP0
MOVLW 0F0H
MOVWF TRISB
BCF STATUS,RP0
BCF PORTB,RS
NOPNOPNOPNOP
BSF PORTB,RW
NOPNOPNOPNOP
BSF PORTB,E
NONONONOPPPP
MOVF PORTB,W
BCF PORTB,E
MOVWF DPDT
BSF PORTB,E
MOVF PORTB,W
BCF PORTB,E
BTFSC DPDT,BUSY_F
GOTO LCD_BUSY_4
BCF PORTB,RW
BSF STATUS,RP0
MOVLW 0H
MOVWF TRISB
BCF STATUS,RP0
RETURN
; 75
; 76 Bank 1
; 77
; PortB
; 78 Bank 0
; 79 RS = 0
;;;;
; 80 R/W = 1
;;;;
; 81 E = 1 H
;;;;
; 82 DDRAM
; 83 E = 0 L
; 84
; 81' E = 1 H
; 82' DDRAM
; 83' E = 0 L
; 85
; BUSY_F=1 LCD_BUSY_4
; BUSY_F=0
; 86 R/W = 0
; 87 Bank 1
; 88
; PortB
; 89 Bank 0
;
× ×