Keypad ile Şifreli Giriş Uygulaması
Merhaba arkadaşlar, bu yazımızda Trudyo Geliştirme Kartı ile 2×16 Karakter LCD ekran ve 4×4 Keypad kullanarak şifreli giriş uygulaması yapacağız. Her tuşa basıldığında Buzzer Kartı ile ses üreteceğiz. Aynı zamanda, doğru veya yanlış şifre girilmesi durumunda sesli uyarı verilmesini sağlayacağız.
Keypad Hakkında Kısa Bir Bilgi
Keypad, birden fazla butonun seri ve paralel olarak bağlantısı ile oluşturulmuş ve arka yüzeyi yapışkan özelliğe sahip bir tuş takımıdır. Bu özelliği sayesinde projelerinizde (şifreli giriş, hesap makinesi, menü kontrolü…vs) kolaylıkla kullanabilirsiniz.
Keypad pinleri ve bu pinlerin fonksiyonlarını aşağıdaki tablo üzerinden inceleyebilirsiniz.
Pin No | İsim | Açıklama |
1 | R1 | 1. Satır bağlantı pini. |
2 | R2 | 2. Satır bağlantı pini. |
3 | R3 | 3. Satır bağlantı pini. |
4 | R4 | 4. Satır bağlantı pini. |
5 | C1 | 1. Sütun bağlantı pini. |
6 | C2 | 2. Sütun bağlantı pini. |
7 | C3 | 3. Sütun bağlantı pini. |
8 | C4 | 4. Sütun bağlantı pini. (4×3 Keypad’lerde bulunmamaktadır.) |
Keypad, Buzzer Kartı, LCD ve Trudyo Geliştirme Kartı Bağlantısı
Yukarıda görüldüğü üzere 4×4 Keypad B portu pinlerine bağlanmıştır. 2×16 Karakter LCD Ekran ise Trudyo Geliştirme Kartı’nın D portuna bağlanmıştır. E1 pinine bağlanan Buzzer Kartı ile ses sinyali üretilecektir. Ayrıca haricen eklenmiş bir 10K Ohm değerinde potansiyometre ile LCD ekranın kontrast ayarı yapılabilmektedir.
Bu Uygulamada Kullanılan Malzemeler
Trudyo Geliştirme Kartı
Buzzer Kartı
Başlamadan Önce
2×16 LCD Ekran Kullanımı
2×16 karakter LCD ekran kullanımı hakkında ayrıntılı bilgi ve örnek uygulamayı incelemek için daha önce yayınlanan “2×16 LCD Ekran Kullanımı” yazımızı okuyabilirsiniz.
Trudyo Konfigürasyon Ayarları
Trudyo Geliştirme Kartı ile programlama yapabilmek için kartınızın konfigürasyon ayarlarını yapmanız gerekmektedir. Gerekli konfigürasyon ayarlarını yapmak için “Trudyo Konfigürasyon Ayarları” yazımızı okuyabilirsiniz.
Keypad ile Şifreli Giriş Uygulama Kodları
// Connections
sbit KEYPAD_ROW_1 at LATB0_bit;
sbit KEYPAD_ROW_2 at LATB1_bit;
sbit KEYPAD_ROW_3 at LATB2_bit;
sbit KEYPAD_ROW_4 at LATB3_bit;
sbit KEYPAD_COL_1 at RB4_bit;
sbit KEYPAD_COL_2 at RB5_bit;
sbit KEYPAD_COL_3 at RB6_bit;
sbit KEYPAD_COL_4 at RB7_bit;
sbit KEYPAD_ROW_1_Direction at TRISB0_bit;
sbit KEYPAD_ROW_2_Direction at TRISB1_bit;
sbit KEYPAD_ROW_3_Direction at TRISB2_bit;
sbit KEYPAD_ROW_4_Direction at TRISB3_bit;
sbit KEYPAD_COL_1_Direction at TRISB4_bit;
sbit KEYPAD_COL_2_Direction at TRISB5_bit;
sbit KEYPAD_COL_3_Direction at TRISB6_bit;
sbit KEYPAD_COL_4_Direction at TRISB7_bit;
#include "keypad.c"
// Connections
sbit LED at LATA4_bit;
sbit BUZZER at LATE1_bit;
// LCD module connections
sbit LCD_RS at LATD0_bit;
sbit LCD_EN at LATD1_bit;
sbit LCD_D4 at LATD2_bit;
sbit LCD_D5 at LATD3_bit;
sbit LCD_D6 at LATD4_bit;
sbit LCD_D7 at LATD5_bit;
sbit LCD_RS_Direction at TRISD0_bit;
sbit LCD_EN_Direction at TRISD1_bit;
sbit LCD_D7_Direction at TRISD2_bit;
sbit LCD_D6_Direction at TRISD3_bit;
sbit LCD_D5_Direction at TRISD4_bit;
sbit LCD_D4_Direction at TRISD5_bit;
// Global Degisken Tanimlamalari
char key;
unsigned short isPasswordPanelActive=0;
unsigned int password;
unsigned short keyCount=0;
// Tusa Basma Uyari Sesi
void Beep(unsigned int time){
BUZZER=1;
vdelay_ms(time);
BUZZER=0;
}
// Hatali Sifre Uyari Sesi
void FailedBeep(){
Beep(50);
delay_ms(50);
Beep(50);
delay_ms(50);
Beep(50);
delay_ms(50);
}
void main() {
TRISA=0b00000000;// [][][][LED][][][][]
TRISB=0b00000000;// [][][][][][][][]
TRISC=0b00000000;// [][][][][][][][]
TRISD=0b00000000;// [][][LCD_D7][LCD_D6][LCD_D5][LCD_D4][LCD_EN][LCD_RS]
TRISE=0b00000000;// [][][][][][][BUZZER][]
// Tum portlari lojik-0 yap
LATA=0x00;
LATB=0x00;
LATC=0x00;
LATD=0x00;
LATE=0x00;
// B portu dijital cikis olarak ayarlama
ANSELB=0x00; // PIC18F45K50 icin
//ADCON1 = 0x0F; // PIC18F4550 icin
Lcd_Init(); // LCD ekrani hazirla
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor'u kapat
Lcd_Cmd(_LCD_CLEAR); // Ekrani temizle
InitKeypad(); // Keypad'i hazirla
Lcd_Out(1,1,"SIFRE GIRIS ICIN");
Lcd_Out(2,1," * TUSUNA BASIN ");
while(1){
key=GetKeypadChar(); // Keypad'de basilan tus verisini al
if(key){ // Bir tusa basilmis mi?
Beep(10); // 10ms lik ses cikisi
switch(key){
case '*': // * tusuna basildi ise
isPasswordPanelActive=1; // Sifre girme panelini aktif et
password=0;
keyCount=0;
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1," TRUDYO A1.BLOK ");
Lcd_Out(2,1," SIFRE:**** ");
Lcd_Out(2,1," SIFRE:");
break;
case '#': // # tusuna basildi ise
isPasswordPanelActive=0; // Sifre girme panelini pasif et
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,"SIFRE GIRIS ICIN");
Lcd_Out(2,1," * TUSUNA BASIN ");
break;
case '0': // 0 tusuna basildi ise
if(isPasswordPanelActive){
password*=10;
password+=0;
keyCount++;
Lcd_Chr_CP(key);
}
break;
case '1': // 1 tusuna basildi ise
if(isPasswordPanelActive){
password*=10;
password+=1;
keyCount++;
Lcd_Chr_CP(key);
}
break;
case '2': // 2 tusuna basildi ise
if(isPasswordPanelActive){
password*=10;
password+=2;
keyCount++;
Lcd_Chr_CP(key);
}
break;
case '3': // 3 tusuna basildi ise
if(isPasswordPanelActive){
password*=10;
password+=3;
keyCount++;
Lcd_Chr_CP(key);
}
break;
case '4': // 4 tusuna basildi ise
if(isPasswordPanelActive){
password*=10;
password+=4;
keyCount++;
Lcd_Chr_CP(key);
}
break;
case '5': // 5 tusuna basildi ise
if(isPasswordPanelActive){
password*=10;
password+=5;
keyCount++;
Lcd_Chr_CP(key);
}
break;
case '6': // 6 tusuna basildi ise
if(isPasswordPanelActive){
password*=10;
password+=6;
keyCount++;
Lcd_Chr_CP(key);
}
break;
case '7': // 7 tusuna basildi ise
if(isPasswordPanelActive){
password*=10;
password+=7;
keyCount++;
Lcd_Chr_CP(key);
}
break;
case '8': // 8 tusuna basildi ise
if(isPasswordPanelActive){
password*=10;
password+=8;
keyCount++;
Lcd_Chr_CP(key);
}
break;
case '9': // 9 tusuna basildi ise
if(isPasswordPanelActive){
password*=10;
password+=9;
keyCount++;
Lcd_Chr_CP(key);
}
break;
}
if(isPasswordPanelActive){ // Eger sifre paneli aktif ise
if(keyCount>=4){ // 4 adet rakam girildi mi?
if(password==2023){ // Eger girilen sifre 2023 ise giris basarili
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1," ");
Lcd_Out(2,1," GIRIS BASARILI ");
Beep(1000);
}
else FailedBeep(); // Degilse sesli hata uyarisi
// Ekrani sifirla
isPasswordPanelActive=0;
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,"SIFRE GIRIS ICIN");
Lcd_Out(2,1," * TUSUNA BASIN ");
}
}
while(GetKeypadChar()); // Hala bir tusa basili ise bekle
}
}
}
keypad.c
/******************************************************************************/
/** **/
/** TRUDYO KEYPAD LIBRARY **/
/** **/
/******************************************************************************/
void ClearRows(){
KEYPAD_ROW_1=0;
KEYPAD_ROW_2=0;
KEYPAD_ROW_3=0;
KEYPAD_ROW_4=0;
}
void InitKeypad(){
// Rows -> Output
KEYPAD_ROW_1_Direction = 0;
KEYPAD_ROW_2_Direction = 0;
KEYPAD_ROW_3_Direction = 0;
KEYPAD_ROW_4_Direction = 0;
// Cols -> Input
KEYPAD_COL_1_Direction = 1;
KEYPAD_COL_2_Direction = 1;
KEYPAD_COL_3_Direction = 1;
KEYPAD_COL_4_Direction = 1;
// Clear Outputs
ClearRows();
}
char GetKeypadChar(){
// Check Row 1
ClearRows(); // Clear Outputs
KEYPAD_ROW_1=1;
delay_ms(10);
if(KEYPAD_COL_1) return '1';
else if(KEYPAD_COL_2) return '2';
else if(KEYPAD_COL_3) return '3';
else if(KEYPAD_COL_4) return 'A';
// Check Row 2
ClearRows(); // Clear Outputs
KEYPAD_ROW_2=1;
delay_ms(10);
if(KEYPAD_COL_1) return '4';
else if(KEYPAD_COL_2) return '5';
else if(KEYPAD_COL_3) return '6';
else if(KEYPAD_COL_4) return 'B';
// Check Row 3
ClearRows(); // Clear Outputs
KEYPAD_ROW_3=1;
delay_ms(10);
if(KEYPAD_COL_1) return '7';
else if(KEYPAD_COL_2) return '8';
else if(KEYPAD_COL_3) return '9';
else if(KEYPAD_COL_4) return 'C';
// Check Row 4
ClearRows(); // Clear Outputs
KEYPAD_ROW_4=1;
delay_ms(10);
if(KEYPAD_COL_1) return '*';
else if(KEYPAD_COL_2) return '0';
else if(KEYPAD_COL_3) return '#';
else if(KEYPAD_COL_4) return 'D';
return 0;
}
Uygulamaya ait dosyaları buraya tıklayarak indirebilirsiniz. Merak ettiğiniz ve aklınıza takılan soruları aşağıda 👇 yorum olarak bize iletebilirsiniz. İyi çalışmalar. 🙂 #geliştirmeyebaşla
Yorum yapmak için giriş yapmalısınız.