1. Sơ đồ chân LCD
2. Nguyên lí hoạt động LCD
3. Sơ đồ chân 89C51
4. Lưu đồ tuật toán
5. Code
1. Bảng mô tả sơ đồ chân của LCD 16x2:
Chân
Ký hiệu
I/O
Mô tả
1
Vss
-
Mass
2
Vcc
-
Dương nguồn 5v
3
VEE
-
Cấp nguồn điều khiển tương phản
4
RS
I
RS=0 chon thanh ghi lệnh
RS=1 chon thanh ghi dữ liệu
5
R/W
I
R/W=1 đọc dữ liệu, R/W=1 ghi
6
E
I/O
Cho phép
7
DB0
I/O
Bit dữ liệu
8
DB1
I/O
Nt
9
DB2
I/O
Nt
10
DB3
I/O
Nt
11
DB4
I/O
Nt
12
DB5
I/O
Nt
13
DB6
I/O
Nt
14
DB7
I/O
Nt
Chân 15 và 16 là A và K. Nó được nối với 2 chân của 1 con Led
dùng để sáng LCD trong bóng tối chúng ta không sử dụng.
- Sơ đồ ghép nối LCD với vi điều khiển:
2. Nguyên lí hoạt động của LCD :
- Chân VCC, Vss, và VEE: các chân VCC và VSS cáp dương nguồn
5v và mass tương ứng. Chân VEE được dùng để điều khiển độ tương
phản.
- Chân chọn thanh ghi RS(Register Select): có 2 thanh ghi trong
LCD chân RS được dùng để chọn thanh ghi. nếu RS=0 thì thanh ghi mã
lệnh được chọn để cho phép người dùng gửi 1 lệnh lên chẳng hạn như
xoá màn hình, đưa con trỏ về đầu dòng… Nếu RS=1 thì thanh ghi dữ
liệu được chọn cho phép người dùng gửi dữ liệu cần hiển thị lên LCD.
- Chân đọc/ghi (R/W): đầu vào đọc/ghi cho phép người dùng đọc
thông tin từ LCD khi R/W=1 hoặc ghi thông tin lên LCD.
- Chân cho phép E(Enable): chân cho phép được sử dụng bởi LCD
để chốt dữ liệu của nó. Khi dữ liệu được cấp đến chân dữ liệu thì 1 xung
mức cao xuống thấp phải được áp đến chân này để LCD chốt dữ liệu
trên các chân dữ liệu. Xung này có độ rộng tối thiểu 450ns.
- Chân DB0-DB7: đây là đường dữ liệu 8 bít, được dùng để gửi
thông tin lên LCD hoặc đọc nội dung các thanh ghi trong LCD. Để hiển
thị các chữ cái và các con số, chúng ta gửi mã ASCII của các chữ cái từ
A đến Z , a đến z và các chữ số từ 0 đến 9 đến các chân này khi bật
- Bảng mã lệnh của LCD:
Mã (HEX)
Lệnh đến thanh ghi của LCD
01
Xoá màn hình hiển thị
02
Trở về đầu dòng
04
Giảm con trỏ(dịch con trỏ sang trái )
06
Tăng con trỏ(dịch con trỏ sang phải)
05
Dịch hiển thị sang phải
07
Dịch hiển thị sang trái
08
Tắt con trỏ, tắt hiển thị
0a
Tắt hiển thị, bật con trỏ
0c
Bật hiển thi, tắt con trỏ
0e
Bật hiển thị, nhấp nháy con trỏ
0f
Tắt con trỏ, nhấp nháy con trỏ
10
Dịch vị trí con trỏ sang trái
14
Dịch vị trí con trỏ sang phải
18
Dịch toàn bộ hiển thị sang trái
1c
Dịch toàn bộ hiển thị sang phải
80
Ép con trỏ về đầu dòng thứ nhất
0c0
Ép con trỏ về đầu dòng thứ 2
SƠ ĐỒ, CHỨC NĂNG LIÊN KẾT CÁC CHÂN CỦA LCD
Chân
Kí hiệu
I/O
1
VSS
-
2
VCC
-
Mô tả
Đất
Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này với VCC=5V
của mạch điều khiển
3
VEE
-
4
RS
I
Cấp nguồn điều khiển độ tương phản
Chân chọn thanh ghi (Register select). Nối chân RS với logic “0” (GND)
hoặc logic “1” (VCC) để chọn thanh ghi.
+ Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ
“ghi” - write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read)
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh
ghi dữ liệu DR bên trong LCD
5
R/W
I
Chân chọn chế độ đọc/ghi (Read/Write). Nối chân R/W với logic “0” để LCD hoạt động ở chế độ
ghi, hoặc nối với logic “1” để LCD ở chế độ đọc
6
E
I/O
Chân cho phép (Enable). Sau khi các tín hiệu được đặt lên bus DB0-DB7, các lệnh chỉ được chấp
nhận khi có 1 xung cho phép của chân E.
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp nhận) thanh ghi bên
trong nó khi phát hiện một xung (high-to- low transition) của tín hiệu chân E.
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh lên (lowto- high
transition) ở chân E và được LCD giữ ở bus đến khi nào chân E xuống mức thấp
7÷14
DB0÷DB I/O
14
Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU. Có 2 chế độ sử
dụng 8 đường bus này :
+ Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7.
+ Chế độ 4 bit : Dữ liệu được truyền trên 4
đường từ DB4 tới DB7, bit MSB là DB7
3. SƠ ĐỒ CHÂN CỦA AT89C51
4. LƯU ĐỒ GIẢI THUẬT
BẮT ĐẦU
CHƯƠNG TRÌNH DELAY
KHỞI TẠO CÁC PORT VÀO
RA CHO AT89C51
THIẾT LẬP CÁC LỆNH KẾT
NỐI CHO LCD
CHƯƠNG TRÌNH CHÍNH
CHƯƠNG TRÌNH CHO LCD
XỬ LÝ DỮ LIỆU
HIỂN THỊ LÊN LCD
KẾT THÚC
NHẤN PHÍM
5.Chương trình:
/*=========bo tien xu li===============*/
#include<AT89x51.h>
#include<string.h>
/*===========khai bao bien toan cuc============*/
sfr LCDdata = 0xA0; // cong P2, 8 bit du lieu.
sbit BF = 0xA7; // co ban, bit DB7.
sbit RS = P3^0; // chon thanh ghi
sbit RW = P3^1; // doc/ghi
sbit EN = P3^2; //cho phep chot du lieu
/*--------------kiem tra su san sang cua LCD------------------------*/
void wait(void)
{
RS=0; //chon thanh ghi lenh
RW=1; //đoc tu LCD
LCDdata=0xff; //gia tri 0xff
while(BF) //kiem tra co ban
{
EN=0; //dua xung cao xuong thap đe chot.
EN=1; //dua chan cho phep len cao
}
}
/*------------------------thiet lap lenh cho LCD--------------------------*/
void LCDcontrol(unsigned char x)
{
RS=0;//chon thanh ghi lenh
RW=0;//ghi len LCD.
LCDdata=x ;// gia tri x
EN=1;//cho phep muc cao
EN=0;//xung cao xuong thap
wait();//đoi LCD san sang.
}
/*------------------------------Khoi tao LCD-------------------------*/
void LCDinit(void)
{
LCDcontrol(0x38);//2 dong va ma tran 5x7
LCDcontrol(0x0e);//bat man hinh, bat con tro
LCDcontrol(0x01);//xoa man hinh
}
/*-------------------------thiet lap du lieu cho LCD-----------------*/
void LCDwrite(unsigned char c)
{
RS=1;//ghi du lieu
RW=0;//ghi du lieu len LCD
LCDdata=c;//gia tri C
EN=1;//cho phep muc cao
EN=0;//xung cao xuong thap
wait();//cho
}
void LCDwrites(unsigned char *s)
{
unsigned char data lens,count;
lens=strlen(s);
for(count=0;count
LCDwrite(*(s+count));
}
}
/*=====================chuong trinh tre================*/
void delay(long time)
{
while(time--);
}
/*========================ham
chinh==================*/
void main(void)
{
LCDinit(); // khoi tao LCD
LCDcontrol(0x82);// dua con tro den vi tri thu 4 dong 1
LCDwrite(‘V’);
LCDwrite(‘I’);
LCDwrite(‘E’);
LCDwrite(‘T’);
LCDwrite(‘ ’);
LCDwrite(‘N’);
LCDwrite(‘A’);
LCDwrite(‘M’);
LCDcontrol(0xC0);
LCDwrites("VI DIEU KHIEN");
while(1); //vong lap vo han
}