PIC İLE BASİT KLAVYE YAPIMI
PIC program örnekleri, PIC 16F877 kullanarak basit klavye yapmak. CCS C derleyicisi ve PIC kullanarak displaye sayı yazmak. Program kodları ve devre şeması. Klavye ile 0 – 8 arası sayıları yazmak.
PIC ile klavye yapımı bir dizi şeklinde olup 3 bölümden oluşmaktadır.
Bu bölümdeki uygulamamız klavye mantığı üzerine olacak. Yani gerçek bir klavye yapmayıp PIC ile klavye yapmanın mantığı ve algoritması üzerinde duracağız. Bunun için 8 button ve bir tane display’den oluşan bir devre yapacağız. Her button PIC’e bir değer gönderecek ve bu değere göre displayde 0 – 8 rakamları yazılacak. Böylece bir klavye nasıl tasarlanır, fikir sahibi olacaksınız.
Bundan sonraki uygulama daha gelişmiş bir uygulama olup LCD ekranda 0 – 9 arası rakamları ASCII kodları ile yazmaya ve lcd ekranda göstermeye dayanacaktır. Bu uygulamada tek portu 1 yaptık. 2. Uygulamada portların durumu 11000111 gibi çeşitli değerler alacak. PIC’e değerler ASCII olarak gidecek ve PIC’te okunduktan sonra LCD ekrana gönderilecek.
3. uygulama hem alfabetik hem de numerik karakterleri yazan bir klavye yapmak olacaktır. Aslında sadece bir uygulama ile alfabetik ve sayısal değerleri yazdıran klavye uygulamasını yapabilirdim ama ileri düzey bilgisi olmayan arkadaşları düşünerek konuyu temelden anlatmak ve mantığın kavranılmasını sağlamak için yazıyı üç bölümde sunuyorum. Böylece tam bir ders niteliğinde olacak.
Tabii bu arada yaptığımız klavyeler ile PIC işlemcisini bir bilgisayar gibi kullanarak çeşitli komutlar vereceğiz ve çeşitli işler yaptıracağız. PIC’e verdiğimiz komutların sonucunu LCD ekranlarda gözleyeceğiz. Bu 3. Bölümden sonra olacak. Böylece bir bilgisayarın nasıl çalıştığı hakkında iyi bir bilgiye sahip olacaksınız.
Bir işlemciyi kontrol etme mantığının ilk aşaması bu işlemciye komut vereceğimiz bir klavyenin olmasıdır. Mikroişlemciye klavye takarak bir ekranda alfa – numerik karakterler ve resimler göstermek, bilgisayar, algoritma ve işlemci çalışmasını daha yakından takip etmemizi ve daha rahat kontrol etmemizi sağlayacaktır. Bu işlemlerin bize faydası algoritmik yapımızı geliştirir ve mikroişlemcilere hakim olmamızı sağlar.
Uygulamada önce aşağıdaki şemada görüldüğü gibi bir devre kuruyoruz.

Program mantığı b portlarını toplu biçimde okuyarak ondalık sayıya dönüştürüyoruz ve bu ondalık sayıya göre lcd ekranımıza sayılar gönderiyoruz. Bir sonraki örnekte alfabetik karakterlerin tamamı ile 0 – 9 arası rakamları yazdırma konusunu ele alacağız. Bu konu linki sayfa sonunda yer alacaktır.
Daha sonra CCS PIC editör ve derleyicisinde kodları yazıyoruz.
Önce bir portred() fonksiyonu ile B ayaklarından gelen değerleri okuyoruz. Burada değerleri "input(PIN_B0)" şeklinde okumadık. İnput_b(..) şeklinde okuduk ki bu, B ayaklarının tamamını okunarak oradaki ikili değere göre sonuç üretir. Bu mantık daha sonra gelişmiş klavye yaparken ASCII karakterlerinde işimize yarayacak.
Program mantığına gelince program "portred()" fonksiyonunda PIC in B ayaklarını okuyor. Bu ayaklardaki ikili değere göre bir sayı üretiyor. Ana gövdede bu fonksiyon çağrılarak portread() fonksiyonunda okuduğu değere göre PIC’in d ayaklarına bir ikili veri gönderiyor. Bu ikili veride displayde uygun sayılara dönüşüyor.
CSS C kodları aşağıdadır. LCD ekran ile alfa – numeric kodlar yazan klavye uygulamasının linki aşağıdadır.
Kolay gelsin.
Tüm kodlar.
#include <16F877A.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
int portread();
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);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);
set_tris_b(0x00);
set_tris_a(0xFF);
output_b(0x00);
output_a(0x00);
int deger=0;
while(TRUE)
{
deger=portread();
if(deger==1)
{
output_d(0b00000001);
}
else if(deger==2)
{
output_d(0b00000010);
}
else if(deger==3)
{
output_d(0b00000011);
}
else if(deger==4)
{
output_d(0b00000100);
}
else if(deger==5)
{
output_d(0b00000101);
}
else if(deger==6)
{
output_d(0b00000110);
}
else if(deger==7)
{
output_d(0b00000111);
}
else if(deger==8)
{
output_d(0b00001000);
}
else
{
output_d(0b00000000);
}
}
}
int portread()
{
int sayi=0;
if(input_b()==0b00000001)
{
sayi = 1;
}
if(input_b()==0b00000010)
{
sayi = 2;
}
if(input_b()==0b00000100)
{
sayi = 3;
}
if(input_b()==0b00001000)
{
sayi = 4;
}
if(input_b()==0b00010000)
{
sayi = 5;
}
if(input_b()==0b00100000)
{
sayi = 6;
}
if(input_b()==0b01000000)
{
sayi = 7;
}
if(input_b()==0b10000000)
{
sayi = 8;
}
return sayi;
}
Aşağıdaki örnekte LCD ekrana ASCII kodları kullanılarak 0 - 9 arası rakamlar yazdırılmaktadır.
PIC16F877 İle Sayısal Klavye Yapımı
Çoklu PIC Kullanımı
PIC 16F877 İle Alfa - Numerik Klavye Yapımı
SANATSAL BİLGİ
10/03/2019