Professional Documents
Culture Documents
I. Bn s i n u
Bi ny nm trong phn ng dng AVR thuc lot bi cng hc AVR. Trong bi ng dng
ny chng ta khng kho st nhiu cu trc AVR m ch yu l tm hiu Text LCD cch
iu khin bng AVR. Cng c chnh cng l 2 b phn mm quen thuc WinAVR v
Proteus.
Sau bi ny, ti hy vng bn c th hiu v thc hin c:
- Cu trc Text LCD
- Nguyn l hot ng Text LCD.
- Pht trin 1 th vin iu khin Text LCD bng AVR c 2 ch 8 bit v 4 bit.
- V d iu khin Text LCD bng AVR.
Text LCD l cc loi mn hnh tinh th lng nh dng hin th cc dng ch
hoc s trong bng m ASCII. Khng ging cc loi LCD ln, Text LCD c chia sn
thnh tng v ng vi mi ch c th hin th mt k t ASCII. Cng v l do ch hin
th c k t ASCII nn loi LCD ny c gi l Text LCD ( phn bit vi Graphic
LCD c th hin th hnh nh). Mi ca Text LCD bao gm cc chm tinh th lng,
vic kt hp n v hin cc chm ny s to thnh mt k t cn hin th. Trong cc
Text LCD, cc mu k t c nh ngha sn. Kch thc ca Text LCD c nh
ngha bng s k t c th hin th trn 1 dng v tng s dng m LCD c. V d LCD
16x2 l loi c 2 dng v mi dng c th hin th ti a 16 k t. Mt s kch thc Text
LCD thng thng gm 16x1, 16x2, 16x4, 20x2, 20x4Hnh 1 l mt v d Text LCD
16x2.
- Function set xc lp chc nng cho LCD: y l lnh thit lp phng thc
giao tip vi LCD, kch thc font ch v s lng line ca LCD. RS cng phi bng 0
khi s dng lnh ny. M lnh function set c dng 001DLNFxx. Trong nu DL=1
(DL: Data Length) th mode giao tip 8 bit s c dng, lc ny tt c cc chn t D0
n D7 phi c kt ni vi b iu khin ngoi. Nu DL=0 th mode 4 bit c dng,
trong trng hp ny ch c 4 chn D4:7 c dng truyn nhn d liu v kt ni vi
b iu khin ngoi, cc chn D0:3 c trng. N quy nh s dng ca LCD, v hng
ta ang kho st LCD loi hin th 2 dng nn N=1 (N=0 cho trng hp LCD 1 dng). F
l kch thc font ch hin th, do LCD c 2 b font ch c sn trong CGROM nn
chng ta cn la chn thng qua bit F, nu F=1 b font 5x10 c s dng v nu F=0 th
font 5x8 c hin th. 2 bit thp trong m lnh ny c th c gn gi tr ty . M lnh
c dng ph bin cho lnh function set l 0x38 (00111000 giao tip 8 bit, 2 dng vi
font 5x8 ) hoc 0x28 (00101000 giao tip 4 bit, 2 dng vi font 5x8 ). V d trong bi
ny s dng c 2 m lnh trn.
3.3 Giao tip 4bit v 8bit.
Nh trnh by trong lnh function set, c 2 mode ghi v c d liu vo LCD
l mode 8 bit v mode 4 bit:
- Mode 8 bit: Nu bit DL trong lnh function set bng 1 th mode 8 bit c
dng. s dng mode 8 bit, tt c cc lines d liu ca LCD t D0 n D7 (t chn 7
n chn 14) phi c ni vi 1 PORT ca chip iu khin bn ngoi (v d PORTC ca
ATmega32 trong v d ca bi ny) nh trong hnh 3. u im ca phng php giao tip
ny l d liu c ghi v c rt nhanh v n gin v chip iu khin ch cn xut hoc
nhn d liu trn 1 PORT. Tuy nhin, phng php ny c nhc im l tng s chn
dnh cho giao tip LCD qu nhiu, nu tnh lun c 3 chn iu khin th cn n 11
ng cho giao tip LCD.
- Mode 4 bit: LCD cho php giao tip vi b iu khin ngoi theo ch 4 bit.
Trong ch ny, cc chn D0, D1, D2 v D3 ca LCD khng c s dng ( trng),
ch c 4 chn t D4 n D7 c kt ni vi chip b iu khin ngoi. Cc instruction v
data 8 bit s c ghi v c bng cch chia thnh 2 phn, gi l cc Nibbles, mi nibble
gm 4 bit v c giao tip thng qua 4 chn D7:4, nibble cao c x l trc v nibble
thp sau. u im ln nht ca phng php ny ti thiu s lines dng cho giao tip
LCD. Tuy nhin, vic c v ghi tng nibble tng i kh khn hn c v ghi d liu 8
bit. Trong bi hc ny, ti s trnh by 2 chng trnh con c vit ring ghi v c
cc nibbles gi l Read2Nib v Write2Nib.
III. AVR v Text LCD.
1. Trnh t giao tip Text LCD.
Trnh t giao tip vi LCD c trnh by trong flowchart hnh 6.
6
7
8
8
9
10
11
12
13
14
15
Hm Write2Nib thc hin ghi mt bin 8 bit c tn chr vo LCD theo tng nibble,
hm ny c s dng rt nhiu ln trong mode 4 bit. Dng 2 nh ngha 3 bin tm l
HNib, LNib v temp_data, khng ging nh khi c t LCD, vic ghi vo LCD c th
lm nh hng n cc chn ca PORT dng lm ng d liu nht l khi cc ng
iu khin v d liu dng chung 1 PORT (PORTB). Bin temp_data dng trong gii
thut mt n khng lm nh hng n cc bit khc khi ghi LCD. Dng 3 c d liu
t PORT DATA_O v che i cc bit cao, ch lu li cc bit thp vo bin temp_data v
cc bit thp ny khng c dng xut nhp d liu (xem hnh 7, cc chn thp ca
PORTB dng lm cc chn iu khin). ghi 1 gi tr 8 bit c tn l chr theo cch ghi
tng nibbles chng ta cn tch bin chr thnh 2 nibbles. Dng 5 tch 4 bit cao ca chr v
cha vo bin HNib. Dng 6 thc hin thm vic di chuyn 4 bit thp ca chr qua tri ri
gn cho bin LNib. Nh vy sau 2 dng ny cc bin HNib v LNib c m t nh sau:
4
cbi(CTRL,EN); //xa EN
5
cbi(CTRL,RS); //y l Instruction
6
sbi(CTRL,RW); //chiu t LCD ra ngoi
7
8
DDR_DATA=0xFF; //hng data out
9
DATA_O=0xFF; // gi lnh c
10
sbi(CTRL,EN); //enable
11
DDR_DATA=0x00; // i hng data in
12
13
if (bit_is_clear(DATA_I,7)) break
14 }
15 cbi(CTRL,EN); //disable for next step
16 cbi(CTRL,RW); //ready for next step
17 DDR_DATA=0xFF; //Ready to Out
18
19 #else
20 char temp_val;
21 while (1){
22 cbi(CTRL,RS); //RS=0,
23 sbi(CTRL,RW); //LCD -> AVR<BR>
24 temp_val=Read2Nib
25 if (bit_is_clear(temp_val,7)) break
26 }
27 cbi(CTRL, RW); //ready for next step
28 DDR_DATA=0xFF; //Ready to Out
29 #endif //_delay_ms(1);
30 }
Hm wait_LCD ch lm mt vic n gin l ch cho n khi LCD rnh gn
cc cng vic khc. on code trong list 5 trnh by cch 1: c c Busy Flag v ch n
khi n bng 0 (LCD rnh). Vic c c BF ph thuc v mode ang s dng l 8 bit hay
4 bit, v th lnh #ifdef trong dng s 2 kim tra mode ph hp trc khi tin hnh c.
#ifdef LCD8BIT ngha l nu bin LCD8BIT c nh ngha pha trn (mode 8 bit
c dng) th s tin hnh c BF theo mode ny. Bng cch kim tra s c mt ca
bin LCD8BIT chng trnh s bit cch ghi v c LCD ph hp, phng php dng
#ifdef LCD8BIT c p dng cho tt c cc hm sau ny. Cc on code t dng 4 n
17 thc hin trong mode 8 bit. Trc khi c BF, chng ta cn gi 1 lnh c BF dng
9, sau dng 12 thc hin i hng cc chn data nhn gi tr v. Trong dng
10,kim tra bit th 7 ca DATA_I, DATA_I chnh l gi tr c v v bit th 7 trong gi
tr nhn v chnh l c Busy Flag. Nu BF=0 (bit_is_clear(DATA_I,7)) th kt thc qu
trnh lp ch vi lnh break;. Trong trng hp mode 4 bit c s dng (#else), qu
trnh kim tra c BF cng tng t, im khc nhau duy nht l cch c d liu v c
khc, chng ta dng hm Read2Nib c vit trc nhn gi tr v (xem dng
23). Nh trnh by, chng ta c th vit hm wait_LCD bng cch dng hm delay
mt khong thi gian c nh, trong dng 29 bn thy mt hm _delay_ms(1) khng
c s dng, nu mun bn c th xa ht cc dng lnh trc trong hm wait_LCD
v dng hm delay ny thay th, LCD vn s hot ng tt.
tham s DL=0 ( 001 0xxxx) n LCD bo mode chng ta mun dng. Dng 13 lm
vic ny, dng lnh ch n gin set bit D5 nhng chnh l gi lnh dng 001 0xxxx
n LCD, v th LCD s vo mode 4 bit sau lnh ny. Tip theo qu trnh thao tc vi
LCD din ra bnh thng, dng 16 ghi vo LCD m ca function set, trong trng hp
ny l m 0x28, tc 001 01000: mode 4 bit, LCD 2 dng v font 5x8. Vi Display
control, m lnh c dng l 0x0E, tc 00001 110 trong 00001 l m ca lnh
display control, 3 bit theo sau xc lp hin th LCD, hin th cursor v khng linking. <
Vi Entry mode set, m lnh c dng l 0x06 tc hin th tng v khng shift.
Xem li phn gii thch tp lnh LCD hiu thm ngha ca m lnh 0x06.
List 7. Di chuyn cursor.
1 void home_LCD(){
2 cbi(CTRL,RS); // the following data is COMMAND
3 #ifdef LCD8BIT
4 Write8Bit(0x02); <
5 wait_LCD();
6 #else
7
8 Write2Nib(0x02);
9 wait_LCD();
10 #endif }
11 void move_LCD(uint8_t y,uint8_t x){
12 uint8_t Ad;
13 Ad=64*(y-1)+(x-1)+0x80; // tnh m lnh
14 cbi(CTRL,RS); // the following data is COMMAND
15 #ifdef LCD8BIT
16 Write8Bit(Ad);
17 wait_LCD();
18 #else
19 Write2Nib(Ad);
20 wait_LCD();
21 #endif }
22
List 7 trnh by 2 hm di chuyn cursor v home (home_LCD) v di chuyn n 1 v tr
do ngi dng t.
Hm home_LCD tng i n gin v ch cn ghi m lnh 0x02 vo LCD th
cursor s t ng di chuyn v home (v tr u tin trn LCD).
Hm move_LCD(uint8_t y,uint8_t x) cho php di chuyn cursor n v tr dng y, ct x.
im cn ch trong hm ny l cch tnh m lnh cn ghi vo LCD. Thc cht y l
lnh set DDRAM address. Xem li bng 2 ta thy m lnh cho lnh ny c dng
1xxxxxxx trong xxxxxxx l mt s 7 bit cha a ch ca DDRAM chng ta cn di
chuyn n. V th trc khi thc hin ghi m lnh ny, chng ta cn tnh tham s
xxxxxxx theo dng y, ct x. Xem li t chc ca DDRAM trong hnh 3, gi s mt nh
dng y v ct x trn, do dng 2 bt u vi a ch 64, 2 nh cng 1 ct trn 2 dng
#include <avr/io.h>;
2 #include <delay.h>;
3 #include "myLCD.h" //include th vin myLCD
4 int main(){
5 init_LCD(); //khi LCD
6 clr_LCD(); // xa to b LCD
7 putChar_LCD(' '); //ghi 1 khong trng
8 putChar_LCD(' '); //ghi 1 khong trng
9 putChar_LCD('D'); //Hin th kt 'D'
10 print_LCD("emo of the",10); //hin th 1 chui k t
11 move_LCD(2,1); //di chuyn cursor n dng 2, ct u tin
12 print_LCD("2x16 LCD Display",16); //hin th chui th 2
13 while (1){
14 };
s dng th vin myLCD, chng ta cn include file myLCD.h vo Project
nh trong dng 3, #include "myLCD.h". Hai dng 6 v 7 thc hin khi ng v xa
LCD. Sau , cc dng 9, 10 v 11 t 3 k t l cc khong trng v ch ci D bng
hm putChat_LCD. Dng 12 in chui emo of the ngay tip theo ch ci D trc
bng hm print_LCD. Dng 13 thc hin di chuyn cursor n v tr dng th 2, ct u
tin ca LCD trc khi tin hnh in chui th 2 2x16 LCD Display dng code 14.
Nu bn thc hin ng trnh t nh trn, kt qu thu c s nh trong hnh 8.