Ana Sayfa PIC|ULAK PIC|ULAK ile Keypad Uygulaması

PIC|ULAK ile Keypad Uygulaması

10 min read
0
0
604

Merhaba Arkadaşlar,

Bu yazımızda, MekatronikLAB firmasının üretmiş olduğu  PIC mikrodenetleyiciler ile proje geliştirme kiti PIC|ULAK ile keypad(tuş takımı) uygulamasını gerçekleştirdik.

Tuş takımı hakkında bilgi verecek olursak, kontrol sistemlerinde dış dünyadan insanlar tarafından veri girişleri genellikle tuş takımı (keypad-klavye) ile yapılır. Tuş takımı butonlarla gerçekleştirilebileceği gibi çeşitli hazır tuş takımları piyasada bulunmaktadır. Tuş takımı isimlendirmelerinde ilk sayı sütun, ikinci sayı ise satır sayısını belirtir. Örneğin 4×3’lük bir keypad, 4 sütun ve 3 satırdır. Tuş takımında hangi tuşa basıldığını bulmak için çeşitli yöntemler kullanılabilir. Bu yöntemlerden biri tarama yöntemidir. Butonların bir ucu satır kısmına, bir ucu da sütun kısmına bağlıdır. Denetleyici ile tarama yapılırken satırlar çıkış, sütunlar ise giriş olarak tanımlanır.

Sütunlarda hep lojik-0 (GND-şase) vardır. Hangi tuşa basıldığını anlamak için önce satırlardan biri lojik-1 diğerleri lojik-0 yapılır. Sonra sütunlar okunur, hangi giriş lojik-1 ise o satıra ait sütundaki tuşa basılmış demektir. İstenen tuşa hangi değerin verileceği programcıya aittir. Butona basıldığında ve bırakıldığında bir ark (parazit) meydana gelir. Buna tuş sıçraması da (key debounce) denilir. Tuş sıçraması butona bir kez basıldığı halde butona birden fazla basılmış ve çekilmiş gibi durum yaratır.Bu sıçramayı önlemek için programda gerekli önlemler alınmalıdır. Tedbir olarak butona basıldıktan sonra 15-20 msn gecikme verilmesi gerekir veya butondan el çekilene kadar içinden çıkılmayacak bir döngü kurulmalıdır.

Malzemeler

  • pic|ulak
  • 4*10k direnç
  • 4*330Ω direnç
  • 4*4 keypad
  • 4*20 lcd

Bağlantı  Şeması

??????????????????????????????

 

CCS C Kodları


#include <18f2550.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4M) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
#use fast_io(b) //Port yönlendirme komutları B portu için geçerli
#define use_portb_lcd TRUE // LCD B portuna bağlı
#include <lcd420.c> // lcd.c dosyası tanıtılıyor

#define sut1 pin_a0 // sut1 ifadesi pin_d0 ifadesine eşitleniyor
#define sut2 pin_a1 // sut2 ifadesi pin_d1 ifadesine eşitleniyor
#define sut3 pin_a2 // sut3 ifadesi pin_d2 ifadesine eşitleniyor
#define sut4 pin_a3 // sut3 ifadesi pin_d2 ifadesine eşitleniyor

#define sat1 pin_c1 // sat1 ifadesi pin_d4 ifadesine eşitleniyor
#define sat2 pin_c0 // sat2 ifadesi pin_d5 ifadesine eşitleniyor
#define sat3 pin_a5 // sat3 ifadesi pin_d6 ifadesine eşitleniyor
#define sat4 pin_a4 // sat4 ifadesi pin_d7 ifadesine eşitleniyor

char tus=0; // karakter tipinde değişken tanımlanıyor

//*********** Keypad Tarama Fonksiyonu *********

char keypad() // Fonksiyon ismi
{
output_a(0x00); // D portu çıkışı sıfırlanıyor

output_high(sat1); // 1. satır lojik-1 yapılıyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=1; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=2; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=3; }
if (input(sut4)) // 4. sütun okunuyor
{ delay_ms(20); tus=0x0A; }
output_low(sat1); // 1. satır lojik-0 yapılıyor

output_high(sat2); // 2. satır lojik-1 yapılıyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=4; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=5; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=6; }
if (input(sut4)) // 4. sütun okunuyor
{ delay_ms(20); tus=0x0B; }
output_low(sat2); // 2. satır lojik-0 yapılıyor

output_high(sat3); // 3. satır lojik-1 yapılıyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=7; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=8; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=9; }
if (input(sut4)) // 4. sütun okunuyor
{delay_ms(20); tus=0x0C; }
output_low(sat3); // 3. satır lojik-0 yapılıyor

output_high(sat4); // 3. satır lojik-1 yapılıyor
if (input(sut1)) // 1. sütun okunuyor
{ delay_ms(20); tus=0x0F; }
if (input(sut2)) // 2. sütun okunuyor
{ delay_ms(20); tus=0; }
if (input(sut3)) // 3. sütun okunuyor
{ delay_ms(20); tus=0x0E; }
if (input(sut4)) // 4. sütun okunuyor
{delay_ms(20); tus=0xD; }
output_low(sat4); // 3. satır lojik-0 yapılıyor

return tus; // Fonksiyon "tus" değeri ile geri döner
}

//********** ANA PROGRAM FONKSİYONU*******

void main ( )
{

setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok
setup_adc(ADC_OFF); // ADC birimi devre dışı

set_tris_b(0x00); // B portu komple çıkış
set_tris_a(0xF0); // Yüksek değerlikli 4 bit çıkış, düşük değerlikli 4 bit giriş

lcd_init(); // LCD hazırlanıyor
printf(lcd_putc,"\f PICULAK ");
printf(lcd_putc,"\n KEYPAD UYGULAMASI ");
printf(lcd_putc,"\n ROBOTURKA ");
printf(lcd_putc,"\n MEKATRONIKLAB ");
delay_ms(500);

printf(lcd_putc,"\f BASILAN TUS=>"); // LCD'ye string yazdırılıyor
printf(lcd_putc,"\n\n ROBOTURKA ");
printf(lcd_putc,"\n MEKATRONIKLAB ");

while(1) // Sonsuz döngü
{
lcd_gotoxy(14,1);

if (keypad()>9) // Eğer basılan tuş değeri 9'dan büyük ise
printf(lcd_putc,"%d",keypad()); // Tuş değeri LCD'ye yazdırılıyor

else // Eğer basılan tuş değeri 9'dan büyük değilse
printf(lcd_putc,"%d ",keypad());// Tuş değeri LCD'ye yazdırılıyor

}

}

Devrenin Çalışma Videosu

Buna Benzer Yazılar Göster !
Daha Fazlasını Yükle - Sinan Sözügüzel
Daha Fazla Göster -  PIC|ULAK

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bak Bakalım ?

PIC|ULAK ile Gece Lambası

Merhaba arkadaşlar, Bu yazımızda, MekatronikLAB firmasının üretmiş olduğu  PIC mikrodenetl…