การใช้งาน LCD โมดูล

การใช้งาน LCD โมดูล
คำสั่งควบคุมการแสดงผลของ LCD โมดูล

คำสั่งควบคุมการแสดงผลของ LCD โมดูล

 Instruction
RS
R/W
Command Code (binary)
Description
7
6
5
4
3
2
1
0
1
Clear Display
0
0
0
0
0
0
0
0
0
1
Clear entire display and move cursor home (address 0)
2
Home Display
0
0
0
0
0
0
0
0
1
0
Move cursor home and return display to home position.
3
Entry Mode Set
0
0
0
0
0
0
0
1
M
S
Sets cursor direction (M: 0=left, 1=right) and display scrolling (S: 0=no scroll, 1=scroll)
4
Display/Cursor
0
0
0
0
0
0
1
D
C
B
Sets display on/off (D), cursor on/off (C) and blinking cursor (B). (0=off, 1=on)
5
Cursor or Display Shift
0
0
0
0
0
1
C
M
0
0
Cursor or Display Shift (C: 0=cursor, 1=display) left or right (M: 0=left, 1=right).
6
Function Set
0
0
0
0
1
D
N
F
0
0
Data bus size (D: 0=4-bits, 1=8-bits), lines No.(N: 0=1-line, 1=2-lines) and font size (F: 0=5x7, 1=5x10)
7
Set CG-RAM Address
0
0
0
1
CGRAM ADDRESS
Move pointer to Character Generator RAM location specified by address (ADDRESS)
8
Set DD-RAM Address
0
0
1
DDRAM ADDRESS
Move cursor to Display Data RAM location specified by address (ADDRESS)
9
Busy, ADD.Read
0
1
BF
ADDRESS
Read Busy flag, And Address Read
10
CGRAM,DDRAM WR
1
0
WRITE DATA
Write Data to DDRAM or CGRAM
11
CGRAM,DDRAM RD
1
1
READ DATA
Read Data to DDRAM or CGRAM

ตารางที่1 คำสั่งควบคุมการแสดงผล LCD


รายละเอียดคำสั่ง 
 1). เคลียร์การแสดงผล (Clear Display) 
 
76543210
00000001
 
bit0=1 เคลียร์การแสดงผล 
เคอร์เซอร์กลับไปอยู่ที่มุมซ้ายมือสุด 
RS=0, R/W=0  
 
   
 2).Home Display 
 
76543210
0000001-
 
bit1=1 เคอร์เซอร์กลับไปอยู่ที่มุมซ้ายมือสุด 
ข้อมูลไม่มีการเปลี่ยนแปลง 
RS=0, R/W=0  
 
   
 3).โหมดการป้อนข้อมูล (Entry Mode Set ) 
 
76543210
000001MS
 
bit2=1 
M (Address Increase/Decrase) , M=0 ลดตำแหน่งแอดเดรส,M=1 เพิ่มตำแหน่งแอดเดรส 
RS=0, R/W=0 S (Shift bit) การเลื่อนข้อมูล,S=0 เคอร์เซอร์จะเลื่อนไปทางขวา ,S=1เคอร์เซอร์จะอยู่กับที่
 
   
   
 4).การควบคุมการแสดงผล (Display/Cursor ) 
 
76543210
00001DC B
 
bit3=1 
D (Display ON/OFF) D=0 OFF, D=1 ON, 
RS=0, R/W=0 C (Cursor ON/OFF) C=0 OFF, C=1 ON,
  B   (Blinking Cursor ON/OFF B=0 OFF, B=1 ON,
 
   
 5).การควบคุมการเลื่อนเคอร์เซอร์ ( Cursor or Display Shift ) 
 
76543210
0001CM  --
 
bit4=1 
C (Cursor or Display Shift) C=0 shift cursor ,C=1 shift display 
RS=0, R/W=0 M (Move left/right) M=0 left, M=1 right,
 
   
 6).ฟังก์ชั่นเซ็ท ( Function Set ) 
 
76543210
001DN  F  - -
 
bit5=1 
D (Data bus size ) D= 0 is 4-bits,D= 1 is 8-bits, 
RS=0, R/W=0 N ( lines No.)N= 0 is 1-line,N= 1 is 2-lines
  F ( font size) F= 0 is 5x7,F= 1 is 5x10
 
  
 7).เซ็ทต่ำแหน่งใน CG-RAM ( Set CG-RAM Address) 
 
76543210
01A5A4A3A2A1A0
 
bit6=1 
หน่วยความจำชั่วคราว เก็บข้อมูลตัวอักษร CG-RAM (Character Generator RAM) 
RS=0, R/W=0 A0-A5 เป็นต่ำแหน่งแอดเดรสใน CG-RAM
 
 
 8).เซ็ทต่ำแหน่งใน DD-RAM ( Set DD-RAM Address) 
 
76543210
1A6A5A4A3A2A1A0
 
bit7=1 
หน่วยความจำชั่วคราว เก็บข้อมูลการแสดง DD-RAM (Display Data RAM) 
RS=0, R/W=0 A0-A6 เป็นต่ำแหน่งแอดเดรสใน DD-RAM ซึ่งจะถูกคัดลอกไปยัง Address Counter (AC)
 
  
 DD-RAM คือหน่วยความจำที่เก็บข้อมูลการแสดงผล หากเขียนรหัส ASCII ลงในหน่วยความจำนี้ก็จะปรากฏที่จอ LCD ทันที 
 ต่ำแหน่ง Address ของ LCD แต่ละแบบ 
   
 1 x 16 Display 
 
Line 1012345676465666768697971
 
   
 2 x 16 Display 
 
Line 10123456789101112131415
Line 264656667686979717273747576777879
 
   
 4 x 20 Display 
 
Line 1012345678910111213141516171819
Line 26465666768697971727374757677787980818283
Line 32021222324252627282930313233343536373839
Line 484858687888990919293949596979899100101102103
 
 
 เช่นกรณีใช้งาน LCD โมดูลแบบ 2x16 ต้องการให้แสดงผลที่บรรทัดที่ 2 ใน column แรก 
 จะมีค่า address = 64(dec) 
 โดยการนำคำสั่งนี้คือ 10000000 หรือ 0x80 มา OR กับ address 
 0x80 OR 64(dec) = 0xC0 จะเป็นชุดคำสั่งที่ใช้เขียนไปยังโมดู LCD 
   
 9). การอ่าน BUSY Flag And Address Counter (BF and AC) 
 
76543210
BFA6A5A4A3A2A1A0
 
BF=bit7เป็นตัวบอกสถานะของ LCD
R/W=1กำหนดให้เป็น Read mode
RS=0, R/W=1 BF=0 ว่าง, BF=1 ไม่ว่าง
  A0-A6 = Address Counter (AC)
 
   
 10). การเขียนข้อมูลใน CG or DD-RAM 
 
76543210
D7D6D5D4D3D2D1D0
 
RS=1กำหนดให้เป็นข้อมูล
R/W=0กำหนดให้เป็น Wrire mode
D0-D7 =ข้อมูลที่ต้องการเขียน 
RS=1, R/W=0 
   
หากต้องการเขียนข้อมูลใน CG-RAM ให้เซ็ทต่ำแหน่ง CG-RAM ในคำสั่งที่ 7 ก่อน
หากต้องการเขียนข้อมูลใน DD-RAM ให้เซ็ทต่ำแหน่ง DD-RAM ในคำสั่งที่ 8 ก่อน
   
 
   
 11). การอ่านข้อมูลจาก CG or DD-RAM 
 
76543210
D7D6D5D4D3D2D1D0
 
RS=1กำหนดให้เป็นข้อมูล
R/W=1กำหนดให้เป็น Readmode
D0-D7 =ข้อมูลที่อ่านได้ 
RS=1, R/W=0 
   
หากต้องการอ่านข้อมูลใน CG-RAM ให้เซ็ทต่ำแหน่ง CG-RAM ในคำสั่งที่ 7 ก่อน
หากต้องการเอ่านข้อมูลใน DD-RAM ให้เซ็ทต่ำแหน่ง DD-RAM ในคำสั่งที่ 8 ก่อน

1). ตำแหน่งของขาและหน้าที่การใช้งานของ LCD โมดูล

Pin No.
Symbol
Description
Level
Function
1
VSS
Ground
-
0V
   Ground
2
VDD
 Power Supply
-
+5V
 ต่อกับแรงดันไฟเลี้ยง +5V
3
VO
LCD Contr
-
-
 ต่อกับแรงดันเพื่อปรับความเข้มของการแสดงผล
4
RS
Register Select
H/L
  RS = 0 หมายถึงต้องการติดต่อกับรีจิสเตอร์คำสั่ง (Instruction Register)
  RS = 1 หมายถึงต้องการติดต่อกับรีจิสเตอร์ข้อมูล (Data Register)
5
R/W
Read/Write
H/L
  R/W = 0 หมายถึงต้องการเขียนข้อมูลไปยัง LCD โมดูล
  R/W = 1 หมายถึงต้องการอ่านข้อมูลจาก LCD โมดูล
6
E
Enable
H, H->L
  Enable Signal
7 - 14
DB0-DB7
Data Bus
H/L
  Data Bus Line
15
A
Back Light A
-
  Back Light +5V (สำหรับรุ่นที่มี  Back Light)
16
K
Back Light K
-
  Back Light 0V (สำหรับรุ่นที่มี  Back Light)



การเขียน โปรแกรมเพื่อควบคุมLCD
 
เมื่อเริ่มจ่ายไฟให้กับ LCD ที่ระดับแรงดันถึง 4.5 V แล้ว LCD จะ Reset ตัวเอง (Internal Reset) และจะ set ค่าเริ่มต้น ต่างๆดังนี้
 1). Display Clear   
 2). Function Set  
  DL=1 8bit
N=0 1บรรทัด
F=0 5x7 dot
  
 3). Display ON/OFF  
  D=0 Display OFF
C=0 Cursor OFF
B=0 Blink OFF
  
     
 4).Entry Mode Set  
  I/D=1 (เพิ่มค่า Counter ขึ้น 1)
S=0 No Shit
  
     

หลังจากนั้นเราต้อง set ค่าต่างๆ (Initializing by Instruction) เพื่อให้ LCD เริ่มทำงานตามที่เราต้องการดังนี้
     
การใช้งาน LCD แบบ 8bit  
    
 1).หากเป็นการเริ่มจ่ายไฟให้ LCDเพื่อให้ LCD Internal Reset 
  ให้รออย่างน้อย 15ms  
 2). กำหนดขาควบคุม  
  ให้ขา E = 0  
  ให้ขา RS= 0กำหนดเป็นคำสั่ง 
  ให้ขา R/W = 0เขียนข้อมูล 
 3).ส่งข้อมูลค่ำสั่ง Function Set 3 ครั้ง  
  3.1) data = 00110000Function Set DB5=1,DL=1(8bit) 
  E=1,delay(450ns),E=0 
  รออย่างน้อย 4.1ms  
  3.2) data = 00110000Function Set DB5=1,DL=1(8bit) 
  E=1,delay(450ns),E=0 
  รออย่างน้อย 100 us  
  3.3) data = 00110000Function Set DB5=1,DL=1(8bit) 
  E=1,delay(450ns),E=0 
 4).กำหนดการทำงานของ LCD ตามที่ต้องการ เช่น  
  Entry Mode Set (BIT2=1) 
  00000110[000001MS] , Cursor direction right (M=1);no scroll (S=0)
  E=1,delay(450ns),E=0 
    
  Display/Cursor (BIT3=1) 
  00001111[00001DUB] ,Display On (D=1),Cursor On (U=1) ,blinking block cursor On (B=1)
  E=1,delay(450ns),E=0 
     
  Function Set (BIT5=1)[001DNF00 ],Sets buss size 8bit (D=1),number of lines=2 (N=1),font size =5x7(F=0)
  00111000  
  E=1,delay(450ns),E=0 
     
 
ตัวอย่างการเขียนโปรแกรมแสดงผล LCD โมดูลแบบ 8bit

การใช้งาน LCD แบบ 4bit  
    
 1).หากเป็นการเริ่มจ่ายไฟให้ LCDเพื่อให้ LCD Internal Reset 
  ให้รออย่างน้อย 15ms  
 2). กำหนดขาควบคุม  
  ให้ขา E = 0  
  ให้ขา RS= 0กำหนดเป็นคำสั่ง 
  ให้ขา R/W = 0เขียนข้อมูล 
 3).ส่งข้อมูลค่ำสั่ง Function Set 3 ครั้ง ข้อมูล D4-D7 จะถูกส่งไปที่ bus 
  3.1) data = 00110000  
  E=1,delay(450ns),E=0 
  รออย่างน้อย 4.1ms  
  3.2) data = 00110000  
  E=1,delay(450ns),E=0 
  รออย่างน้อย 100 us  
  3.3) data = 00110000  
  E=1,delay(450ns),E=0 ตอนนี้ยังเป็น 8 bit อยู่
 4).กำหนดการทำงานของ LCD ให้เป็น 4 bit  
  data= 00100000Function Set (BIT5=1) [001DNF00 ],Sets buss size 4bit (D=0)ข้อมูลเฉพาะ D4-D7 จะถูกส่งออกไปที่บัส
  E=1,delay(450ns),E=0
   ตอนนี้เป็น 4 bit แล้ว
  เมื่อเป็น 4 bit ต้องส่งข้อมูลคำสั่งสองครั้งๆ ละ 4 bit 
 5).Function Set (BIT5=1)กำหนด ขนาดข้อมูล,จำนวนบรรทัด, ขนาดตัวอักษร
  เตรียมข้อมูลค่ำสั่ง 00101000[001DNF00 ],Sets buss size 4bit (D=0),number of lines=2 (N=1),font size =5x7(F=0)
  ส่งข้อมูลไบท์สูงออกไปก่อน data =00101000  
  E=1,delay(450ns),E=0 
  สลับไบท์สูง-ต่ำ 10000010 
  ส่งข้อมูลไบท์ต่ำ data =10000010 
  E=1,delay(450ns),E=0 
    
 6).Display/Cursor (BIT3=1)กำหนดการแสดงผล, เคอร์เซอร์
  เตรียมข้อมูลค่ำสั่ง 00001100[00001DUB] ,Display On (D=1),Cursor Off (U=0) ,blinking block cursor Off (B=0)
  ส่งข้อมูลไบท์สูงออกไปก่อน data =00001100  
  E=1,delay(450ns),E=0 
  สลับไบท์สูง-ต่ำ 11000000 
  ส่งข้อมูลไบท์ต่ำ data =11000000 
  E=1,delay(450ns),E=0 
    
 7).Entry Mode Set (BIT2=1)โหมดการป้อนข้อมูล 
  ตรียมข้อมูลค่ำสั่ง 00000110[000001MS] , Cursor direction right (M=1);no scroll (S=0)
  ส่งข้อมูลไบท์สูงออกไปก่อน data =00000110  
  E=1,delay(450ns),E=0 
  สลับไบท์สูง-ต่ำ 01100000 
  ส่งข้อมูลไบท์ต่ำ data =01100000 
  E=1,delay(450ns),E=0