LCD16x2 là một công cụ hiển thị hết sức cơ bản và quen thuộc với tất cả các bạn đã và đang học điện tử.Vì vậy trong bài này mình không đi sâu giải thích nguyên lý hoạt động của nó nữa.Ở đây mình chỉ hướng dẫn cơ bản cách sử dụng thư viện LCD16x2.h ,các hàm và cách viết chương trình.Bộ thư viện này chỉ là giao tiếp I/O nên dùng được cho mọi dùng MSP430.
1.
Sơ đồ mạch
Có
LCD có 2 chế độ điều khiển đó là có phản hồi và không có phản hồi(cờ bận RW),việc
dùng chân RW sẽ tốn thêm 1 chân VĐK tuy nhiêu tốc độ giao tiếp sẽ rất cao,ít xảy
ra lỗi(khuyến khích sử dụng).Ngoài ra còn có kiểu truyền dữ liệu 4 bit hoặc 8 bit,nhưng hầu hết mọi người
đều sử dụng mode 4 bit để giảm số chân điều khiển của VĐK.
Sơ đồ nối dây trong mô phỏng(dùng với
MSP430F2272)
Bộ
thư viện chúng ta sử dụng yêu cầu dùng mode truyền dữ liệu 4 bit,4 chân truyền
dữ liệu bắt buộc phải liền nhau trong 1 Port ,theo đúng thứ tự từ thấp đến cao
,tuy nhiên không nhất thiết phải là 4 bit cao của port có mà có thêm lựa chọn dịch xuống(tức là như hình các bạn nối(D4-P1.4
D5-P1.5 D6-P1.6 D7-P1.7 nhưng cũng có thể nối D4-P1.1 D5-P1.2 D6-P1.3
D7-P1.4).Cấu hình như vậy nhằm giảm số dòng code và tăng tốc độ hoạt động.Khi sử
dụng nhất thiết phải cấu hình lại chân trong thư viện cho đúng với mạch.
2.
Chương trình
Một số
chú ý :
-
Khi
chạy trên mô phỏng các bạn có thể gặp warning hoặc có thể không chạy nếu dùng
bit RW,tuy nhiên trên mạch thật sẽ không gặp vấn đề gì cả.
-
Nếu
không dùng bit RW thì phải xóa khai báo #define USE_WAIT còn dùng thì để khai
báo này.
-
Nếu
không sử dụng bit RW thì phải cài đặt lcd_delay cho phù hợp với tốc độ hoạt động
của chip sao cho thời gian thực của số lcd_delay chu kỳ máy ít nhất là 40micros
-
4
bit data ở vị trí mặc định là 4 bit cao của 1 port,nếu các bạn muốn dùng 4 bit
thấp hơn của port đấy thì phải sửa lại define SHIFT_DATA bằng đúng số bit dịch(ví
dụ nếu D7-P1.5 thì SHIFT_DATA=2
- Khi mô phỏng thì các bạn cần tạo file hex,có thể vào Properties > Build > Step > Apply predefined Step chọn hex
Các
hàm cần biết:
-
LCD_Init();
Hàm khởi tạo các chân điều khiển,gọi
ra khi muốn sử dụng LCD.
-
LCD_Clear(); Xóa trắng dữ liệu trên màn hình
-
LCD_Home(); Đưa con trỏ về vị trí đầu tiên hàng trên
cùng
-
LCD_Goto(x,y); Đưa con trỏ đến vị trí hàng x cột y (Các bạn
có thể sử dụng thư viện này cho LCD20x4,tuy nhiên phải sửa lại hàm này để nhảy
được đến cả 4 dòng).
-
LCD_Wait(); Hàm chờ LCD rảnh
-
LCD_Display(‘
’); In ra ký tự trong dấu ‘ ’
-
LCD_PrintString(“
“); In ra chuỗi trong dấu “ “
-
LCD_PrintDecimal(n,length); In ra số nguyên có dấu n với độ dành
length
-
LCD_PrintFloat(x,length,coma) In ra số thực x với độ dành length(tính cả dấu
chấm) và làm trong coma chữ số sau dấu phẩy.
Ví
dụ tham khảo:
////////////////////////////////////////////////////////////////////
// CHUONG TRINH
TEST LCD16x2
// VIET BOI :
PHAM VAN THUAN DTVT07-K55
// Email: terran991992@gmail.com
// Blog : http://thuanbk55.blogspot.com/
//
.................................................................
// AP DUNG CHO
MACH UNG DUNG MSP430
//******************************************************************/
#include "msp430f2272.h"
#include "stdio.h"
#include "LCD_16x2.h"
void main()
{
unsigned int x=100;
float y=1.2347;
WDTCTL = WDTPW | WDTHOLD; //Stop Watchdog
DCOCTL = CALDCO_1MHZ; // Clock=1Mhz
BCSCTL1 = CALBC1_1MHZ;
LCD_Init();
while(1)
{
LCD_Clear();
LCD_Home();
LCD_PrintString("Test
LCD_16x2");
LCD_Goto(2,0);
LCD_PrintDecimal(x,4);
LCD_Goto(2,8);
LCD_PrintFloat(y,5,3);
_delay_cycles(1000000);
}
}
|
Kết
quả chương trình:
Thư
viện LCD các bạn có thể download tại đây
bạn ơi con LCD16x2 này chạy 5v mà con msp430 này chạy 3.3v mà bạn nối dây này thì có làm sao không?
ReplyDeleteCó loại LCD 3.3V đấy bạn ạ.Còn nếu bạn vẫn dùng LCD 5V thì bạn cấp nguồn 5V cho LCD cũng được,các chân tín hiệu vẫn dùng được 3.3V bình thường,nối trực tiếp với MSP430
Deleteok, cảm ơn bạn nhé!
Deletecho mình hỏi câu nữa : sao m add thư viên LCD_16x2 của bạn vào mà nó lỗi tùm lum ấy nhỉ, m dùng ccs 6.0.1
Deletebạn để ý là thư viện này viết đặc thù cho MSP430G2553,khi dùng với chip khác kể cả cùng dòng chip cũng phải để ý vì có thể cấu hình chân IO vẫn không đúng.Khác dòng nhưng thuộc họ MSP thì vẫn dùng bình thường nhưng phải cấu hình lại chân.Một chú ý khác là một số chip cũ ko có thanh ghi PxSEL2 ,nên thường báo lỗi chỗ này
Deleteok, cảm ơn bạn đã reply lại nhé! m cũng dùng MSP430G2553 trên kit launchpad mà, m xem nó k phải lỗi I/O đâu, nó lỗi gì gì ấy .....
DeleteVD: PSELLCD &=~(0xF0>>SHIFT_DATA); //Chon chuc nang I/O
//PSEL2LCD &=~(0xF0>>SHIFT_DATA);
DDRLCD|=0xF0>>SHIFT_DATA; //Chon xuat du lieu cho 4 chan data
PRENLCD &=~(0xF0>>SHIFT_DATA); //Khong co dien tro noi keo len
PORTLCD &=~(0xF0>>SHIFT_DATA); //Dau ra muc thap
Có thể bạn xóa mất mấy cái define rồi,còn thư viện này mình chạy bình thường không thấy có vấn đề gì,bạn có thể trỏ chuột vào biểu tượng error của từng dòng,nó sẽ hiện lỗi cụ thể,chứ bạn nói chung chung thế mình cũng chịu thôi
Deletebài của anh hay quá anh học bk đúng ko a
ReplyDeleteGán quảng cáo ức chế vcl, có tải được đâu.
ReplyDeletebài này của anh hay mà thư viện LCD_16x2.h ko tải đc
ReplyDeletemong a giúp đỡ
Em không đọc được giá trị nhiệt độ dht11 lên lcd 16x2 anh có thể giúp em được không ?
ReplyDeleteEm cảm ơn.
xuống hàng thì sài lệnh gì vậy anh,với lại lệnh LCD_goto(x,y); sử dụng như thế nào vậy
ReplyDeletenếu em gắn thêm i2c thì code thư viện như nào ạ
ReplyDelete