2.5. Xõy dựng cỏc module phần mềm
2.5.3. Xõy dựng module giao tiếp bàn phớm và hiển thị LCD
Bàn phớm và LCD là những thiết bị vào/ ra được sử dụng rộng rói nhất của cỏc thiết bị nhỳng. Trong phần này cỏc vấn đề cơ bản về giao tiếp bàn phớm và hiển thị LCD
2.5.3.1.Xõy dựng module giao tiếp bàn phớm
Ở phần này tài liệu sẽ giới thiệu cỏc vấn đề cơ bản về bàn phớm với cơ cấu ấn phớm và tỏch phớm, sau đú giới thiệu module giao tiếp với bàn phỡm.
Cỏc bàn phớm được tổ chức dưới dạng một ma trận cỏc hàng và cỏc cột. CPU truy cập cả hàng lẫn cột thụng qua cỏc cổng. Do vậy, với hai cổng 8 bit thỡ cú thể nối tới một bàn phớm 64 phớm (8 x 8). Khi một phớm được ấn thỡ một hàng và một cột được tiếp xỳc, khụng cú sự tiếp xỳc nào giữa cỏc hàng và cỏc cột cũn lại. Trong phần này sẽ nghiờn cứu về cơ cấu quột và xỏc định phớm.
Quột và xỏc định phớm.
Hỡnh 2.28 trỡnh bày một ma trận 4x4 được nối tới hai cổng. Cỏc hàng được nối tới một cổng ra và cỏc cột được nối tới một cổng vào. Nếu khụng cú phớm nào được ấn thỡ việc đọc cổng vào sẽ hoàn toàn là 1 cho tất cả cỏc cột vỡ tất cả được nối tới dương nguồn VCC. Nếu tất cả cỏc hàng được nối đất và một phớm được ấn thỡ một trong cỏc cột sẽ cú giỏ trị 0 vỡ phớm được ấn tạo đường xuống đất. Chức năng của bộ vi điều khiển là quột liờn tục để phỏt hiện và xỏc định phớm được ấn.
Để phỏt hiện một phớm được ấn thỡ bộ vi điều khiển nối đất tất cả cỏc hàng bằng cỏch cấp 0 tới chốt đầu ra, sau đú nú đọc cỏc hàng. Nếu dữ liệu được đọc từ cỏc cột là D3 - D0 = 1111 thỡ khụng cú phớm nào được ấn và quỏ trỡnh tiếp tục cho đến khi phỏt hiện một phớm được ấn. Tuy nhiờn, nếu một trong cỏc bớt cột cú số 0 thỡ điều đú cú nghĩa là việc ấn phớm đó xảy ra. Vớ dụ, nếu D3 - D0 = 1101 cú nghĩa là một phớm ở cột 1 được ấn. Sau khi một ấn phớm được phỏt hiện, bộ vi điều khiển sẽ chạy quỏ trỡnh xỏc định phớm. Bắt đầu với hàng trờn cựng, bộ vi điều khiển nối đất nú bằng cỏch chỉ cấp mức thấp tới chõn D0, sau đú nú đọc cỏc cột. Nếu dữ liệu đọc được là toàn số 1 thỡ khụng cú phớm nào của hàng này được ấn và quỏ trỡnh này chuyển sang hàng kế tiếp. Nú nối đất hàng kế tiếp, đọc cỏc cột và kiểm tra xem cú số 0 nào khụng? Quỏ trỡnh này tiếp tục cho đến khi xỏc định được hàng nào cú phớm ấn. Sau khi xỏc định được hàng cú phớm được ấn thỡ cụng việc tiếp theo là tỡm ra phớm ấn thuộc cột nào. Điều này thật là dễ dàng vỡ bộ vi điều khiển biết tại thời điểm bất kỳ hàng nào và cột nào được truy cập
Nối đất mọi hàng Đọc mọi cột Chờ nhả phớm Nối đất hàng kế tiếp Nối đất mọi hàng Bắt đầu Mọi phớm hở Đọc mọi cột Cú phớm ấn Đọc mọi cột Cú phớm ấn Cú phớm hở ở hàng này Tỡm phớm nào được ấn Xỏc định mó quột Trở về Sai Sai Sai Sai Hỡnh 2.29: Sơ đồ khối dũ tỡm phớm bấm
2.5.3.2.Nghiờn cứu xõy dựng module hiển thị LCD
a> Mụ tả cỏc chõn của LCD [1].
LCD được núi trong mục này cú 14 chõn, chức năng của cỏc chõn được cho trong Bảng 2.8. Vị trớ của cỏc chõn được mụ tả trờn hỡnh 2.30 cho nhiều LCD khỏc nhau.
i. Chõn VCC, VSS và VEE: Cỏc chõn VCC, VSS và VEE: Cấp dương nguồn - 5v và đất tương ứng thỡ VEE được dựng để điều khiển độ tương phản của LCD.
ii. Chõn chọn thanh ghi RS (Register Select).
Cú hai thanh ghi rất quan trọng bờn trong LCD, chõn RS được dựng để chọn cỏc thanh ghi này như sau: Nếu RS = 0 thỡ thanh ghi mà lệnh được chọn để cho phộp người dựng gửi một lệnh chẳng hạn như xoỏ màn hỡnh, đưa con trỏ về đầu dũng v.v… Nếu RS = 1 thỡ thanh ghi dữ liệu được chọn cho phộp người dựng gửi dữ liệu cần hiển thị trờn LCD.
iii. Chõn đọc/ ghi (R/W).
Đầu vào đọc/ ghi cho phộp người dựng ghi thụng tin lờn LCD khi R/W = 0 hoặc đọc thụng tin từ nú khi R/W = 1.
iv. Chõn cho phộp E (Enable).
Chõn cho phộp E được sử dụng bởi LCD để chốt thụng tin hiện hữu trờn chõn dữ liệu của nú. Khi dữ liệu được cấp đến chõn dữ liệu thỡ một xung mức cao xuống thấp phải được ỏp đến chõn này để LCD chốt dữ liệu trờn cỏc chõn dữ liờu. Xung này phải rộng tối thiểu là 450ns.
v. Chõn D0 - D7.
Đõy là 8 chõn dữ liệu 8 bớt, được dựng để gửi thụng tin lờn LCD hoặc đọc nội dung của cỏc thanh ghi trong LCD.
Để hiển thị cỏc chữ cỏi và cỏc con số, chỳng ta gửi cỏc mó ASCII của cỏc chữ cỏi từ A đến Z, a đến z và cỏc con số từ 0 - 9 đến cỏc chõn này khi bật RS = 1
Cũng cú cỏc mó lệnh mà cú thể được gửi đến LCD để xoỏ màn hỡnh hoặc đưa con trỏ về đầu dũng hoặc nhấp nhỏy con trỏ. Bảng 2.9 liệt kờ cỏc mó lờnh.
Chỳng ta cũng sử dụng RS = 0 để kiểm tra bớt cờ bận để xem LCD cú sẵn sàng nhận thụng tin. Cờ bận là D7 và cú thể đọc/ghi khi R/W = 1 và RS = 0 như sau:
Nếu R/W = 1, RS = 0 khi D7 = 1 (cờ bận 1) thỡ LCD bận bởi cỏc cụng việc bờn trong và sẽ khụng nhận bất kỳ thụng tin mới nào. Khi D7 = 0 thỡ LCD sẵn sàng nhận thụng tin mới.
Bảng 2.8: Ký hiệu cỏc chõn LCD
Chân Ký hiệu I/O Mô tả
1 VSS - Đất
2 VCC - D-ơng nguồn 5v
3 VEE - Cấp nguồn điều khiển phản
4 RS I RS = 0 chọn thanh ghi lệnh. RS = 1 chọn thanh dữ liệu 5 R/W I R/W = 1 đọc dữ liệu. R/W = 0 ghi 6 E I/O Cho phép 7 DB0 I/O Các bít dữ liệu 8 DB1 I/O Các bít dữ liệu 9 DB2 I/O Các bít dữ liệu 10 DB3 I/O Các bít dữ liệu 11 DB4 I/O Các bít dữ liệu 12 DB5 I/O Các bít dữ liệu 13 DB6 I/O Các bít dữ liệu 14 DB7 I/O Các bít dữ liệu
Hỡnh 2.30: Vị trớ chõn của cỏc LCD khỏc nhau của Optrex.
b> Lập trỡnh cho LCD
Dưới đõy là bảng mó lệnh lập trỡnh cho LCD [1] :
Bảng 2.9: Mó lệnh LCD
Mó (Hex) Lệnh đến thanh ghi của LCD
1 Xoỏ màn hỡnh hiển thị
2 Trở về đầu dũng
4 Giả con trỏ (dịch con trỏ sang trỏi)
6 Tăng con trỏ (dịch con trỏ sang phải)
1 2 1 4 1 4 1 3 2 1 1 4 2 1 DMC20261 DMC24227 DMC24138 DMC32132 DMC32239 DMC40131 DMC40218 DMC1610A DMC1606C DMC16117 DMC16128 DMC16129 DMC161643 3 DMC20434 DMC16106 B DMC16207 DMC16230 DMC20215 DMC32216
5 Dịch hiển thị sang phải
7 Dịch hiển thị sang trỏi
8 Tắt con trỏ, tắt hiển thị
A Tắt hiển thị, bật con trỏ
C Bật hiển thị, tắt con trỏ
E Bật hiển thị, nhấp nhỏy con trỏ
F Tắt con trỏ, nhấp nhỏy con trỏ
10 Dịch vị trớ con trỏ sang trỏi
14 Dịch vị trớ con trỏ sang phải
18 Dịch toàn bộ hiển thị sang trỏi
1C Dịch toàn bộ hiển thị sang phải
80 ẫp con trỏ Vũ đầu dũng thứ nhất C0 ẫp con trỏ Vũ đầu dũng thứ hai 38 Hai dũng và ma trận 5 x 7
Gửi lệnh và dữ liệu đến LCD
Để gửi một lệnh bất kỳ từ bảng 6.2 đến LCD ta phải đưa chõn RS về 0. Để gửi dữ liệu thỡ bật RS = 1 sau đú gửi một sườn xung cao xuống thấp đến chõn E để cho phộp chốt dữ liệu trong LCD.
Hàm để gửi lệnh được viết bằng C void Cmd (unsined char cmd) {
RS=0;//Gửi lệnh
DB=Cmd; //Đặt vào cổng dữ liệu là lệnh Cmd E=1; //Đặt chõn Enable lờn cao tạo xung Delay(10); //Chờ
E=0; }
Hàm để gửi ký tự hiển thị LCD được viết bằng C void Data (unsined char DT)
{
RS=1;//Gửi Dữ liệu
DB=DT; //Đặt vào cổng dữ liệu
E=1; //Đặt chõn Enable lờn cao tạo xung Delay(10); //Chờ
E=0; }