Tuş Takımı Uygulaması-1

AMAÇ:

Mikrodeneleyicilerin çalışma sistemini öğrenmek, C dili ile program yazabilme ve 16F877A entegresini programlayabilme yeteneğini kazanmak.

YAPILACAK İŞ:

Tuş takımında bir tuşa basıldığında tuşun değeri B portuna bağlı ledlerde görünmesi sağlanacak.

DENEYİN BAĞLANTI ŞEMASI

    PROGRAM KODU:

#include <16f877a.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#use fast_io(b) //Port yönlendirme komutları B portu için geçerli

#use fast_io(d) //Port yönlendirme komutları C portu için geçerli

#byte portb=0x06 // B portu “tus” ismine eşitleniyor.

#define sut1 pin_d0 // sut1 ifadesi pin_d0 ifadesine eşitleniyor

#define sut2 pin_d1 // sut2 ifadesi pin_d1 ifadesine eşitleniyor

#define sut3 pin_d2 // sut3 ifadesi pin_d2 ifadesine eşitleniyor

#define sut4 pin_d3 // sut3 ifadesi pin_d2 ifadesine eşitleniyor

#define sat1 pin_d4 // sat1 ifadesi pin_d4 ifadesine eşitleniyor

#define sat2 pin_d5 // sat2 ifadesi pin_d5 ifadesine eşitleniyor

#define sat3 pin_d6 // sat3 ifadesi pin_d6 ifadesine eşitleniyor

#define sat4 pin_d7 // sat4 ifadesi pin_d7 ifadesine eşitleniyor

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

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

char keypad_oku() // Fonksiyon ismi

{

output_d(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=0xA; }

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=0xB; }

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=0xE; }

if (input(sut2)) // 2. sütun okunuyor

{ delay_ms(20); tus=0; }

if (input(sut3)) // 3. sütun okunuyor

{ delay_ms(20); tus=0xF; }

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_psp(PSP_DISABLED); setup_timer_1(T1_DISABLED);

setup_timer_2(T2_DISABLED,0,1); setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF);

set_tris_b(0x00); // B portu komple çıkış

set_tris_d(0x0F); // Yüksek değerlikli 4 bit çıkış, düşük değerlikli 4 bit giriş

output_b(0x00); // İlk anda B portu çıkışı sıfırlanıyor

while(1) // Sonsuz döngü

{

portb=keypad_oku(); // Basılan tuş değerini B portuna aktar

}

}

İŞLEM BASAMAKLARI

1.Devreyi bord üzerine kurunuz.

2. Kodu yazıp derleyiniz.Hex kodunu Pice yükleyiniz.

3.Devrenin çalışmasını inceleyiniz.

CEVAP VER

Please enter your comment!
Please enter your name here