Tải bản đầy đủ (.pdf) (15 trang)

Hướng dẫn thực hành LCD ppsx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (262.94 KB, 15 trang )


Page 1 of 15
Trung tâm nghiên cứu, ñào tạo và phát triển công nghệ ñiện tử ETECH
Địa chỉ: số 4 ngõ 524 Bạch Đằng – Hà Nội Phone: 04.66519449 /
01675562699
Email: ,

For a better world


TECH
®


E


ớng dẫn thực h
ành
LCD1602

Đề bài: Hiển thị chuỗi kí tự trên LCD1602
HƯỚNG DẪN THỰC HÀNH LCD

1. Mô tả bài toán: Kết nối AT89S52 với LCD1602 (LCD 16 cột, 2 hàng). Hiển thị
trên LCD dòng chữ “ETECH ”
2. Hướng dẫn thiết kế phần cứng:

a. Giới thiệu về LCD1602
- Là một thiết bị thông dụng dùng ñể hiển thị thông tin ñặc biệt là hiển thị các chữ
cái. LCD1602 có 16 cột và hai hàng, nó có thể hiển thị tối ña 32 kí tự cùng lúc


(16 ở hàng trên, 16 ở hàng dưới).
- Một số hình ảnh về LCD1602:


Page 2 of 15
Trung tâm nghiên cứu, ñào tạo và phát triển công nghệ ñiện tử ETECH
Địa chỉ: số 4 ngõ 524 Bạch Đằng – Hà Nội Phone: 04.66519449 /
01675562699
Email: ,

For a better world


TECH
®


E


ớng dẫn thực h
ành
LCD1602

Đề bài: Hiển thị chuỗi kí tự trên LCD1602
- Bố trí chân và ý nghĩa các chân:
+ Chân 1: GND
+ Chân 2: VCC
+ Chân 3: V
EF

Chân ñiều khiển ñộ tương phản
+ Chân 4: RS (Register Select)Cho phép chọn
ñến thanh ghi lệnh hoặc thanh ghi dữ liệu
Khi RS = 0, 1 byte dữ liệu nào ñó gửi ñến
LCD sẽ ñược ñặt vào thanh ghi lệnh ñể ñiều
khiển LCD. Khi RS = 1, thì 1 byte dữ liệu nào
ñó gửi ñến LCD sẽ ñược ñặt vào thanh ghi dữ
liệu và ñược hiển thị ra ngoài.
+ Chân 5: R/W Quy ñịnh thao tác là ñọc hay
ghi. Khi R/W = 0 thao tác ñược xác lập là ghi.
Khi ñó có thể gửi dữ liệu ñến LCD ñể hiển thị
hoặc ñiều khiển LCD. Khi R/W = 1 thao tác
ñược xác lập là thao tác ñọc. Khi ñó có thể ñọc về trạng thái của LCD
+ Chân 6: EN (LCD enable) Chân cho phép LCD làm việc. Muốn LCD làm việc
thì chân này phải ñược ñặt ở mức cao (EN =1  cho phép hoạt ñộng,
EN = 0  cấm hoạt ñộng)
+ Chân 7  16: Là 8 chân dữ liệu song song của LCD từ D0 ñến D7. Dữ liệu
có thể ñược gửi ñến LCD theo chế ñộ giao tiếp 8 bít dữ liệu hoặc 4 bít dữ
liệu. Trong chế ñộ giao tiếp 4 bít dữ liệu thì chỉ có 4 ñường dữ liệu bít cao
(D4 D7) ñược sử dụng.
+ Chân 15: Cực Anot của ñèn nền Backlight
+ Chân 16: Cực Katot của ñèn nền Backlight



Page 3 of 15
Trung tâm nghiên cứu, ñào tạo và phát triển công nghệ ñiện tử ETECH
Địa chỉ: số 4 ngõ 524 Bạch Đằng – Hà Nội Phone: 04.66519449 /
01675562699
Email: ,


For a better world


TECH
®


E


ớng dẫn thực h
ành
LCD1602

Đề bài: Hiển thị chuỗi kí tự trên LCD1602
- Các lệnh ñiều khiển LCD1602: Các lệnh ñiều khiển LCD ñược nêu trong bảng
sau:

Một số lệnh thường sử dụng:
Lệnh Mã
Xóa màn hình 0x01
Bật chế ñộ hiển thị, không có gạch chân và nhấp nháy con trỏ 0x0C
Đặt chế ñộ 8 bít dữ liệu, 1 dòng, Font 5x7 0x30
Đặt chế ñộ 8 bít dữ liệu, 2 dòng, Font 5x7 0x38


Page 4 of 15
Trung tâm nghiên cứu, ñào tạo và phát triển công nghệ ñiện tử ETECH
Địa chỉ: số 4 ngõ 524 Bạch Đằng – Hà Nội Phone: 04.66519449 /

01675562699
Email: ,

For a better world


TECH
®


E


ớng dẫn thực h
ành
LCD1602

Đề bài: Hiển thị chuỗi kí tự trên LCD1602
- Định ñịa chỉ:
Khi bật nguồn lên vị trí con trỏ luôn nằm ở cột ñầu tiên của dòng thứ nhất. Mỗi
lần gửi ra LCD một kí tự thì con trỏ tự ñộng tăng lên một vị trí. Dưới ñây là bản
ñồ ñịa chỉ của LCD1602:

Khi muốn di chuyển con trỏ ñến một vị trí bất kì trên màn hình LCD ta lấy
ñịa chỉ của vị trí ñó cộng với 0x80 sau ñó gửi mã lệnh thu ñược ñến LCD.
Ví dụ:
+ Muốn di chuyển con trỏ ñến vị trí ô số 3 hàng 1: ta gửi mã lệnh (0x02 +
0x80) = 0x82 ñến LCD.
+ Muốn di chuyển con trỏ ñến vị trí số 5 hàng 2 ta gửi mã lệnh (0x44 +
0x80) = = (0x04 + 0x40 + 0x80) = 0xC4 ñến LCD


Page 5 of 15
Trung tâm nghiên cứu, ñào tạo và phát triển công nghệ ñiện tử ETECH
Địa chỉ: số 4 ngõ 524 Bạch Đằng – Hà Nội Phone: 04.66519449 /
01675562699
Email: ,

For a better world


TECH
®


E


ớng dẫn thực h
ành
LCD1602

Đề bài: Hiển thị chuỗi kí tự trên LCD1602
- Bảng mã các chữ cái:

 Tính theo các cột là 4 bít cao, tính theo các hàng là 4 bít thấp trong 8 bít
dữ liệu. Cách tra bảng là gióng theo hàng và theo cột ñể có mã hex của
từng kí tự.

Page 6 of 15
Trung tâm nghiên cứu, ñào tạo và phát triển công nghệ ñiện tử ETECH

Địa chỉ: số 4 ngõ 524 Bạch Đằng – Hà Nội Phone: 04.66519449 /
01675562699
Email: ,

For a better world


TECH
®


E


ớng dẫn thực h
ành
LCD1602

Đề bài: Hiển thị chuỗi kí tự trên LCD1602
 Ví dụ: Muốn hiển thị chữ A trên LCD thì gửi ra mã của nó là 0x41 (4 là
cột, 1 là hàng tương ứng của chữ A)…

Page 7 of 15
Trung tâm nghiên cứu, ñào tạo và phát triển công nghệ ñiện tử ETECH
Địa chỉ: số 4 ngõ 524 Bạch Đằng – Hà Nội Phone: 04.66519449 /
01675562699
Email: ,

For a better world



TECH
®


E


ớng dẫn thực h
ành
LCD1602

Đề bài: Hiển thị chuỗi kí tự trên LCD1602
b. Kết nối LCD1602 với vi ñiều khiển AT89S52
Căn cứ vào chức năng các chân của LCD1602, kết nối LCD1602 với AT89S52
như sau:
+ Chân 1 nối GND
+ Chân 2 nối +5V
+ Chân V
EF
nối với 1 biến trở 10K ñể chỉnh ñộ tương phản
+ Chân RS, RW, EN nối với 3 chân của AT89S52
+ 8 Chân dữ liệu nối với 1 port của AT89S52
+ 2 Chân của ñèn nền Backlight kết nối như hình vẽ


Page 8 of 15
Trung tâm nghiên cứu, ñào tạo và phát triển công nghệ ñiện tử ETECH
Địa chỉ: số 4 ngõ 524 Bạch Đằng – Hà Nội Phone: 04.66519449 /
01675562699

Email: ,

For a better world


TECH
®


E


ớng dẫn thực h
ành
LCD1602

Đề bài: Hiển thị chuỗi kí tự trên LCD1602
3. Hướng dẫn lập trình phần mềm:
a. Hàm cho phép gửi lệnh ñến LCD1602







- LCD_RS, LCD_RW… là những chân của vi ñiều khiển tương ứng ñược nối với
LCD
- Delay: là một hàm con gây trễ.
 Hàm LCD_WriteCommand cho phép gửi 1 byte lệnh ñến ñể ñiều khiển

LCD. Mã lệnh ñược lấy trong bảng mã lệnh của LCD.

b. Hàm cho phép gửi một kí tự ra LCD1602


c.
d.
e.
f.
g.

 Hàm LCD_WriteData cho phép gửi 1 ký tự ra hiển thị trên LCD. Lưu ý rằng
dữ liệu gửi ra LCD phải là mã ASCII của kí tự muốn hiển thị.
 Hàm LCD_WriteData hoàn toàn giống với hàm LCD_WriteCommand chỉ
khác ở thao tác chọn thanh ghi bằng tín hiệu RS.
void
LCD_WriteCommand(
unsigned char
byte)

{
LCD_RS = 0; // chon thanh ghi lenh
LCD_RW = 0; //chon thao tac ghi
LCD_DATA = byte;
LCD_E = 1; //cho phep LCD
LCD_E = 0;
Delay(N2);
}
void
LCD_WriteData(

unsigned char
byte)

{
LCD_RS = 1; // chon thanh ghi du lieu
LCD_RW = 0;
LCD_DATA = byte;
LCD_E = 1;
LCD_E = 0;
Delay(N2);
}

Page 9 of 15
Trung tâm nghiên cứu, ñào tạo và phát triển công nghệ ñiện tử ETECH
Địa chỉ: số 4 ngõ 524 Bạch Đằng – Hà Nội Phone: 04.66519449 /
01675562699
Email: ,

For a better world


TECH
®


E


ớng dẫn thực h
ành

LCD1602

Đề bài: Hiển thị chuỗi kí tự trên LCD1602
c. Hàm cho phép di chuyển con trỏ ñến vị trí bất kì trên màn hình LCD1602











- row: là tham số cho biết số hàng (do người lập trình nhập vào) có giá trị là 1
hoặc 2 (LCD1602 chỉ có 2 hàng)
- column: là tham số cho biết số cột (do người lập trình nhập vào), có giá trị từ 0
ñến 15 (LCD1602 có 16 cột tính từ 0 ñến 15)
- Lệnh ñiều kiện switch lựa chọn 1 trong 2 trường hợp:
+ Nếu là hàng 1: thì ñịa chỉ là (0x80 + số thứ tự cột)
+ Nếu là hàng 2: thì ñịa chỉ là (0x80 + 0x40 + số thứ tự cột)
 Ví dụ: Muốn hiển thị ở vị trí thứ 2 hàng 1 chỉ cần viết: LCD_Gotoxy(1,2);



void
LCD_Gotoxy(
unsigned char
row,

unsigne
d char
column)

{
switch(row)
{
case 1:
LCD_WriteCommand(0x80+column);
break;

case 2:
LCD_WriteCommand(0x80+0x40+column);
break;

default:
break;
}
}


Page 10 of 15
Trung tâm nghiên cứu, ñào tạo và phát triển công nghệ ñiện tử ETECH
Địa chỉ: số 4 ngõ 524 Bạch Đằng – Hà Nội Phone: 04.66519449 /
01675562699
Email: ,

For a better world



TECH
®


E


ớng dẫn thực h
ành
LCD1602

Đề bài: Hiển thị chuỗi kí tự trên LCD1602
d. Hàm cho phép gửi một chuỗi lưu trong bộ nhớ chương trình ra LCD1602








- Các biến khai báo với từ khóa const là các hằng số. Nội dung của các biến này
không thể thay ñổi ñược sau khi ñã gán cho nó một giá trị ñầu.
- Mỗi chuỗi kí tự trong c ñều kết thúc bằng kí tự NULL có mã ASCII. Không có bất
kì kí tự nào có mã ASCII trùng với nó.
- Chương trình này kiểm tra các phần tử của mảng p (do người lập trình nhập
vào). Nếu phần tử hiện tại chưa phải là kết thúc mảng thì gửi ra hiển thị trên
LCD, khi ñã kết thúc mảng thì thoát.
- Một số ví dụ về gửi mảng trong bộ nhớ chương trình:







void
LCD_SendStringFlash(
const unsigned char*
p)

{
unsigned char i;
i = 0;
while(p[i]!=0)
{
LCD_WriteData(p[i]);
i++;
Delay(N1);
}
}
….
LCD_SendStringFlash(“ETECH”);

LCD_SendStringFlash(“8051 course”);


Page 11 of 15
Trung tâm nghiên cứu, ñào tạo và phát triển công nghệ ñiện tử ETECH
Địa chỉ: số 4 ngõ 524 Bạch Đằng – Hà Nội Phone: 04.66519449 /
01675562699

Email: ,

For a better world


TECH
®


E


ớng dẫn thực h
ành
LCD1602

Đề bài: Hiển thị chuỗi kí tự trên LCD1602
e. Hàm cho phép gửi một chuỗi lưu trong bộ nhớ dữ liệu ra LCD1602








- Hàm này khác hàm trên là mảng p có thể thay ñổi ñược giá trị một cách tùy ý. Vì
thế các phần tử của mảng p phải ñược lưu trong bộ nhớ RAM.
- Ví dụ:





Mảng RAMString ñược khởi tạo giá trị ñầu = “etech.com.vn” tuy nhiên ñây là mảng
lưu trong RAM nên nội dung của nó có thể thay ñổi ñược trong chương trình. Lệnh
LCD_SendString(RAMstring); gửi toàn bộ nội dung của mảng RAMString lên hiển thị trên
LCD
void
LCD_SendString(
unsigned char*
p)

{
unsigned char i;
i = 0;
while(p[i]!=0)
{
LCD_WriteData(p[i]);
i++;
Delay(N1);
}
}

unsigned char RAMstring[]="etech.com.vn";

LCD_SendString(RAMstring);



Page 12 of 15

Trung tâm nghiên cứu, ñào tạo và phát triển công nghệ ñiện tử ETECH
Địa chỉ: số 4 ngõ 524 Bạch Đằng – Hà Nội Phone: 04.66519449 /
01675562699
Email: ,

For a better world


TECH
®


E


ớng dẫn thực h
ành
LCD1602

Đề bài: Hiển thị chuỗi kí tự trên LCD1602
f. Trở lại bài toán
- Bài toán chỉ có một yêu cầu là hiển thị trên LCD dong chữ ETECH do ñó CPU
chỉ phải thực hiện 1 nhiệm vụ là ñiều khiển LCD
- Do LCD có thể lưu trữ ñược dữ liệu cho nên hàm hiển thị chữ ETECH chỉ cần
thực hiện một lần. Thời gian thực hiện rất nhanh
- Dùng cổng vào ra song song ñể kết nối với LCD cho nên CPU phải ñiều khiển
(Không có ngoại vi nào ñiều khiển ñược cổng vào ra song song thay CPU)
- Viết lưu ñồ:



Page 13 of 15
Trung tâm nghiên cứu, ñào tạo và phát triển công nghệ ñiện tử ETECH
Địa chỉ: số 4 ngõ 524 Bạch Đằng – Hà Nội Phone: 04.66519449 /
01675562699
Email: ,

For a better world


TECH
®


E


ớng dẫn thực h
ành
LCD1602

Đề bài: Hiển thị chuỗi kí tự trên LCD1602
- Code mẫu:
#include "8051module.h"
// khai bao bien va hang so
#define N1 200
#define N2 5
// khai bao cac ham
void Delay(unsigned int);
void LCD_WriteCommand(unsigned char);
void LCD_WriteData(unsigned char);

void LCD_SendStringFlash(const unsigned char*);
void LCD_Gotoxy(unsigned char,unsigned char);
// dinh nghia cac ham
void main()
{
// cam LCD
LCD_E = 0;
// khoi tao LCD
Delay(100);
LCD_WriteCommand(0x30);
LCD_WriteCommand(0x30);
LCD_WriteCommand(0x30);
LCD_WriteCommand(0x0C);
LCD_WriteCommand(0x38);
LCD_WriteCommand(0x01);
//Gửi chuỗi ETECH
LCD_Gotoxy(1,5);
LCD_SendStringFlash("ETECH");
while(1);
}
//=============================================

Page 14 of 15
Trung tâm nghiên cứu, ñào tạo và phát triển công nghệ ñiện tử ETECH
Địa chỉ: số 4 ngõ 524 Bạch Đằng – Hà Nội Phone: 04.66519449 /
01675562699
Email: ,

For a better world



TECH
®


E


ớng dẫn thực h
ành
LCD1602

Đề bài: Hiển thị chuỗi kí tự trên LCD1602
void Delay(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<100;j++);
}
}
//=============================================
void LCD_WriteCommand(unsigned char byte)
{
LCD_RS = 0; // chon thanh ghi lenh
LCD_RW = 0;
LCD_DATA = byte;
LCD_E = 1;
LCD_E = 0;
Delay(N2);

}
void LCD_WriteData(unsigned char byte)
{
LCD_RS = 1; // chon thanh ghi du lieu
LCD_RW = 0;
LCD_DATA = byte;
LCD_E = 1;
LCD_E = 0;
Delay(N2);
}

Page 15 of 15
Trung tâm nghiên cứu, ñào tạo và phát triển công nghệ ñiện tử ETECH
Địa chỉ: số 4 ngõ 524 Bạch Đằng – Hà Nội Phone: 04.66519449 /
01675562699
Email: ,

For a better world


TECH
®


E


ớng dẫn thực h
ành
LCD1602


Đề bài: Hiển thị chuỗi kí tự trên LCD1602
//=============================================
void LCD_SendStringFlash(const unsigned char* p)
{
unsigned char i;
i = 0;
while(p[i]!=0)
{
LCD_WriteData(p[i]);
i++;
Delay(N1);
}
}
//=============================================
void LCD_Gotoxy(unsigned char row,unsigned char column)
{
switch(row)
{
case 1:
LCD_WriteCommand(0x80+column);
break;

case 2:
LCD_WriteCommand(0x80+0x40+column);
break;

default:
break;
}

}

×