19-Pic-Klavye Kullanımı
Bir keypad basit bir anahtarlama ve matris kesişiminden oluşur. Satırdan verilen bilgi sütundan alınabilmesi için satır ve sütunun kesişen noktasındaki tuşa basılması gerekmektedir. Kısacası if(şart) ile satır ve sütun aynı anda True olması durumunda sadece bir tuşa basılmıştır. Bunu test ederek hangi tuşa basıldığı bulunur. Bunun için çeşitli tuş kontrol fonksiyonları yazılabilir. Aşağıda keypad_oku() adında fonksiyonla bu işlem gerçekleştirilmiştir.
#include"F:\2012-2013-pic\tus\main.h"
#defineuse_portb_lcd TRUE
#define LCD_TYPE 1
#include<lcd.c>
chartus=0; // karakter tipinde değişken tanımlanıyor
chardrm=0;
//*********** Keypad Tarama Fonksiyonu *********
charkeypad_oku() // Fonksiyon ismi
{
tus=0;
drm=0;
output_high(pin_d3); // 1. satır lojik-1 yapılıyor
if (input(pin_d0))
{ while(input(pin_d0));tus=1;drm=1; }
if (input(pin_d1))
{ while(input(pin_d1));tus=2;drm=1; }
if (input(pin_d2))
{ while(input(pin_d2));tus=3;drm=1;}
output_low(pin_d3);
output_high(pin_d4); // 2. satır lojik-1 yapılıyor
if (input(pin_d0))
{ while(input(pin_d0));tus=4;drm=1;}
if (input(pin_d1))
{ while(input(pin_d1));tus=5;drm=1;}
if (input(pin_d2))
{ while(input(pin_d2));tus=6;drm=1;}
output_low(pin_d4); // 2. satır lojik-0 yapılıyor
output_high(pin_d5); // 3. satır lojik-1 yapılıyor
if (input(pin_d0))
{ while(input(pin_d0));tus=7;drm=1;}
if (input(pin_d1))
{ while(input(pin_d1));tus=8; drm=1;}
if (input(pin_d2))
{ while(input(pin_d2));tus=9;drm=1; }
output_low(pin_d5); // 3. satır lojik-0 yapılıyor
output_high(pin_d6); // 3. satır lojik-1 yapılıyor
if (input(pin_d0))
{ while(input(pin_d0));tus=0xE; drm=1;}
if (input(pin_d1))
{ while(input(pin_d1));tus=0;drm=1; }
if (input(pin_d2))
{ while(input(pin_d2));tus=0xF;drm=1; }
output_low(pin_d6); // 3. satır lojik-0 yapılıyor
returndrm; // Fonksiyon "drm" değeri ile geri döner
}
void main()
{
lcd_init();
output_d(0x00); // D portu çıkışı sıfırlanıyor
while(true)
{
/*************** * TUŞUNUNUN KONTROLÜ****/
if((keypad_oku())&&(tus==14))
{
delay_ms(500);
if((keypad_oku()==1)&&(tus==15))
{
printf(lcd_putc,"\fDegistir");
//şifre değiştirme fonksiyonuna gidilecek
}
}
/*************************************/
if((keypad_oku()==1)&&(tus==14))
{
printf(lcd_putc,"\fGiris");
//şifre giriş edilecek fonksiyona gidilecek
}
/*********# TUŞUNUN KONTROLÜ YAPILIYOR****/
if((keypad_oku()==1)&&(tus==15))
{
printf(lcd_putc,"\fKontrol");
//şifre kontrol edilecek fonksiyona Gidilecek
}
/**************************/
}
}
Yukarıdaki programın simülasyonda çalıştırılmış hali aşağıdaki şekilde görülmektedir.
Bellek ve Klavye Kullanımı
Bu programda klavye ve bellek kullanımı yapılmıştır. Klavye ve bellek kullanım programlarının birleştirilmiş halidir.
#include"main.h"
#include<string.h>
#defineuse_portb_lcd TRUE
#define LCD_TYPE 2
#include<lcd.c>
chartus=0; // karakter tipinde değişken tanımlanıyor
chardrm=0;
char klavye[15];
char bellek[15];
//*********** Keypad Tarama Fonksiyonu *********
charkeypad_oku() // Fonksiyon ismi
{
tus=0;
drm=0;
output_high(pin_d3); // 1. satır lojik-1 yapılıyor
if (input(pin_d0))
{ while(input(pin_d0));tus=1;drm=1; }
if (input(pin_d1))
{ while(input(pin_d1));tus=2;drm=1; }
if (input(pin_d2))
{ while(input(pin_d2));tus=3;drm=1;}
output_low(pin_d3);
output_high(pin_d4); // 2. satır lojik-1 yapılıyor
if (input(pin_d0))
{ while(input(pin_d0));tus=4;drm=1;}
if (input(pin_d1))
{ while(input(pin_d1));tus=5;drm=1;}
if (input(pin_d2))
{ while(input(pin_d2));tus=6;drm=1;}
output_low(pin_d4); // 2. satır lojik-0 yapılıyor
output_high(pin_d5); // 3. satır lojik-1 yapılıyor
if (input(pin_d0))
{ while(input(pin_d0));tus=7;drm=1;}
if (input(pin_d1))
{ while(input(pin_d1));tus=8; drm=1;}
if (input(pin_d2))
{ while(input(pin_d2));tus=9;drm=1; }
output_low(pin_d5); // 3. satır lojik-0 yapılıyor
output_high(pin_d6); // 3. satır lojik-1 yapılıyor
if (input(pin_d0))
{ delay_ms(1000);tus=0xE; drm=1;}
if (input(pin_d1))
{ while(input(pin_d1));tus=0;drm=1; }
if (input(pin_d2))
{ delay_ms(1000);tus=0xF;drm=1; }
output_low(pin_d6); // 3. satır lojik-0 yapılıyor
returndrm; // Fonksiyon "drm" değeri ile geri döner
}
/*************** klavye oku ****************/
voidklavyeoku()
{
int adres=0;
char k;
// printf(lcd_putc,"\f");
do
{
if (keypad_oku()&&(tus!=14))
{
k=tus;
printf(lcd_putc,"*");
klavye[adres]=k;
adres++;
}
} while((tus!=15));
}
/************** bellek yaz ***********/
voidbellekyaz()
{
int adres=0;
char k;
// printf(lcd_putc,"\f");
do
{
if (keypad_oku()&&(tus!=14))
{
k=tus;
printf(lcd_putc,"*");
write_eeprom(adres,k);
adres++;
}
} while( tus!=0x0F);
tus=0;
}
/*************** bellek oku************/
voidbellekoku()
{
int adres=0;
char k;
do
{
k= read_eeprom(adres);
// printf("%c",k);
bellek[adres]=k;
adres++;
} while(k!=0x0F);
}
/************* karşılaştır **********/
charkarsilastir()
{
bellekoku();
if(!strcmp(klavye,bellek)) return 1;
elsereturn 0;
}
int i;
void main()
{
lcd_init();
output_d(0x00); // D portu çıkışı sıfırlanıyor
printf(lcd_putc,"\f* BAS SIFRE GIR\n");
while(true)
{
/****************************************/
if((keypad_oku()))
{
if((tus==0))
{
do
{
if(tus==14) break;
keypad_oku();
}while((tus!=15));
printf(lcd_putc,"\fMEVCUT SIF.GIR.\n");
klavyeoku();
if(karsilastir())
{// printf(lcd_putc,"DOGRU")printf(lcd_putc,"\fYENI SIFRE\n");
bellekyaz();
printf(lcd_putc,"\fSIFRE KAYDEDILDI.\n");
printf(lcd_putc,"* BAS SIFRE GIR\n");
}
else
{ printf(lcd_putc,"YANLIS");}
// tus=0;
}
/*******************************************/
if((tus==14))
{
printf(lcd_putc,"\fSIFRE GIRINIZ\n");
klavyeoku();
//şifre giriş edilecek fonksiyona gidilecek
}
/*********************************************/
if((tus==15))
{
printf(lcd_putc,"\fSIFRE..");
if(karsilastir())
{ printf(lcd_putc,"DOGRU\n");
for(i=0;i<15;i++){bellek[i]=0;klavye[i]=0;}
}
else
{ printf(lcd_putc,"YANLIS\n");}
printf(lcd_putc,"* BAS SIFRE GIR");
//printf(lcd_putc,"\fGiris Yapıldı");
//şifre kontrol edilecek fonksiyona gidilecek
}
/*******************************************/
}
}
}
Yorumlar
Yorum Gönder