giao tiếp LCD với 8951giao tiếp LCD với 8951vgiao tiếp LCD với 8951giao tiếp LCD với 8951giao tiếp LCDgiao tiếp LCD với 8951 với 8951 giao tiếp LCD với 8951giao tiếp LCD với 8951giao tiếp LCD với 8951giao tiếp LCD với 8951
Trang 23 Sơ đồ chân 89C51
2 Nguyên lí hoạt động LCD
5 Code
4 Lưu đồ tuật toán
1 Sơ đồ chân LCD
Trang 3Chân Ký hiệu I/O Mô tả
RS=1 chon thanh ghi dữ liệu
1 Bảng mô tả sơ đồ chân của LCD 16x2:
Trang 4Châ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:
Trang 52 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
RS=1.
Trang 6Mã (HEX) Lệnh đến thanh ghi của LCD
04 Giảm con trỏ(dịch con trỏ sang trái )
06 Tăng con trỏ(dịch con trỏ sang phả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
- Bảng mã lệnh của LCD:
Trang 7SƠ ĐỒ, CHỨC NĂNG LIÊN KẾT CÁC CHÂN CỦA LCD
Chân Kí hiệu I/O
Mô tả
1 VSS
-Đất
2 VCC - 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
-Cấp nguồn điều khiển độ tương phản
4 RS I 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
Trang 8ghi 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
14 I/O 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
Trang 93 SƠ ĐỒ CHÂN CỦA AT89C51
Trang 104 LƯU ĐỒ GIẢI THUẬT
BẮT ĐẦU
KẾT THÚC
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
NHẤN PHÍM
XỬ LÝ DỮ LIỆU
HIỂN THỊ LÊN LCD
Trang 115.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=1; //dua chan cho phep len cao
Trang 12/* -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
}
Trang 13/* -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<lens;count++){
LCDwrite(*(s+count));
} }
/*=====================chuong trinh tre================*/ void delay(long time)
{
while(time );
}
Trang 14/*========================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 }