Download - 304 SC1602BSL .doc) - kallanet.com · wh lg wh fûf¸ ® /²&g þfþ ¥ g m 2 wg"&gfçg féf¹h 0ò(ýfÿf¸sunlike&kgug gmgeg gvg" g!·h wh h ¥ g m 2 w h7sc1602bslbh h h e жh

Transcript

×××× ××××

PICLCD

DOS WINDOWS

SC1602BSLB

× SC2004C ×

SUNLIKE × 1200

× 2400 LED

× 800 × 2200

SUNLIKE

SC1602BSLB ×

SC2004C ×

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 ×

SEG 40 × SEG

160

R/W RS E

DB0 DB7

E

EEEE 220ns220ns220ns220ns

ON OFF

50ns

ON OFF

NOP

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

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

DD RAM

I/D

S/C R/L

DD RAM

DL N F

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

CGRAM DDRAM AC

RAM

• DDRAM

↓↓↓↓

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

× PIC

× PIC

×

×

VDDVDDVDDVDD VSSVSSVSSVSS

×

×

×

LCD

LCD

lcd_1.asm

lcd_1.hex

;***********************************************************

;

; (LCD)

;

;

; 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

MOVWF TRISB

BCF STATUS,RP0

RETURN

; PortB

; 89 Bank 0

;

× ×

×

×

P.336 PORTA PORTB

PORTB

SC1602BSLB ×

SC2004C × SUNLIKE

SUNLIKESUNLIKESUNLIKESUNLIKE VDDVDDVDDVDD VSSVSSVSSVSS

Vo Ω

VSS VSS

DB0 DB3 GND

DB0 DB3

ow

DB0DB0DB0DB0 DB3DB3DB3DB3 GNDGNDGNDGND

× PIC

× PIC

LCD

LCD

LCD

b LCD

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

;

× ×

PORTB

×

×