Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

MikroC 4x4 Keypad

Başlatan Mr.Java, 29 Mart 2013, 16:39:47

Mr.Java

Arkadaşlar merhaba.Aşağıda paylaşacağım devre şemasına göre 4x4 keypad ile displayda basılan tuş ne ise yazan bir uygulama yapmak istiyorum.

İşin tuhaf kısmı ben keypad tuşlarını tanıtamadım bir türlü.
Switch key denedim yine çalıştıramadım..

Bu Boardın şematiği.. (http://issuu.com/phantaso/docs/board)

Bunlar yazdığımız fakat çalışmayan kod;

/* //////////////////////////////////////////////
 * Tarih    Mart 23, 2013, 3:53 PM              /
 * Yazar    Fatih ASLAN                         /
 * Proje    Keypad Tarama Yöntemiyle Led sürme  /
 *///////////////////////////////////////////////

#include "BoardConfig.h"
#include "delay.h"
char keypadoku();

///////////////////////////////////////////////////////////////////////////////

char keypadoku()
{
    uchar a, b, buton = 0; //Değişkenler tanımlanıyor..
    a = 0x01; //PORTB RB0 için değişken ve değeri belirlendi.
    PORTB &= 0x0F; // Portun sadece üst 4 biti sıfırlandı
    PORTB |= a; // buraya kadar PB0 'a 1 verdik

    b = PORTB & 0xF0; // ust 4 bitte ne var onu b'ye aktardık.
    if (b == 0x01 && a == 0x01) buton = 1; //Eğer RB0 1 ve RB4 1 ise buton 1;
    if (b == 0x01 && a == 0x02) buton = 2;
    if (b == 0x01 && a == 0x04) buton = 3;
    if (b == 0x01 && a == 0x08) buton = 4;

    a <<= 1; //RB1 seçiliyor ve aynı işlemler RB3 e kadar öteleniyor.
    PORTB &= 0x0F;
    PORTB |= a; // buraya kadar PB1 'a 2 verdik
    b = PORTB & 0xF0; // ust 4 bitte ne var onu b'ye aktardık
    if (b == 0x02 && a == 0x01) buton = 5;
    if (b == 0x02 && a == 0x02) buton = 6;
    if (b == 0x02 && a == 0x04) buton = 7;
    if (b == 0x02 && a == 0x08) buton = 8;

    a <<= 1; //RB1 seçiliyor ve aynı işlemler RB3 e kadar öteleniyor.
    PORTB &= 0x0F;
    PORTB |= a; // buraya kadar PB1 'a 4 verdik
    b = PORTB & 0xF0; // ust 4 bitte ne var onu b'ye aktardık
    if (b == 0x04 && a == 0x01) buton = 9;
    if (b == 0x04 && a == 0x02) buton = 10;
    if (b == 0x04 && a == 0x04) buton = 11;
    if (b == 0x04 && a == 0x08) buton = 12;

    a <<= 1; //RB1 seçiliyor ve aynı işlemler RB3 e kadar öteleniyor.
    PORTB &= 0x0F;
    PORTB |= a; // buraya kadar PB1 'a 8 verdik
    b = PORTB & 0xF0; // ust 4 bitte ne var onu b'ye aktardık
    if (b == 0x08 && a == 0x01) buton = 13;
    if (b == 0x08 && a == 0x02) buton = 14;
    if (b == 0x08 && a == 0x04) buton = 15;
    if (b == 0x08 && a == 0x08) buton = 16;

    return buton;

}

void main(void)
{
    Board_Ayar();
    TRISB = 0x0F;
    PORTB = 0x00;
    RC5 = 1;
    while (1)
    {
        PORTD = keypadoku();
        DelayMs(100);
    }
}


Buda MikroC

#include "BoardConfig.h"

unsigned short kp, cnt, oldstate = 0;


char  keypadPort at PORTB;


void main() {
  cnt = 0;
  Keypad_Init();
  Board_Ayar();
  RC5=1;

  do {
    kp = 0;


    do
      kp = Keypad_Key_Click();
    while (!kp);

    switch (kp) {


      case  1: kp = 49; break; // 1
      case  2: kp = 50; break; // 2
      case  3: kp = 51; break; // 3
      case  4: kp = 65; break; // A
      case  5: kp = 52; break; // 4
      case  6: kp = 53; break; // 5
      case  7: kp = 54; break; // 6
      case  8: kp = 66; break; // B
      case  9: kp = 55; break; // 7
      case 10: kp = 56; break; // 8
      case 11: kp = 57; break; // 9
      case 12: kp = 67; break; // C
      case 13: kp = 42; break; // *
      case 14: kp = 48; break; // 0
      case 15: kp = 35; break; // #
      case 16: kp = 68; break; // D

    }

    if (kp != oldstate) {
      cnt = 1;
      oldstate = kp;
    }
    else {
      cnt++;
    }

    PORTD = kp;

    if (cnt == 255) {
      cnt = 0;
      PORTD = cnt;
    }

    PORTD = cnt;
  } while (1);
}

Mr.Java