Tải bản đầy đủ (.pdf) (8 trang)

Ma trận phím 4*4 hiện thị LCD

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (290.96 KB, 8 trang )

Ma trận phím 4*4 hiện thị LCD
Ngu
ồn : biendt.biz 
Việc có nhiều nút nhấn cũng như tiết kiệm được chân vi điều khiển là một bài
toán đặt ra đối với 1 bài tập vi điều khiển lớn. Việc ghép nối giao tiếp với bàn
phím với vi xử lý được ghép nối thành 1 ma trận hay gọi là ma trận phím! Một
ma trận n hàng và m cột có thể ghép với nhau tối đa m*n phím chức năng. Hôm
nay tôi post bài này lên cho các pác tham khảo cách quét ma trận phím đầu vào.
1) Cấu t
ạo của 1 ma trận phím 4x4
Nói đến ma trận là ai cũng tưởng tưởng đến hàng và cột. Và các pác cũng bít khi
đó nó sẽ có lợi như thế nào khi ghép kiểu ma trận này! Cấu tạo nó được như
hình vẽ dưới:


Phím bấm được nối thành ma trận 4 hàng x 4cột, các hàng và cột được nối với
các chân cổng vào ra của vi điều khiển Psoc. Khi một phím được bấm, nó sẽ nối
một hàng và một cột tương ứng.Như vậy ta sẽ có 16 nút nhấn mà chỉ mất có 8
chân vi điều khiển còn muốn tiếp kiệm hơn nữa là các pác dùng còn giải mã 3
>> 8 (74138) hay dùng 74ls154.(Cái này cũng không cần bit đâu vì bài của mình
đâu lớn như thế) nên nối trực tiếp vào chân vi điều khiển cho nó nhanh. Khi nút
0 được nhấn thì nó nối giữa cột 1 hàng 1. CÒn nút 1 được nhấn thì cột 2 và
hàng 1 được nối hay nút 2 được nhấn thì nối giữa cột 3 và hàng 1... cứ như vậy
đến nút thứ 15!
2) Nguyên lý quét

Thuật toán quét phím được sử dụng là lần lượt tìm hàng và tìm cột (hoặc ngược
lại) Khi tìm hàng, các hàng sẽ được đặt làm đầu vào,các cột được đặt làm đầu ra
mức thấp. Sau đó kiểm tra các hàng xem có hàng nào ở mức thấp hay không
(có phím nào bấm gây ra nối với cột hay không)? Sau khi xác định được hàng sẽ
đặt các cột làm đầu vào, hàng vừa tìm được làm đầu ra mức thấp. Việc kiểm tra


được tiến hành với các cột. Sau khi xác định đượ
c hàng và cột sẽ suy ra phím
được bấm.
Nói thế này cũng khó hiểu nhỉ nhưng mà chỉ cần hiểu sơ qua thuật toán quét
LED như thế này:
+ Đầu tiên cho các hàng ở mức 1 và các cột ở mức 0
+ Kiểm tra xem nào hàng nào đựoc nhấn (khi nút được nhấn) tức là đựoc nhận
tín hiệu từ các cột
+ Nếu mà có 1 hàng bất kỳ đựoc nhấn sau đó ta lại chuyển giá trị 0 vào hàng
đựoc nhấn và giá trị 1 vào các cột. Khi đó c
ột lại nhận nhiệm vụ làm tín hiệu vào.
Nếu mà 1 trong các cột đựoc nhấn (Khi nút được nhấn) trong các trường hợp
này thì cho ra các giá trị tương ứng.
+ Việc kiểm tra các hàng khác là tương tự như trên!Ở đây không đề cập đến
việc nhiễu phím nút nhấn nên bỏ qua.
Cũng khó hiểu. Thôi đến đoạn chương trình sẽ hiểu sâu hơn!
3) Mạch nguyên lý



3) Chương trình:
[CODE]/*----------------------------------------------------------------------------
==========MA TRAN PHIM 4X4 HIEN THI
LCD=======================
Viet boi: biendt -
Dung P2 de noi vao chan cac ma tran phim
+ Tu P2_0 den P2_3 duoc noi vao hang
+ Tu P2_4 den P2_7 duoc noi vao cot
+ Tat ca P2 duoc dat o che do Strong
Dung LCD 16*2 hien thi gia tri ban phim duoc noi vao cong P0



----------------------------------------------------------------------------*/

#include // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules

unsigned char sttphim;
//====================Dinh nghia cac gia tri nut
nhan=========================
#define hang1 (PRT2DR&0x01)
#define hang2 (PRT2DR&0x02)
#define hang3 (PRT2DR&0x04)
#define hang4 (PRT2DR&0x08)
#define cot1 (PRT2DR&0x10)
#define cot2 (PRT2DR&0x20)
#define cot3 (PRT2DR&0x40)
#define cot4 (PRT2DR&0x80)
//================================Ham hien thi 2 so tren
LCD====================
void lcd2digit(unsigned int Data)
{
LCD_1_WriteData('0'+Data/10);
Data=Data%10;
LCD_1_WriteData('0'+Data);
}
// ==============================Ham quet ma tran
phim==========================
void quetphim()
{

PRT2DR=PRT2DR|0x01; //Cho cac hang muc 1
PRT2DR=PRT2DR|0x02;
PRT2DR=PRT2DR|0x04;
PRT2DR=PRT2DR|0x08;
PRT2DR=PRT2DR&0xef; // Cho cac cot muc 0
PRT2DR=PRT2DR&0xdf;
PRT2DR=PRT2DR&0xbf;
PRT2DR=PRT2DR&0x7f;

if((!hang1)|(!hang2)|(!hang3)|(!hang4)) // kiem tra hang dc nhan
{
if(hang1==0) // neu hang 1
{
PRT2DR=PRT2DR|0x10; // cho cac cot muc 1
PRT2DR=PRT2DR|0x20;
PRT2DR=PRT2DR|0x40;
PRT2DR=PRT2DR|0x80;
PRT2DR=PRT2DR&0xfe; // chuyen hang1 ve muc 0
if(!cot1) sttphim=0;
if(!cot2) sttphim=1;
if(!cot3) sttphim=2;
if(!cot4) sttphim=3;

×