304 SC1602BSL .doc) - kallanet.com · wh lg wh fûf¸ ® /²&g þfþ ¥ g m 2 wg"&gfçg féf¹h...

73
ᾮᬗ⾲♧ჾ䛻䛴䛔䛶 ᾮᬗ⾲♧ჾ䛻䛴䛔䛶 ᾮᬗ⾲♧ჾ䛻䛴䛔䛶 ᾮᬗ⾲♧ჾ䛻䛴䛔䛶 ᕷ㈍䛾ᾮᬗ⾲♧ჾ䛻䛿䚸䠍䠒Ꮠ 䠍䠒Ꮠ 䠍䠒Ꮠ 䠍䠒Ꮠ䠎⾜ 䠎⾜ 䠎⾜ 䠎⾜䛾䠨䠟䠠䛸䚸䠎䠌Ꮠ 䠎䠌Ꮠ 䠎䠌Ꮠ 䠎䠌Ꮠ䠐⾜ 䠐⾜ 䠐⾜ 䠐⾜䛾䠨䠟䠠䛜⯡ⓗ䛷䛩䛾䛷䚸䛣 䛾䠎✀㢮䛾䠨䠟䠠䝰䝆䝳䞊䝹䜢䛳䛶䚸䜎䛪䛿䠬䠥䠟䛛䜙⡆༢䛺Ꮠ⾲♧䜢䛩䜛䝥䝻䜾䝷䝮䜢స䛳䛶䛔 䛟䛣䛸䛻䛧䜎䛩䚹䜎䛯䚸ㄞ⪅䛾᪉䚻䛻䜒ỗ⏝ⓗ䛻䛳䛶䛔䛯䛰䛟䛯䜑䛻䚸䝟䝋䝁䞁䛛䜙䝅䝸䜰䝹䝕䞊䝍 ㏻ಙ䠄䠮䠯䠎䠏䠎䠟䠅䜢䛧䛶Ꮠ⾲♧䜢䛩䜛䛸䛔䛳䛯䝥䝻䜾䝷䝮䜒⤂䛧䛶䛔䛟䛴䜒䜚䛷䛩䚹⤊ⓗ䛻 䛿䝇䝨䜰䝘䛾䝕䞊䝍⾲♧䛺䛹䛻ᛂ⏝䛷䛝䜜䜀䛸ᛮ䛳䛶䛔䜎䛩䚹 䛺䛚䚸⛅᭶㟁Ꮚ㏻䛷䛿䚸䛂䠬䠥䠟䠨䠟䠠䜻䝑䝖䛃䛸䛧䛶䠮䠯䠎䠏䠎䠟䛷䝅䝸䜰䝹ไᚚ䜢⾜䛖䜻䝑䝖䛜Ⓨ䛥 䜜䛶䛚䜚䜎䛩䛜䚸䛣䛾䜻䝑䝖䛷䛿䠮䠯䠎䠏䠎䠟䛸䛾䜲䞁䝍䞊䝣䜵䞊䝇䛜⡆␎䛥䜜䛶䛚䜚䜎䛩䚹⾲♧ჾ ༢య䛷䛾స䛰䛡䛺䜙䚸⡆ⓗ䛺ᵓᡂ䛷䜒䜘䛔䛾䛷䛩䛜䚸䠠䠠䠯䜻䝑䝖䛸⤌䜏䜟䛫䛯䜚䚸䛒䜛䛔䛿 䛾䝅䝸䜰䝹䝕䞊䝍㏻ಙ䜒⥴䛻⾜䛖䛸䛔䛳䛯ᵓᡂ䛻䛿ṧᛕ䛺䛜䜙䛝䛷䛩䚹䜔䛿䜚䜲䞁䝍䞊䝣 䜵䞊䝇䛻䛿䚸䝺䝧䝹ኚ䠥䠟䜢⏝䛔䜛ᵓᡂ䛻䛩䜛䜉䛝䛷䛩䚹䜎䛯䚸PICLCD 䜻䝑䝖䛻ᒓ䛾䝋䝣䝖䛷䛩 䛜䚸䛔䜎䛰䛻䝁䞁䝖䝻䞊䝹䝋䝣䝖䛜 DOS ⏝䛷䛩䚹䛭䛣䛷䚸INDOS ⏝䛻ᨵኚ䛧䛶䜰䝺䞁䝆䛧䛶䛔䛟䛣 䛸䛻䛧䜎䛧䜗䛖䚹 䠬䠥䠟䠨䠟䠠䜻䝑䝖䛾ㄝ᭩䛾ᚋ䛻ḟ䛾䜘䛖䛺䝁䝯䞁䝖䛜䛒䜚䜎䛧䛯䚹䛂䛣䛾䜻䝑䝖䛿䚸䝬䝙䝳䜰䝹㏻䜚 䛻〇స䛧䛶䛳䛶䛔䛯䛰䛔䛶䜒ᵓ䛔䜎䛫䜣䛜䚸䛣䛾䜻䝑䝖䜢ඖ䛻䚸䛚ᐈᵝ䛜⮬⏤䛻ᨵ㐀䞉䜹䝇䝍䝬䜲 䝈䛧䛶䛔䛯䛰䛟䛣䛸䛷䚸┠ⓗ䛻䛳䛯䝴䝙䝑䝖䛸䛺䜛䜘䛖䛻䞉䞉䞉䞉䞉䛃䛸グ䛥䜜䛶䛚䜚䜎䛩䚹䛸䛔䛖䛣䛸䛷䚸 ỗ⏝ⓗ䛻䛔䜝䛔䜝䛘䜛䠨䠟䠠䜻䝑䝖䛻䛧䛶䛔䛝䛯䛔䛸⪃䛘䛶䛔䜎䛩䚹 ᾮᬗ⾲♧ჾ䛾እほ ᾮᬗ⾲♧ჾ䛾እほ ᾮᬗ⾲♧ჾ䛾እほ ᾮᬗ⾲♧ჾ䛾እほ ᅗ䠍䛻ᾮᬗ⾲♧ჾ䛾⾲㠃እほ䚸䛚䜘䜃ᅗ䠎䛻㠃እほ䜢♧䛧䜎䛩䚹䛜䚸SC1602BSLB䠄䠍䠒Ꮠ 䠎⾜䠅䛷䚸ୗ䛜 SC2004C䠄䠎䠌Ꮠ䠐⾜䠅䛸䛝䛥䜢ẚ㍑䛩䜛䛯䜑䛻୪䜉䛶䛔䜎䛩䚹䛔䛪䜜䜒䚸 SNLIKE ♫〇䛷⛅᭶㟁Ꮚ㏻䛷㉎ධ䛧䛯䜒䛾䛷䛩䚹ẁ䛷䛩䛜䚸䠍䠒Ꮠ䠎⾜䛷 1200 䠈䠎䠌 Ꮠ䠐⾜䛷 2400 䛸䛺䛳䛶䛔䜎䛧䛯䚹䛺䛚䚸䛣䛾ᾮᬗ⾲♧ჾ䛻䛿 LED 䝞䝑䜽䝷䜲䝖䛾᭷↓䛜䛒䜚䜎 䛩䚹䝞䝑䜽䝷䜲䝖↓䛧䛾ᾮᬗ⾲♧ჾ䛷䛧䛯䜙䚸䠍䠒Ꮠ䠎⾜䛷 800 䠈䠎䠌Ꮠ䠐⾜䛷 2200 䛸䛺 䛳䛶䛔䜎䛩䚹 ᅗ䠍䠊ᾮᬗ⾲♧ჾ䛾⾲㠃እほ ᅗ䠎䠊ᾮᬗ⾲♧ჾ䛾㠃እほ

Transcript of 304 SC1602BSL .doc) - kallanet.com · wh lg wh fûf¸ ® /²&g þfþ ¥ g m 2 wg"&gfçg féf¹h...

×××× ××××

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

×

×