4x4 tuş takımı örnek kodları varmıdır.

Başlatan Melih1802, 01 Haziran 2014, 14:12:24

Melih1802

Merhaba.


4x4 çalışan tuş takımı kodu arıyorum. Basıldığı tuşa ait numaranın ledi yanacak. Böyle bir örnek varmıdır.

Kabil ATICI

Bu olayı donanımsal olarak işlemciye fazla karıştırmadan yapmak isterseniz 74C922 diye bir entegre var. 4x4 girişi var. 4 çıkış hatt(BCD)ı+1 kesme çıkışı üretiyor. Ayrıca istersen 4 hattı çıkışı kontrolu var. 2 tane kondansatör ile (osc ve debounce) ek eleman gerektiriyor.




Tek yapman gereken veri kesmesi geldiğinde 4 çıkış ucundaki veriyi okumak.
ambar7

abstruse

#2
74-922 biraz pahalı yanlız ve ankarada bulamadı arkadaşlar bi hafta önce gerektide ist. rahat bulursun lakin 15 tlden ucuz değil.

mesaj birleştirme:: 01 Haziran 2014, 15:33:00

#int_EXT
void  EXT_kesme() 
{

 a=x;
 
}




void main()
{


  
   while(1)
   { 

output_high(PIN_C3);
if(input(PIN_c0))
{
x=1;

output_high(PIN_c7);
output_low(PIN_c7);
}
while(input(PIN_c0));
if(input(PIN_c1))
{
x=2;

output_high(PIN_c7);
output_low(PIN_c7);
}
while(input(PIN_c1));
if(input(PIN_c2))
{
x=3;

output_high(PIN_c7);
output_low(PIN_c7);
}
while(input(PIN_c2));
output_low(PIN_c3);

//--------------------------//

output_high(PIN_c4);
if(input(PIN_c0))
{
x=4;

output_high(PIN_c7);
output_low(PIN_c7);
}
while(input(PIN_c0));
if(input(PIN_c1))
{
x=5;

output_high(PIN_c7);
output_low(PIN_c7);
}
while(input(PIN_c1));
if(input(PIN_c2))
{
x=6;

output_high(PIN_c7);
output_low(PIN_c7);
}
while(input(PIN_c2));
output_low(PIN_c4);

//-------------------------------------//

output_high(PIN_c5);
if(input(PIN_c0))
{
x=7;

output_high(PIN_c7);
output_low(PIN_c7);
}
while(input(PIN_c0));
if(input(PIN_c1))
{
x=8;

output_high(PIN_c7);
output_low(PIN_c7);
}
while(input(PIN_c1));
if(input(PIN_c2))
{
x=9;

output_high(PIN_c7);
output_low(PIN_c7);
}
while(input(PIN_c2));
output_low(PIN_c5);

//-------------------------------//

output_high(PIN_c6);
if(input(PIN_c1))
{
x=0;

output_high(PIN_c7);
output_low(PIN_c7);
}
}




Buna bi gözat.  biraz basit ama ufak projelerde iş yapar denendi bende o entegreyi egale etmek için kullanmştım.

Melih1802

@ambar

Hızlı cevabın ve önerin için Teşekkür ederim. Bahsettiğin entegreyi tanıyorum. Aslında bana 5x4 matris lazımdı, fakat bu biraz sıradışı gelebilir diyerek daha standart olan 4x4 olanı sormuştum.

Yapmak istediğim
- 5x4 matris olacak
- 7 led kullanacağım
- Bir buzzer olacak
- Çift tuş basma engeli konacak
- Bu veriler ( giriş - çıkış ) Can Bus ile haberleşecek.

Bu sebeple özellikle MCU kullanmak istiyorum.



@aliemremen

İstediğim örnek buydu, şimdi bunu 5x4 yapmaya çalışacağım ve her tuş için bir "o" tuşa karşılık bir ledi yakacağım.

Teşekkürler.


Başka örnekler varsa benim için yeni bir konuda daha çok fikir sahibi olmam için iyi olur.

Kabil ATICI

Öyle sorsaydınız size 74C923 derdim. Bu entegerede 5 veri hattı+1 kesme hattı şeklinde  çıkışı var. Tuş taraması olarak 4x5 şeklinde...
ambar7

Melih1802

Alıntı yapılan: ambar7 - 01 Haziran 2014, 16:21:41
Öyle sorsaydınız size 74C923 derdim. Bu entegerede 5 veri hattı+1 kesme hattı şeklinde  çıkışı var. Tuş taraması olarak 4x5 şeklinde...

Çok cazip.

Erol YILMAZ

Devrede Mcu varken 923 fln kullanmanin ne anlami var?
Ucuz bi malzeme de değilmiş..

Melih1802

Yukarıda @aliemremen verdiği kodları alarak derleyiciye yapıştırdım. Fakat çözemediğim bir hata aldım. neyi yanlış yapmışım.


vitruvius

18. satırın başına "#" koymamışsınız. integer bir değişken tanımlar gibi olmuş, dolayısıyla tanım sonunda ";" arıyor derleyici.

Melih1802

#9


#  ekledim fakat bu sefer bunu verdi.

vitruvius

Ext kesme'yi void main dışında tanımlayarak dener misiniz? a ile x'i de tanımlamayı ihmal etmeyin.

Melih1802

Yazdığını yapmaya çalıştım fakat muhtemel ben bir yerde hata yaptım. Derleyici yine hata verdi.
Rica etsem el atabilirmisin.



#include "C:\Users\melih\Desktop\CCS C Çalışmaları\Tuş takımı\Tus Takımı.h"

#int_EXT
void  EXT_kesme()

void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
//Setup_Oscillator parameter not selected from Intr Oscillotar Config tab



{
a=x;


}




void main()
{


 
   while(1)
   {

output_high(PIN_C3);
if(input(PIN_c0))
{
x=1;

output_high(PIN_c7);
output_low(PIN_c7);
}
while(input(PIN_c0));
if(input(PIN_c1))
{
x=2;

output_high(PIN_c7);
output_low(PIN_c7);
}
while(input(PIN_c1));
if(input(PIN_c2))
{
x=3;

output_high(PIN_c7);
output_low(PIN_c7);
}
while(input(PIN_c2));
output_low(PIN_c3);

//--------------------------//

output_high(PIN_c4);
if(input(PIN_c0))
{
x=4;

output_high(PIN_c7);
output_low(PIN_c7);
}
while(input(PIN_c0));
if(input(PIN_c1))
{
x=5;

output_high(PIN_c7);
output_low(PIN_c7);
}
while(input(PIN_c1));
if(input(PIN_c2))
{
x=6;

output_high(PIN_c7);
output_low(PIN_c7);
}
while(input(PIN_c2));
output_low(PIN_c4);

//-------------------------------------//

output_high(PIN_c5);
if(input(PIN_c0))
{
x=7;

output_high(PIN_c7);
output_low(PIN_c7);
}
while(input(PIN_c0));
if(input(PIN_c1))
{
x=8;

output_high(PIN_c7);
output_low(PIN_c7);
}
while(input(PIN_c1));
if(input(PIN_c2))
{
x=9;

output_high(PIN_c7);
output_low(PIN_c7);
}
while(input(PIN_c2));
output_low(PIN_c5);

//-------------------------------//

output_high(PIN_c6);
if(input(PIN_c1))
{
x=0;

output_high(PIN_c7);
output_low(PIN_c7);
}
}

vitruvius

Kodda iki tane void main var. İkinciyi silin.

Melih1802

Sildim.

Bu sefer 21. satırda "a" üzerinde hata verdi. Düzenleyip yollamazsan Torunlarımızı göreceğiz. :)

vitruvius

Görürüz sorun değil. Direkt çözüp cevabı vermektense, yol göstermek daha çok hoşuma gidiyor =) Halbuki a ile x'i tanımlamayı unutmayın demiştim iki önceki mesajımda =(