1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Kỹ thuật quét ma trận phím trong vi điều khiển

5 746 6

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 75 KB

Nội dung

Trong lập trình ứng dụng vi điều khiển việc giao tiếp giữa vi điều khiển và thiết bị ngoại vi điều rất quan trọng. Do số cổng của vi điều khiển thường không nhiều, trong khi vi điều khiển lại thực hiện nhiều nhiệm vụ khác nhau. Để giải quyết bài toán đó bắt buộc phải mở rộng đầu vào cho vi điều khiển. Ta có thể mở rộng đầu vào bằng nhiều phương pháp khác nhau như sử dụng IC ghi dịch 74HC595, kỹ thuật quét ma trận phím. Sử dụng kỹ thuật quét phím để kiểm tra trạng thái của ma trận phím là một trong những kỹ thuật sử dụng cổng đơn giản và hiệu quả hiệu quả. Để thực hiện quét ma trận phím ta có thể thực hiện quét theo dòng hoặc theo cột. Ở đây tác giả trình bày về cách quétt hàng, quét cột cũng hoàn toàn tương tự. Thuật toán quét ma trận phím: Ta có ma trận 16 phím được nối thành 4 hàng và 4 cột

Trang 1

Kỹ thuật quét ma trận phím trong vi điều khiển

Trong lập trình ứng dụng vi điều khiển việc giao tiếp giữa vi điều khiển

và thiết bị ngoại vi điều rất quan trọng Do số cổng của vi điều khiển thường

không nhiều, trong khi vi điều khiển lại thực hiện nhiều nhiệm vụ khác nhau.

Để giải quyết bài toán đó bắt buộc phải mở rộng đầu vào cho vi điều khiển Ta

có thể mở rộng đầu vào bằng nhiều phương pháp khác nhau như sử dụng IC

ghi dịch 74HC595, kỹ thuật quét ma trận phím Sử dụng kỹ thuật quét phím để

kiểm tra trạng thái của ma trận phím là một trong những kỹ thuật sử dụng

cổng đơn giản và hiệu quả hiệu quả.

Để thực hiện quét ma trận phím ta có thể thực hiện quét theo dòng hoặc

theo cột Ở đây tác giả trình bày về cách quétt hàng, quét cột cũng hoàn toàn

tương tự.

Thuật toán quét ma trận phím:

Ta có ma trận 16 phím được nối thành 4 hàng và 4 cột và

được nối với một Port của vi điều khiển như hình 1.

XTAL2 18

XTAL1 19

ALE 30 EA 31 PSEN 29

RST 9

P1.0/T2 1

P1.1/T2EX 2

P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8

P3.6/WRP3.5/T1 16

15

U1

AT89C52

2 3 4 5 6 7 8 9

RP1

10k +5V

C1

33p

C2

33p

R20

10k

+5V

C3

10uF

+5V

Reset

LCD1

LM016L

+5V

+5V

RV1

10k

H1

H2

H3

H4

Hình 1: Ma trận phím 4x4

Đầu tiên xuất giá trị 1 ra 7 chân của Port được giữ ở mức điện thế cao nhờ

các điện trở kéo lên Một mức 0 ra chân còn lại thì khi nhấn một phím, phím đó sẽ

nối hàng với cột và nếu hàng hoặc cột nối phím nhấn đó có mức là 0 thì nó sẽ làm

cho chân còn lại cũng có điện áp mức 0 Và nếu ta biết được hàng và cột của phím

thì ta có thể biết được chính xác vị trí phím được nhấn

Để đọc ma trận phím ta thực hiện các bước sau:

1 Xóa cổng bằng cách nạp giá trị 1111 1111 vào cổng P

Trang 2

2 Đưa dữ liệu 0111 vào các bit Px.0 đến Px.33 của cổng P Để kiểm tra các phím trên cột đầu tiên (Px.0)

3 Đọc các chân từ Px.4 đến Px.7 vào Nếu không có phím nào được nhấn trên cột

đó thì giá trị đọc vào sẽ là 1111 Ngược lại nếu có bất kỳ phím nào được nhấn trên cột đó thì giá trị tương ứng sẽ đọc vào sẽ có giá trị là 0

4 Tiếp tục đưa giá trị 1011 vào các chân Px.0 đến Px.3 của Px Để kiểm tra các phím trên cột thứ hai (Px.1) Sau đó sẽ đọc vào bốn bit Px.4 đến Px.7 Và tương

tự như trên ta xác định được vị trí của phím được nhấn trên cột này (nếu có).

5 Tương tự ta lần lượt đưa các giá trị 1101 và 1110 ra các chân Px.0 đến Px.3 và đọc vào các giá trị của Px.4 đến Px.7 để xác định vị trí của các phím được nhấn nếu có

6 Chu trình này được lặp đi lặp lại vô hạn bằng cách quay về lại bước đầu tiên

Ứng dụng ma trận phím:

Sử dụng vi điều khiển 8051 lập trình quét ma trận phím 4x4 cho hiển thị giá trị của phím bấm lên LCD.

Sơ đồ nguyên lý

XTAL2 18 XTAL1 19

ALE 30 EA 31 PSEN 29

RST 9

P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32

P1.0/T2 1 P1.1/T2EX 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8

P3.0/RXD 10 P3.1/TXD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.7/RD 17 P3.6/WR 16 P3.5/T1 15 P2.7/A15 28

P2.0/A8 21 P2.1/A9 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27 U1

AT89C52

2 4 6 8

RP1 10k +5V

C1 33p C2 33p

R20 10k

+5V

C3 10uF

+5V

Reset

LCD1 LM016L

+5V

+5V

RV1

10k

H1

H2

H3

H4

Hình 2: Sơ đồ nguyên lý giao tiếp vi điều khiển với LCD và ma trận phím 4x4

Trang 3

Chương trình điều khiển:

#include <regx52.h>

#define lcd_port P0

#define busy P0_7

#define hang1 P1_0

#define hang2 P1_1

#define hang3 P1_2

#define hang4 P1_3

#define cot1 P1_4

#define cot2 P1_5

#define cot3 P1_6

#define cot4 P1_7

unsigned char k;

void delay_ms (unsigned int delay)

{

while(i ){}

}

void wait_busy ()

{

busy=1;

RS=0;

RW=1;

while (!busy)

EN=1;

EN=0;

} }

void lcd_putcmd(unsigned char cmd)

{

RS=0;

RW=0;

lcd_port=cmd;

EN=1;

EN=0;

wait_busy ();

}

void lcd_putchar(unsigned char chr){

RS=1;

RW=0;

lcd_port=chr;

EN=1;

EN=0;

Trang 4

wait_busy ();

}

void lcd_init()

{

delay_ms(15);

lcd_putcmd(0x38);

delay_ms(5);

lcd_putcmd(0x0C);

delay_ms(2);

lcd_putcmd(0x01);

delay_ms(2);

}

void lcd_clear()

{

lcd_putcmd(0x01);

}

void lcd_putsf(unsigned char *s){

while (*s){

lcd_putchar(*s);

s++;

}

}

void lcd_gotoxy(unsigned char x, unsigned char y) {

lcd_putcmd((0x80+y*64)+x);

delay_ms(1);

}

void quet_phim()

{

hang1=1;hang2=1;hang3=1;hang4=1; // P1=0x0f; cot1=0;cot2=0;cot3=0;cot4=0;

if(hang1==0)

{ hang1=0;

cot1=1;cot2=1;cot3=1;cot4=1; // P1=0xf0; if(cot1==0){k=99;}

if(cot2==0){k=1;}

if(cot3==0){k=2;}

if(cot4==0){k=3;}

} if(hang2==0)

{ hang2=0;

cot1=1;cot2=1;cot3=1;cot4=1;

if(cot1==0){k=4;}

if(cot2==0){k=5;}

if(cot3==0){k=6;}

if(cot4==0){k=7;}

} if(hang3==0)

Trang 5

{ hang3=0;

cot1=1;cot2=1;cot3=1;cot4=1;

if(cot1==0){k=8;}

if(cot2==0){k=9;}

if(cot3==0){k=10;}

if(cot4==0){k=11;}

} if(hang4==0)

{ hang4=0;

cot1=1;cot2=1;cot3=1;cot4=1;

if(cot1==0) {k=12;}

if(cot2==0){k=13;}

if(cot3==0){k=14;}

if(cot4==0){k=15;}

} }

void hien_thi()

{

lcd_gotoxy(7,1);

lcd_putchar(k%100/10+48);

lcd_gotoxy(8,1);

lcd_putchar(k%10+48);

}

void main()

{

lcd_init();

lcd_clear();

lcd_gotoxy(0,0);

lcd_putsf(" PHIM NHAN LA:");

while (1)

{ quet_phim();

hien_thi();

} }

Trên đây là thuật toán và ứng dụng của ma trận phím, giúp ta giải quyết bài toán mở rộng đầu vào cho vi điều khiển đơn giản và hiệu quả Với giải thuật này bạn có thể ứng dụng cho mình thiết kế một số project như: kiểm tra vào ra cho vi điều khiển, máy tính điện tử, điều khiển hệ thống bằng tay …

Ngày đăng: 08/04/2016, 09:03

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w