CCS C Ornek Sayfa 1

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 8

12.

Blm
TU TAKIMI (KEYPAD) UYGULAMALARI
Tu Takm (Keypad) Hakknda Bilgi Tu Takm Uygulamas-1 74C922 Tu Takm Enkoder Entegresi Tu Takm Uygulamas-2 (74C922 le)
Bu blmde tu takm dier ifade ile keypad-klavye hakknda bilgiler verilmitir. Bu bilgiler uygulamalar ile pratie dklmtr. Blmde ilk bata program komutlar ile bir tu takm tarama ilemleri ve uygulamalar incelenmitir. Ayrca 74C922 tu takm enkoder entegresi tantlm ve bu entegre ile bir uygulama gerekletirilmitir.

12.1. TU TAKIMI (KEYPAD) HAKKINDA B LG


Kontrol sistemlerinde d dnyadan insanlar tarafndan veri girileri genellikle tu takm (keypad-klavye) ile yaplr. Tu takm butonlarla gerekletirilebilecei gibi eitli hazr tu takmlar piyasada bulunmaktadr. Tu takm isimlendirmelerinde ilk say stun, ikinci say ise satr saysn belirtir. rnein 4x3lk bir keypad, 4 stun ve 3 satrdr.

ekil-12.1. 4x4 Tu takm.

ekil-12.2. 4x3 Tu takm.

320

CCS C le PIC Programlama

Tu takmnda hangi tua basldn bulmak iin eitli yntemler kullanlabilir. Bu yntemlerden biri tarama yntemidir. ekil-12.3.de butonlarla yaplm 4x4 tu takm grlmektedir. Butonlarn bir ucu satr ksmna, bir ucu da stun ksmna baldr. Denetleyici ile tarama yaplrken satrlar k, stunlar ise giri olarak tanmlanr.

ekil-12.3. Butonlarla yaplm 4x4 tu takm.


Stunlarda hep lojik-0 (GND-ase) vardr. Hangi tua basldn anlamak iin nce satrlardan biri lojik-1 dierleri lojik-0 yaplr. Sonra stunlar okunur, hangi giri lojik-1 ise o satra ait stundaki tua baslm demektir. stenen tua hangi deerin verilecei programcya aittir. ekil-12.3teki balantda 1. satr lojik-1 dier satrlar lojik-0 iken, 1.satrda 3 numaral tua basldnda 3.stunda lojik-1 bilgisi okunur. Bylece baslan tu bulunabilir. Tabi ki 1.satrda deil de dier satrlardaki tulara baslmsa alglama yaplamaz. Bu nedenle 1.satrdan sonra sra ile bir satr lojik-1, dier satrlar lojik-0 yaplarak tm stunlar okunur. Bahsedilen tarama ilemi bu ekilde yaplmaktadr. Tablo-12.1de, ekil-12.3teki tu takmna gre uyarlanm tarama bilgileri verilmitir. Butona basldnda ve brakldnda bir ark (parazit) meydana gelir. Buna tu sramas da (key debounce) denilir. Tu sramas butona bir kez basld halde butona birden fazla baslm ve ekilmi gibi durum yaratr. ekil-12.4te rnek bir tu sramas grlmektedir. Bu sramay nlemek iin programda gerekli nlemler alnmaldr. Tedbir olarak butona basldktan sonra 15-20 msn gecikme verilmesi gerekir veya butondan el ekilene kadar iinden klmayacak bir dng kurulmaldr. Ayrca tu takmnda ayn anda iki tua birden baslabilir. Bu gibi durumlarda hangi tuun geerli olaca programla belirtilerek istenmeyen durumlar nlenmelidir.

ekil-12.4. Tu baslp braklmasnda oluan parazit.

12. BLM: Tu Takm (Keypad) Uygulamalar


Satrlar 4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 Stunlar 4 3 2 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 Baslan Tu

321

1 2 3 A 4 5 6 B 7 8 9 C *, E 0 #, F D

Tablo-12.1. Tu takm tarama bilgileri.

12.2. TU TAKIMI UYGULAMASI-1


Benzetim: PROTEUS-ISIS Deneme Kart: PIC PROG/DEKA V5 Bu uygulamada butonlarla yaplm 4x4 bir tu takm uygulamas yaplmtr. Tu takm D portuna balanmtr. B portunda RB0, RB1, RB2 ve RB3 pinlerine LED balanmtr. Tu takmndan baslan tularn ikili karlklar LEDlerde gsterilmektedir. Tu takm iin programda bir fonksiyon yazlmtr. Programda tu takmnda bir tua basldktan sonra tuun deeri B portuna bal LEDlerde grnecektir. Programda her satr srayla lojik-1 yaplm ve ardndan stun girileri kontrol edilmitir. Hangi stun lojik-1 ise o stundaki butona baslm demektir. rnein 2. satr lojik-1 yapldnda, 2. stun girii lojik-1 ise 5 tuuna baslm demektir. Programda yaplan fonksiyonda tarama sonucu baslan tu deeri tus deikenine aktarlmtr. tus deikeni kullanlarak elde edilen sonu istenen ekilde kullanlr. Programda tu takmnda birden fazla tua baslmas iin gerekli nlem alnmamtr. stenirse bu gibi durumlarda baslan en son tuun geerli olmas veya ilk baslan tutan el kalkana kadar, dier baslan tularn geerli olmamas salanabilir. stenen amaca gre program deitirilebilir.

322

CCS C le PIC Programlama

ekil-12.5. Tu takm uygulamas-1 devre emas.


Devre program;
/****************************************************************** PIC16F877 ile Tu Takm Uygulamas-1 PIC PROG/DEKA V5 :Port B seme anahtar LEDleri seme konumunda ******************************************************************/ #include <16f877.h> // Kullanlacak denetleyicinin balk // dosyas tantlyor. // Denetleyici konfigrasyon ayarlar #fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD #use delay (clock=4000000) // Gecikme fonksiyonu iin kullanlacak // osilatr frekans belirtiliyor. #use fast_io(b) //Port ynlendirme komutlar B portu iin geerli #use fast_io(d) //Port ynlendirme komutlar C portu iin geerli #byte #define #define #define #define #define #define #define #define portb=0x06 sut1 sut2 sut3 sut4 sat1 sat2 sat3 sat4 pin_d0 pin_d1 pin_d2 pin_d3 pin_d4 pin_d5 pin_d6 pin_d7 // B portu "portb" kelimesine eitleniyor. // // // // // // // // sut1 sut2 sut3 sut3 sat1 sat2 sat3 sat4 ifadesi ifadesi ifadesi ifadesi ifadesi ifadesi ifadesi ifadesi pin_d0 pin_d1 pin_d2 pin_d2 pin_d4 pin_d5 pin_d6 pin_d7 ifadesine ifadesine ifadesine ifadesine ifadesine ifadesine ifadesine ifadesine eitleniyor eitleniyor eitleniyor eitleniyor eitleniyor eitleniyor eitleniyor eitleniyor

char tus=0; // karakter tipinde deiken tanmlanyor

12. BLM: Tu Takm (Keypad) Uygulamalar


//*********** Keypad Tarama Fonksiyonu ********* char keypad_oku() // Fonksiyon ismi { output_d(0x00); // D portu k sfrlanyor output_high(sat1); // 1. satr lojik-1 yaplyor if (input(sut1)) // 1. stun okunuyor { delay_ms(20); tus=1; } if (input(sut2)) // 2. stun okunuyor { delay_ms(20); tus=2; } if (input(sut3)) // 3. stun okunuyor { delay_ms(20); tus=3; } if (input(sut4)) // 4. stun okunuyor { delay_ms(20); tus=0xA; } output_low(sat1); // 1. satr lojik-0 yaplyor output_high(sat2); // 2. satr lojik-1 yaplyor if (input(sut1)) // 1. stun okunuyor { delay_ms(20); tus=4; } if (input(sut2)) // 2. stun okunuyor { delay_ms(20); tus=5; } if (input(sut3)) // 3. stun okunuyor { delay_ms(20); tus=6; } if (input(sut4)) // 4. stun okunuyor { delay_ms(20); tus=0xB; } output_low(sat2); // 2. satr lojik-0 yaplyor output_high(sat3); // 3. satr lojik-1 yaplyor if (input(sut1)) // 1. stun okunuyor { delay_ms(20); tus=7; } if (input(sut2)) // 2. stun okunuyor { delay_ms(20); tus=8; } if (input(sut3)) // 3. stun okunuyor { delay_ms(20); tus=9; } if (input(sut4)) // 4. stun okunuyor {delay_ms(20); tus=0x0C; } output_low(sat3); // 3. satr lojik-0 yaplyor output_high(sat4); // 3. satr lojik-1 yaplyor if (input(sut1)) // 1. stun okunuyor { delay_ms(20); tus=0xE; } if (input(sut2)) // 2. stun okunuyor { delay_ms(20); tus=0; } if (input(sut3)) // 3. stun okunuyor { delay_ms(20); tus=0xF; } if (input(sut4)) // 4. stun okunuyor {delay_ms(20); tus=0xD; } output_low(sat4); // 3. satr lojik-0 yaplyor return tus; // Fonksiyon "tus" deeri ile geri dner }

323

324

CCS C le PIC Programlama

/********* ANA PROGRAM FONKS YONU********/ void main ( ) { setup_psp(PSP_DISABLED); // PSP birimi devre d setup_timer_1(T1_DISABLED); // T1 zamanlaycs devre d setup_timer_2(T2_DISABLED,0,1); // T2 zamanlaycs devre d setup_adc_ports(NO_ANALOGS); // ANALOG giri yok setup_adc(ADC_OFF); // ADC birimi devre d setup_CCP1(CCP_OFF); // CCP1 birimi devre d setup_CCP2(CCP_OFF); // CCP2 birimi devre d set_tris_b(0x00); // B portu komple k set_tris_d(0x0F); // D portunun Yksek deerlikli 4 bit k, // dk deerlikli 4 bit giri output_b(0x00); // lk anda B portu k sfrlanyor

while(1) // Sonsuz dng { portb=keypad_oku(); // Baslan tu deerini B portuna aktar } } //****************************************************************** Programda #byte portb=0x06 komutu ile B portunun adresi (0x06) portb ifadesine eitlenmitir. Yani bu komuttan sonra artk portb ifadesi direkt olarak B portu deerini temsil etmektedir. Programda #define sut1 pin_d0 komutu ile sut1 ifadesi pin_d0a yani RD0 pinine eitlenmitir. Dier stun ve satr ifadeleri

de D portunun ilgili pinlerine ayn ekilde eitlenmitir.


char tus=0; komutu ile karakter tipinde tus isminde deiken tanmlanm ve

ilk deer olarak sfr (0) verilmitir. Tu takm tarama fonksiyonu olarak char keypad_oku() komutu ile keypad_oku() isminde fonksiyon tanmlanmtr. Fonksiyonun bandaki char ifadesi, fonksiyonun geri dn deeri olduunu ve bu deerin karakter tipinde olduunu belirtir. Fonksiyonda ilk bata output_d(0x00); komutu ile D portuna bal stunlarn hepsi lojik-0 yaplmtr. Daha sonra output_high(sat1); komutuyla srayla her satr lojik-1 yaplm ve if (input(sut1)) komutu ile de stun girileri okunmutur. Eer stun girii 1 olursa if fonksiyonu dngs ilem grecektir. if fonksiyonu iinde, delay_ms(20); komutu ile tu hatalarn nlemek iin bir gecikme konulmu ve ardndan tus=1; komutu ile de baslan tu deeri tus deikenine aktarlmtr. Burada tus= ifadesine istenen deer yazlarak hangi tuun neye karlk gelecei istenen ekilde deitirilir. lk satrda 4 stunun taramas ayn mantkla yapldktan sonra output_low(sat1); komutu ile 1. satr lojik-0 yaplmtr. Daha sonra ayn ilemler dier satrlar iin yaplmtr. Fonksiyonda en son olarak da return tus; komutu ile fonksiyonun tus deikeni deeri ile geri dnmesi salanmtr. Dikkat edilmesi gereken bir nokta da, fonksiyon bir geri dn deeri ierdiinden, fonksiyon tanmlarken char sutun_tara() komutunda

12. BLM: Tu Takm (Keypad) Uygulamalar

325

bata char ksm ile fonksiyonun geri dn deeri olduunu ve trnn karakter olduunu belirtmemizdir. Fonksiyonun geri dn deeri olmasayd bana void koymamz gerekirdi. Ana fonksiyondaki sonsuz dngde portb=keypad_oku(); komutu ile tu takm tarama fonksiyonu arlm ve bu fonksiyonda tu deerinin tutulduu tus deikeni deeri B portuna gnderilmitir. Tu takm tarama fonksiyonunu kendi amalarnza ve ihtiyalarnza gre deitirebilirsiniz.

12.3. 74C922 KEY ENKODER ENTEGRES


Tu tarama ilemi bir nceki uygulamada yapld gibi kullanldnda denetleyiciyi her zaman megul eder. Yani tu tarama ileminin srekli olarak yaplmas gerekmektedir. Ayn anda baka ilemlerin de yaplaca bir uygulamada bu yntem sorunlara yol aabilir. Ayn zamanda nceki uygulamada tu tarama ilemi iin 8 adet pin kullanlmaktayd, bu da port ihtiyacnn fazla olduu uygulamalarda skntya yol aabilir. Bu nedenle tu takm tarama ilemlerinde 74C922 Key Encoder gibi entegreler kullanlabilir. Bu entegre sayesinde tarama ilemi iin denetleyici tmyle megul edilmeyecek ve ayn zamanda fazla pin de kullanlmayacaktr.

ekil-12.7. 74C922 Key encoder entegresi pin diyagram.

ekil-12.8. 74C922 Entegresi genel balants.

74C922 entegresi 3V ile 15V alma gerilim aralnda alabilir. Genel besleme gerilimleri 5V, 10V ve 15Vtur. Klavye satr hatlar Y girilerine (ROW), stun hatlar ise X girilerine (COLUMN) balanr. OE entegre seme ucudur ve

326

CCS C le PIC Programlama

You might also like