Căncứ vào chứcnăng các châncủa LCD1602, kếtnối LCD1602với AT89S52 như sau:
+ Chân 1nốiGND
+ Chân 2nối+5V
+ ChânVEFnốivới 1 biếntrở 10K để chỉnh độtương phản
+ Chân RS, RW, ENnối với 3 châncủa AT89S52
+ 8 Chândữ liệunốivới 1 port của AT89S52
+ 2 Châncủa đènnền Backlight kết nối như hìnhvẽ
15 trang |
Chia sẻ: maiphuongdc | Lượt xem: 5649 | Lượt tải: 2
Bạn đang xem nội dung tài liệu Thực hành Hiển thị chuỗi kí tự trên LCD1602, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
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: info@etech.com.vn, kythuatvixuly@gmail.com
For a better world
TECH®
E Hướ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: info@etech.com.vn, kythuatvixuly@gmail.com
For a better world
TECH®
E Hướ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: VEF 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: info@etech.com.vn, kythuatvixuly@gmail.com
For a better world
TECH®
E Hướ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: info@etech.com.vn, kythuatvixuly@gmail.com
For a better world
TECH®
E Hướ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: info@etech.com.vn, kythuatvixuly@gmail.com
For a better world
TECH®
E Hướ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: info@etech.com.vn, kythuatvixuly@gmail.com
For a better world
TECH®
E Hướ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: info@etech.com.vn, kythuatvixuly@gmail.com
For a better world
TECH®
E Hướ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 VEF 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: info@etech.com.vn, kythuatvixuly@gmail.com
For a better world
TECH®
E Hướ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: info@etech.com.vn, kythuatvixuly@gmail.com
For a better world
TECH®
E Hướ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,unsigned 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: info@etech.com.vn, kythuatvixuly@gmail.com
For a better world
TECH®
E Hướ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: info@etech.com.vn, kythuatvixuly@gmail.com
For a better world
TECH®
E Hướ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: info@etech.com.vn, kythuatvixuly@gmail.com
For a better world
TECH®
E Hướ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: info@etech.com.vn, kythuatvixuly@gmail.com
For a better world
TECH®
E Hướ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: info@etech.com.vn, kythuatvixuly@gmail.com
For a better world
TECH®
E Hướ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: info@etech.com.vn, kythuatvixuly@gmail.com
For a better world
TECH®
E Hướ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;
}
}
Các file đính kèm theo tài liệu này:
- huong_dan_thuc_hanh_lcd_.PDF