You are on page 1of 13

GLCD 64x128

(Chip iu khin ST7920)


1.Hnh dng, s chn v chc nng tng chn.

Hnh 12.1 GLCD 128x64


Chn s
1-2
3
4

7-10
11-14

15

16
17
18
19-20

Tn chn
VSS -VDD
V0
RS (Register select)
CS (Chip select )

Hnh 12.2 S chn GLCD 128x64

Chc nng
-Cp ngun
-Chnh tng phn
-Chn thanh ghi
0: Chn thanh ghi m lnh
1: Chn thanh ghi d liu
-Khi giao tip theo chun SPI th chn ny
l chn chip select
0: Khng chn GLCD
1: Chn GLCD
R/W (Read/Write)
-Chn ch c hoc ghi GLCD
SID (Serial Data Input)
0: Ghi
1: c
-Khi giao tip theo chun SPI th chn ny
l chn nhn d liu ni tip.
E (Enable)
-Nhn xung cho php
SCLK (Serial Clock )
-Khi giao tip theo chun SPI th y l
chn nhn xung clock.
D0-D3
-4 bit d liu thp khi giao tip theo chun
8 bit
D4-D7
-4 bit d liu cao khi giao tip theo chun 8
bit
-4 bit d liu khi giao tip theo chun 4 bit
PSB
-Chn ch iu khin
0: SPI (ni tip)
1: 8 hoc 4 bit (song song)
NC (No Connect)
B trng
RST (Reset)
Reset GLCD
Vout
in p ra GLCD
BLA-BLK
Cp in cho led nn gip quan st c
(Back Light Anode Cathode) trong bng ti

2. Cc loi vng nh ca ST7920


- CGROM (Character Generation ROM) : ROM dung lng 2M-bits cha font ch Trung
Quc dng 16x16.
- HCGROM (Half Height CGROM): ROM dung lng 16K-bits cha font ca 168 k t dng
16x8 nh trong hnh 12.3.

Hnh 12.3 Cc k t 16x8 trong vng nh HCGROM


- CGRAM (Character Generation RAM) : RAM kch thc 64x16 bits cho php ngi dng
t to k t ring dng 16x16

Hnh 12.4 Cch to k t trong CGRAM

- IRAM (ICON RAM) : RAM to icon 240 im dng 15x16


- DDRAM (Display Data RAM): RAM lu d liu hin th ra mn hnh
+ Hin th fonts ca HCGROM: ghi 2 bytes vo DDRAM hin th 2 k t dng 16x8,
ni byte l 1 k t. Cc byte c ghi phi nm trong phm vi 02H7FH
+ Hin th fonts ca CGRAM: ghi 2 bytes vo DDRAM hin th mt k t dng 16x16.
Ch c php ghi 4 gi tr sau 0000H,0002H,0004H,0006H
+ Hin th fonts ca CGROM: ghi 2 bytes vo DDRAM hin th mt k t. A140H
D75FH l m BIG5, A1A0HF7FFH l m GB.
Ch : Lun ghi byte cao trc v byte thp sau.

Hnh 12.5 Cch ghi d liu vo vng nh DDRAM


- GDRAM (graphic display RAM) : Vng nh hin th nh gn 64x256 bits. Cc bc ghi
d liu hin th ln GDRAM:
+ t t a ch hng dc (Y)
+ t a ch hng ngang (X)
+ Ghi D15-D8 vo GDRAM ( byte th 1)
+ Ghi D7-D0 vo GDRAM (byte th 2 )
- a ch GDRAM s t ng tng ln 1 chun b ghi 2 bytes tip theo.

Hinh 12.6 T chc vng nh GDRAM

3. Tp lnh
Nhm lnh 1 (Khi RE=0: nhm lnh c bn)
M lnh
Lnh

RS

RW

D7

D6

D5

D4

D3

D2

D1

D0

CLEAR

HOME

ENTRY
MODE

I\D

DISPLAY
ON/OFF

CURSOR
DISPLAY
CONTROL

S\C

R\L

FUNCTION
0
SET

DL

0
RE

AC5

AC4

AC3

AC2

AC1

AC0

SET
CGRAM
ADDR
SET
DDRAM
ADDR

READ
BUSY
FLAG(BF
&
ADDR.

WRITE
RAM

READ
RAM

0
AC6

AC5

AC4

AC3

AC2

AC1

AC0

M t

Thi
gian
thc
hin

Xa mn hnh - ghi y
vng nh DDRAM gi tr
20H (m ca khong
1.6ms
trng) v a con tr v
a ch 00H
a con tr v a ch
00H trong vng nh
72us
DDRAM
Ci t cch dch con tr
72us
khi c hoc ghi d liu.
D=1: Bt hin th
C=1: Bt con tr
72us
B=1: Con tr nhp nhy
iu khin v tr con tr v
dch hin th; ni dung ca 72us
DDRAM khng i
DL=1: Ch 8 bit
DL=0: Ch 4 bit
72us
RE=1: Lnh m rng
RE=0: Lnh c bn
t a ch con tr trong
vng nh CGRAM
t a ch con tr trong
vng nh DDRAM
AC6 lun bng 0

c c bn (BF) xem
GLCD thc hin lnh
BF AC6 AC5 AC4 AC3 AC2 AC1 AC0 trc xong cha, ng
thi c gi tr ca ti v
tr con tr.
Ghi d liu vo b nh
D7 D6 D5 D4 D3 D2 D1 D0 RAM ni (DDRAM/
CGRAM/IRAM/GDRAM)
c d liu t b nh
D7 D6 D5 D4 D3 D2 D1 D0 RAM ni (DDRAM/
CGRAM/IRAM/GDRAM)

72us

72us

0us

72us

72us

Nhm lnh 2 (Khi RE=1: nhm lnh m rng)


M lnh
Lnh

RS

RW

D7

D6

D5

D4

D3

D2

D1

STAND BY

SCROLL or
RAM
ADDR.
SELECT

DL

1
RE

AC5

AC4

AC3

AC2

AC1

AC3

AC2

AC1

AC6

AC5

AC4

AC3

AC2

AC1

EXTENDED
FUNCTION
SET

SET IRAM
or SCROLL
ADDR

SET
GRAPHIC
RAM
ADDR.

D0

M t

a GLCD vo ch
ch v thot khi ch
1
ch khi nhn bt c lnh
no
SR=1: Cho php cun dc
hin th
SR=0: Cho php
SR
IRAM(ch m rng)
SR=0: Cho php
CGRAM(ch c bn)
DL=1: Ch 8 bit
DL=0: Ch 4 bit
RE=1: Lnh m rng
0
RE=0: Lnh c bn
G=0:Tt hin th nh
G=1: Bt hin th nh
Bit SR (xem li nhm
lnh SCROLL or RAM
ADDR. SELECT)
AC0 SR=1: AC0-AC5 a ch
bt u cun dc
SR=0:AC0-AC3 a ch
ca IRAM
t a ch cho GDRAM
u tin t a ch cho
AC0
ct sau l a ch hng
AC0
a ch ct :AC0-AC6
a ch hng: AC0-AC3

Bi 12.1 Vit chng trnh th vin GLCD.c tin s dng trong cc bi tp lin quan n
LCD graphic.
Ni dung th vin nh sau:
#define ON 1
#define OFF 0
#define XVAL 16
#define YVAL 32
#define GLCD_WIDTH 128
#define TEXT 0x30
#define graphic 0x36
typedef union
{
unsigned int16 word;

// M khi to ch text
// M khi to ch graphic

Thi
gian
thc
hin
72us

72us

72us

72us

72us

unsigned int8 nbyte[2];


} Dots;
typedef struct
{
int1 refresh;
// cho php cp nht d liu t Ram VDK ln LCD
Dots pix[YVAL][XVAL];
} GD_RAM;
GD_RAM gdram;
void xuat_glcd(unsigned int8 lcd_signal,unsigned int8 lcd_ins_hthi)
{ lcd_signal = ~ lcd_signal; lcd_ins_hthi = ~lcd_ins_hthi;
xuat_1byte(lcd_signal);
xuat_1byte(lcd_ins_hthi);
xuat_1byte(0);
xuat_1byte(0);
mo_lcd;
mo_ic_74573_a_thong_dl();
output_high(rck_lcd20x4); output_low(rck_lcd20x4);
chot_ic_74573_a_goi_du_lieu;
}
void glcdcmd(unsigned int8 cmd)
// Chng trnh ghi m iu khin
{
XUAT_GLCD(0x07,cmd);
XUAT_GLCD(0x03,cmd);
}
void glcdchar(unsigned int8 dl)
// Chng trnh ghi d liu
{
XUAT_GLCD(0x17,dl);
XUAT_GLCD(0x13,dl);
}
void glcdmaunen(int1 color)
// Chng trnh t mu nn (0-1) ch graphic
{
int8 v, h;
int16 d;
if(color)d=0xffff; else d=0;
for (v=0; v < YVAL; v++)
{
for (h=0; h < XVAL; h++)
{
gdram.pix[v][h].word = d;
}
}
gdram.refresh = TRUE;
}
void capnhatvung(int8 x,int8 y,int8 rong, int8 cao) // Chng trnh cp nht ni dung vng
{
// Ram vi iu khin ln 1 vng ca LCD
int8 v, h,hesox,hesoy;
// ch graphic
if (gdram.refresh)
{ if((x/16)!=(x+rong)/16)rong=((rong+15)/16)+1;else rong=((rong+15)/16); x=x/16;

for (v=y; v <(y+cao); v++)


{ if(v>31){hesox=8+x;hesoy=v-32;}else {hesox=x;hesoy=v;}
glcdcmd( 0x80 |hesoy);
// t a ch hng
glcdcmd( 0x80 | hesox);
// t a ch ct
for (h=hesox; h <(hesox+rong); h++)
{
glcdchar( gdram.pix[hesoy][h].nbyte[1]); // Ghi byte cao
glcdchar( gdram.pix[hesoy][h].nbyte[0]); // Ghi byte thp
}
}
gdram.refresh = FALSE;
}
}
void glcdcapnhat ()
// Chng trnh cp nht ni dung vng nh Ram xut ra hin th
{
// ton b mn hnh LCD ch Graphic
int8 v, h;
if (gdram.refresh)
{
for (v=0; v <YVAL; v++)
{
glcdcmd( 0x80 | v);
// t a ch hng
glcdcmd( 0x80 | 0);
// t a ch ct
for (h=0; h <XVAL; h++)
{
glcdchar( gdram.pix[v][h].nbyte[1]);
glcdchar( gdram.pix[v][h].nbyte[0]);
}
}
gdram.refresh = FALSE;

// ghi byte cao


// ghi byte thp

// bo cp nht xong

}
}
void ktglcd(int8 mode)
{
glcdcmd(mode);
delay_ms(5);
glcdcmd(0x0c);
delay_ms(5);
}
void glcd_pixel(int8 x, int8 y, int1 color)
{
int8 v, h, b;
if(y>31){x += 128; y-= 32;};
v = y;

// Chng trnh khi to GLCD theo ch


// text hoc graphic

// Chng trnh ghi mt im nh ti ta x,y

h = x/16;
b = 15 - (x%16);
if (color == ON) bit_set (gdram.pix[v][h].word, b);
else bit_clear (gdram.pix[v][h].word, b);
gdram.refresh = TRUE;
}
void xuatanh(int width,int height,int x,int y)
// Chng trnh cho php xut nh ra LCD
{
// Thay i Logo_DHSPKTTP[ ] i
unsigned int i=0, j=0, k=0;
// nh khc
unsigned int16 count=0;
for(j=0;j<height;j++)
{
for(;i<width;)
{
for(k=8;k>0;k--)
{
glcd_pixel(i+x,j+y,bit_test(Logo_DHSPKTTP[count],(k-1)));
i++;
}
count++;
}
i=0;
}
}
Phn A : Ch text
a ch DDRAM
0x80
0x90
0x88
0x98

0x81
0x91
0x89
0x99

0x82
0x92
0x8A
0x9A

0x83
0x93
0x8B
0x9B

0x84
0x94
0x8C
0x9C

0x85
0x95
0x8D
0x9D

0x86
0x96
0x8E
0x8E

Bi mu 12.2 S dng ch text hin th ln GLCD ni dung sau:

Dai Hoc SPKT


Bo Mon: DTCN
TTVXL Pic18F4550
Module LCDGraphic
Chng trnh:
#include<TV_PICKIT2_SHIFT_1.c>
#include<tvglcd.c>

0x87
0x97
0x8F
0x9F

void main()
{
SET_UP_PORT_IC_CHOT();
ktglcd(text);

// Khi to ch text

glcdcmd(0x01);

// Xa mn hnh

delay_ms(5);
glcdcmd(0x80);

// u hng 1

glcdchar(" Dai Hoc SPKT");


glcdcmd(0x90);
glcdchar(" Bo Mon: DTCN");
glcdcmd(0x88);
glcdchar("TTVXL Pic18F4550");
glcdcmd(0x98);
glcdchar("Modul LCDGraphic");
WHILE(TRUE);
}

Bi 12.3 Vit chng trnh o nhit LM35, DS18B20,m sn phm 99-79 ng thi m
giy chnh xc 00-59 hin th GLCD ch text theo hnh sau.

LM:
DS:
SP:
TI :

32
33
82
28

Ch : hin th gi tr s SV tch s v chuyn qua m ASCII ging nh LCD text m SV


c hc.
Phn B: Ch Graphic
1. Hng dn chuyn nh thnh file m hex dng 2 phn mm GNU(thay i kch thc v
chuyn nh bt k thnh nh nh phn) v LCDAssistant ( chuyn nh nh phn sang m
hex)
a. S dng phn mm GNU
-

Click vo icon
chy phn mm GNU
M nh cn chuyn i Tp tin/ M => chn nh cn m
Thay i kch thc nh cho ph hp hin th ln c mn hnh 128x64: Chn
nh/Co dn nh

Sa li kch thc nh mong mun ri click Co dn


Chuyn nh v thnh nh nh phn: Chn nh/Ch / ph lc..

Click chn Dng bng chn mu en v trng (1bit) ri chn Chuyn i


- Lu nh di dng ui BMP : Chn Tp tin/ Lu dng
b. Su dng phn mm LCDAssistant
-

Click vo icon
chy phn mm
M file cn chuyn i: File/Load image
Cu hnh file ly m theo chiu ngang bng cch click vo mc Horizontal
Chuyn nh sang m hex: Chn File/Save output => t tn file ( tenfile.c) ri nhn
Save

Bi mu 12.4 Vit chng trnh hin th Logo DH SPKT kch thc 64x64 ng thi hin
th game Ping Pong bn na LCD cn li
Chng trnh
#include<TV_PICKIT2_SHIFT_1.c>
#include<spkt.c>
#include<tvglcd.c>
#include<graphics.c>
#include <stdlib.H>

// m hex ca logo SPKT


// Th vin cha cc chng trnh v ng
// thng, ng trn .

void main()
{ unsigned int8 xb,yb,sstop=0,xt=82,lt=15,diem=0;
signed int chieux=1, chieuy=1;
int tatdiem=0;
set_tris_b(0x3c);
SET_UP_PORT_IC_CHOT();
ktglcd(text);
// Khi to ch text
glcdcmd(0x01); delay_ms(5);
// Xa mn hnh
glcdcmd(0x94);glcdchar(" 0="); glcdchar(0x1a); // Giao din hng dn chi game
glcdcmd(0x8c);glcdchar(" 1="); glcdchar(0x1b);
glcdcmd(0x9c);glcdchar(" 2=Play");
delay_ms(5);
ktglcd(graphic);
// Khi to ch Graphic
glcdmaunen(0) ;
xuatanh(64,64,0,0) ;
// Hin th Logo SPKT (chiu rng, chiu cao, x,y)
glcd_rect(65, 0, 127, 63, 0, 1);
// Hin th khung vung bao quanh ca s game
glcd_rect(66, 1, 126, 62, 0, 1);
glcd_rect(65, 60, 127, 63, 1, 0);
// Xa cnh y ca khung vung
glcdcapnhat () ;
// Cho php hin th ra mn hnh
WHILE(TRUE)
{
if(sstop)
{
glcd_circle(xb, yb,4, 1, 1);
// hin th tri banh hnh trn
capnhatvung (xb-6,yb-6,13,13) ; // Cho php hin th tri banh
glcd_rect(xt, 60, xt+lt, 62, 1, 1); // Hin th thanh hng tri banh
capnhatvung (64,60,128,3) ;
// Cho php hin th thanh hng banh
glcd_circle(xb,yb,4, 1, 0);
// Xa tri banh v tr c
xb+=chieux;
// Cp nht v tr mi cho tri banh
yb+=chieuy;
if((yb<40)&&(tatdiem==1))
// Tt hin th im khi to y banh <40
{tatdiem=0;ktglcd(text);glcdcmd(0x95);glcdchar(" ");ktglcd(graphic);}
if(xb>=121)chieux=rand()%1-2; if(xb<=71) chieux=rand()%2+1;
if((yb<=7))chieuy=rand()%2+1; // Khi banh ng cc cnh bao th i chiu di chuyn
if(yb>=60)
// Khi ta y ca banh >59 th Game Over
{ ktglcd(text);
// Khi to ch text hin th Game Over
glcdcmd(0x95);

glcdchar("Game");
glcdcmd(0x8d);
glcdchar("Over");
sstop=0;
ktglcd(graphic);
}
else if(((yb==55)||(yb==56))&&((xb>(xt-4))&&(xb<(xt+lt+4))))
{
// Khi thanh hng c banh th tng im ng thi i chiu y ca banh
diem++;
chieuy=rand()%1-2; // Chiu y c nhn ngu nhin gi tr -1 hoc -2
ktglcd(text);
glcdcmd(0x95);glcdchar(" ");glcdchar(diem/10+48);glcdchar(diem%10+48);
tatdiem=1;
// Hin th im s
ktglcd(graphic);
}
}
if(input(pin_b2)==0)
// Kim tra nt iu khin qua phi
{
glcd_rect(xt, 60, xt+lt, 62, 1, 0);
if(xt<110) xt+=2;
}
if(input(pin_b3)==0)
// Kim tra nt iu khin qua tri
{
glcd_rect(xt, 60, xt+lt, 62, 1, 0);
if(xt>69) xt-=2;
}
if(input(pin_b4)==0)
// Kim tra nt Play
{ delay_ms(10);
if(input(pin_b4)==0)
{
diem=0;
xb= 75;yb= 10;
sstop=1;
ktglcd(text);
glcdcmd(0x01); delay_ms(2);
ktglcd(graphic);
glcd_rect(67, 3,112, 63, 1, 0);
capnhatvung (67,3,45,61) ;
while(input(pin_b4)==0);
}
}
}
}

Bi 12.5 Vit chng trnh ng h s DS13B07 hin th GLCD theo hnh sau:
( v d: 6 gi 40 pht 15 giy)

12

12

H
M
S

Bi 12.7 Vit chng trnh v 1 hnh ngi ( dng chng trnh v ng thng v hnh trn)
hin th GLCD v dng cc phm 1,9,4,6 ca phm ma trn iu khin cho ngi ny di
chuyn qua tri , phi , ln , xung.

You might also like