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