Hướng dẫn hiển thị LCD dùng ccs cho người mới bắt đầu

mta_cdt

Super Moderator
Thành viên BQT
#1
trước hết tìm hiểu 1 chút về LCD.
LCD là màn hình dùng để hiển thị ký tự phổ biến hiện nay.
lcd1.jpg
lcd dạng text gồm 16 chân thứ tự và chức năng từng chân được ma tả bảng dưới
lcd2.png
LCD có 2 chế độ hiển thị là 4 bit và 8 bit. Trong ccs có hỗ trợ sẵn thư viện 4 bít khá hay.
Sơ đồ kết nối LCD với vi điều khiển
lcd6.jpg
ở chế độ 4 bit chỉ cần dùng 3 chân điều khiển là RS,RW,EN và 4 chân dữ liệu D4,D5,D6,D7. Nếu dùng để hiển thị lên lcd có thể nối chân RW với GND.
- CCS hỗ trợ thư viện LCD 4 bit khá hay bạn có thể xem ở thư mục sau khi cài đặt xong. Mặc định là
C:\Program Files\PICC\Drivers chọn tệp LCD.c

các hàm điều khiển lcd
-lcd_init(): Khởitạo LCD, gọi 1 lần trong hàm main
- lcd_gotoxy(int8 x, int8 y) : Hiển thị tại vị trí cột x , hàng y bắt đầu ở x=1, y=1
- lcd_send_byte(BYTE address, BYTE n) Gửi 1 byte n đến lcd, address=0: thao tác lệnh, address=1: thao tác dữ liệu
-BYTE lcd_read_byte(void) : đọc về 1 byte
-lcd_putc(char c) : Gửi các ký tựl ên lcd
-char lcd_getc(int8 x, int8 y) : Đọc ký tự tại cột x, hàng y

Viết chương trình phải định nghĩa các pin sử dụng lcd và gọi hàm thư viện lcd.c
cụ thể bạn có thể xem code mình làm.
Mã:
#include <16F877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)

#define LCD_ENABLE_PIN PIN_B2 // chan E noi voi B2
#define LCD_RS_PIN PIN_B0    // RS noi voi B0
#define LCD_RW_PIN PIN_B1
#define LCD_DATA4 PIN_B4    //D4 noi voi B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7

#include <lcd.c>// su dung thu vien lcd.c

void main(void)
{
lcd_init();
while(1)
{
lcd_gotoxy(3,1); // cot 3 hang 1
lcd_putc("MTA_CDT"); // hien thi test lcd
lcd_gotoxy(1,2);            // cot 1 hang 2
lcd_putc(1+48);              // hien thi so 1
}

}
2013-09-28_214022.jpg
 

Đính kèm

Sửa lần cuối:
#3
trước hết tìm hiểu 1 chút về LCD.
LCD là màn hình dùng để hiển thị ký tự phổ biến hiện nay.
lcd dạng text gồm 16 chân thứ tự và chức năng từng chân được ma tả bảng dưới
LCD có 2 chế độ hiển thị là 4 bit và 8 bit. Trong ccs có hỗ trợ sẵn thư viện 4 bít khá hay.
Sơ đồ kết nối LCD với vi điều khiển
ở chế độ 4 bit chỉ cần dùng 3 chân điều khiển là RS,RW,EN và 4 chân dữ liệu D4,D5,D6,D7. Nếu dùng để hiển thị lên lcd có thể nối chân RW với GND.
- CCS hỗ trợ thư viện LCD 4 bit khá hay bạn có thể xem ở thư mục sau khi cài đặt xong. Mặc định là
C:\Program Files\PICC\Drivers chọn tệp LCD.c

các hàm điều khiển lcd
-lcd_init(): Khởitạo LCD, gọi 1 lần trong hàm main
- lcd_gotoxy(int8 x, int8 y) : Hiển thị tại vị trí cột x , hàng y bắt đầu ở x=1, y=1
- lcd_send_byte(BYTE address, BYTE n) Gửi 1 byte n đến lcd, address=0: thao tác lệnh, address=1: thao tác dữ liệu
-BYTE lcd_read_byte(void) : đọc về 1 byte
-lcd_putc(char c) : Gửi các ký tựl ên lcd
-char lcd_getc(int8 x, int8 y) : Đọc ký tự tại cột x, hàng y

Viết chương trình phải định nghĩa các pin sử dụng lcd và gọi hàm thư viện lcd.c
cụ thể bạn có thể xem code mình làm.
Mã:
#include <16F877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)

#define LCD_ENABLE_PIN PIN_B2 // chan E noi voi B2
#define LCD_RS_PIN PIN_B0    // RS noi voi B0
#define LCD_RW_PIN PIN_B1
#define LCD_DATA4 PIN_B4    //D4 noi voi B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7

#include <lcd.c>// su dung thu vien lcd.c

void main(void)
{
lcd_init();
while(1)
{
lcd_gotoxy(3,1); // cot 3 hang 1
lcd_putc("MTA_CDT"); // hien thi test lcd
lcd_gotoxy(1,2);            // cot 1 hang 2
lcd_putc(1+48);              // hien thi so 1
}

}
cái thư viện lcd.c này tùy phiên bản của pic ccs thôi anh ak, điển hình là bản PIC CCS 4.104 thì hỗ trợ. còn phiên bản thấp hơn thì không có phần khai báo chân LCD, nó mặc định là EN,RW,RS ở PORTE, còn D4->D7 ở portD.
 

mta_cdt

Super Moderator
Thành viên BQT
#4
tập lệnh cho LCD
lcd4.png
đây là bảng 1 số lệnh của lcd.
vd để xóa màn hình gọi lệnh
lcd_send_byte(0,0x01);
 
#7
tắt hiển thị ,gọi con trỏ ,ta dùng lệnh :
lcd_send_byte(0,0x0a);
ép con trỏ về đầu dòng thứ 2 :
lcd_send_byte(0,0xC0);
có đúng ko ạ #:-s
 

mta_cdt

Super Moderator
Thành viên BQT
#8
tắt hiển thị ,gọi con trỏ ,ta dùng lệnh :
lcd_send_byte(0,0x0a);
ép con trỏ về đầu dòng thứ 2 :
lcd_send_byte(0,0xC0);
có đúng ko ạ #:-s
cái này bạn cứ thử đi xem đúng không?
 
#9
:)) em hóng chút rồi đi ôn bài ko mai thi rồi ,để thi xong emvex thử coi sao , mà chương trình bên trên em thấy giống code avr ạ , còn cái câu lệnh này thì cũng nhét vào như mấy câu lệnh trong chương trình trên ạ ?
 

mta_cdt

Super Moderator
Thành viên BQT
#10
:)) em hóng chút rồi đi ôn bài ko mai thi rồi ,để thi xong emvex thử coi sao , mà chương trình bên trên em thấy giống code avr ạ , còn cái câu lệnh này thì cũng nhét vào như mấy câu lệnh trong chương trình trên ạ ?
cũng nhét vào như vậy thôi mà. Anh viết cho pic đấy chứ có phải avr đâu
.
 

Quảng cáo Google

Quảng cáo Google