Ma trận phím 4×4

Bàn phím 4×4 được cấu tạo từ 16 phím nhấn chia ra thành 4 hàng và 4 cột . Ở đây người ta không sử dụng 16 đường dây nối với phím mà sử dụng phương pháp quét . Cũng như led matrix hàng hoặc cột được quét dữ liệu liên tục cổng còn lại đọc trạng thái của các phím . Khi một phím được nhấn dựa vào trạng thái thu về mà ta có thể xác định được vị trí của nó trên bàn phím . Trong các mạch ma trận phím thường thì người ta đọc điện áp vào ở mức 0 vì thế cần một trở treo lên VCC để đảm bảo tính logic , điện trở này thường chọn 10K.

Dưới đây là một ứng dụng giao tiếp keypad 4×4 với vdk 89s52 , các bạn có thể tải ví dụ mẫu ở cuối bài viết.

Mạch mô phỏng :

Code:

#include "reg52.h"
#include "stdio.h"
sbit RS_LCD = P3^5;
sbit RW_LCD = P3^6;
sbit E_LCD = P3^7;
unsigned int i,a=0;
//---------------
void delay_short(){
unsigned int i;
for(i=0;i }
//--------------
void delay(unsigned int ms)// delay 1ms
{
unsigned int x,y;
for(x=0;x {
for(y=0;y {
}
}
}
//--------------
void kt_ban(){
unsigned char x;
P1 = 0xff;
RS_LCD = 0;
RW_LCD = 1;
do {
E_LCD = 1;
delay_short();
E_LCD = 0;
x=P1;
x=x&0x80;
}
while(x!=0x80);
}
//----------------
void ghi_lenh(unsigned char commant){
kt_ban();
delay(50);
P1 = commant;
RS_LCD = 0; // chon thanh ghi lenh
RW_LCD = 0; // write to LCD
E_LCD = 1;
delay_short();
E_LCD = 0;
}
//-----------------
void ghi_kytu(unsigned char kytu){
kt_ban();
delay(30);
P1 = kytu;
RS_LCD = 1;
RW_LCD = 0;
E_LCD =1;
delay_short();
E_LCD = 0;
}
/*/------------------
void ghi_nhanh ( unsigned char kytu){
delay_short();
P1 = kytu;
RS_LCD = 1;
RW_LCD = 0;
E_LCD = 1;
delay_short();
E_LCD = 0;
}
*///-------------------
void ghi_chuoi(char *str){
while(*str){
ghi_kytu(*str);
str++;
}
}
/*/-------------------
void ghi_nhanh_chuoi(char *str){
while(*str){
ghi_nhanh(*str);
str++;
}
} */
//-------------------
void setting(){
ghi_lenh(0x38);
ghi_lenh(0x01); //Xoa man hinh
ghi_lenh(0x0f); //Co dich hien thi
ghi_lenh(0x0c); //Bat hien thi ,tat con tro
}
void hienthi()
{
if(P2==0xee){
a=1;
ghi_lenh(0x01);
ghi_lenh(0x80+3);
ghi_chuoi("Phim so 1");
}
if(P2==0xde){
a=2;
ghi_lenh(0x01);
ghi_lenh(0x80+3);
ghi_chuoi("Phim so 2");
}
if(P2==0xbe){
ghi_lenh(0x01);
ghi_lenh(0x80+3);
ghi_chuoi("Phim so 3");
}
if(P2==0x7e){
ghi_lenh(0x01);
ghi_lenh(0x80+3);
ghi_chuoi("Phim so 4");
}
if(P2==0xed){
ghi_lenh(0x01);
ghi_lenh(0x80+3);
ghi_chuoi("Phim so 5");
}
if(P2==0xdd){
ghi_lenh(0x01);
ghi_lenh(0x80+3);
ghi_chuoi("Phim so 6");
}
if(P2==0xbd){
ghi_lenh(0x01);
ghi_lenh(0x80+3);
ghi_chuoi("Phim so 7");
}
if(P2==0x7d){
ghi_lenh(0x01);
ghi_lenh(0x80+3);
ghi_chuoi("Phim so 8");
}
if(P2==0xeb){
ghi_lenh(0x01);
ghi_lenh(0x80+3);
ghi_chuoi("Phim so 9");
}
if(P2==0xdb){
ghi_lenh(0x01);
ghi_lenh(0x80+3);
ghi_chuoi("Phim so 10");
}
if(P2==0xbb){
ghi_lenh(0x01);
ghi_lenh(0x80+3);
ghi_chuoi("Phim so 11");
}
if(P2==0x7b){
ghi_lenh(0x01);
ghi_lenh(0x80+3);
ghi_chuoi("Phim so 12");
}
if(P2==0xe7){
ghi_lenh(0x01);
ghi_lenh(0x80+3);
ghi_chuoi("Phim so 13");
}
if(P2==0xd7){
ghi_lenh(0x01);
ghi_lenh(0x80+3);
ghi_chuoi("Phim so 14");
}
if(P2==0xb7){
ghi_lenh(0x01);
ghi_lenh(0x80+3);
ghi_chuoi("Phim so 15");
}
if(P2==0x77){
ghi_lenh(0x01);
ghi_lenh(0x80+3);
ghi_chuoi("Phim so 16");
}
}
void quetphim(void)
{
int n[5] = {0xfe,0xfd,0xfb,0xf7};
for (i=0; i {
P2 = n[i];
hienthi();
}
}
void main()
{ setting();
ghi_lenh(0x01);
ghi_lenh(0x80);
ghi_chuoi("http://");
ghi_lenh(0xc0);
ghi_chuoi("machdientu.net");
delay(300);
ghi_lenh(0x01);
ghi_lenh(0x80);
ghi_chuoi("Moi ban chon phim ??");
while(1)
{
quetphim();
}
}

Download file :
http://www.mediafire.com/?856lmfjjslybjbj

Từ khóa:
digg delicious stumbleupon technorati Google live facebook Sphinn Mixx newsvine reddit yahoomyweb