Thực hành Hiển thị chuỗi kí tự trên LCD1602

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ẽ

pdf15 trang | Chia sẻ: maiphuongdc | Lượt xem: 5542 | Lượt tải: 2download
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:

  • pdfhuong_dan_thuc_hanh_lcd_.PDF
Tài liệu liên quan