//
Copyright (C) 2015 Durali Kiraz
//
PIC16F877A için hazırlandı.
#include
<pic14regs.h>
typedef
unsigned short int uint16_t;
//sigorta
tanımlarımızı yapıyoruz.
__code
uint16_t __at _CONFIG __configword =
_FOSC_XT
&&
_WDT_OFF
&&
_BOREN_OFF
&&
_LVP_OFF
;
//
Bu ms_bekle 168877a 4 Mhz frekansı için ayarlanmış bir
fonksiyondur
void
ms_bekle(uint16_t milisaniye)
{
uint16_t
i,j;
for
(i = 0; i < milisaniye; i++)
{
//
Döngüde optimizasyon için bu asm komutu eklenmiştir.
for
(j=0; j < 46; j++)
__asm
nop __endasm;
}
}
//
.gfedcba Görünen
const
unsigned char segment[]={ 0x3F, // 00111111 0
0x06, // 00000110 1
0x5B, //
01011011 2
0x4F, //
01001111 3
0x66, //
01100110 4
0x6D, //
01101101 5
0x7C, //
01111100 6
0x07, //
00000111 7
0x7F, //
01111111 8
0x6F //
01101111 9
};
void
sayi_goster(char i) // Sayı göstermeye yarayan fonksiyon
{
PORTC
= 0x02; //PORTC'de 2 değeri gönderiliyor 10
PORTB
= segment[i/10]; //i'nin 10'a bölümü gösteriliyor
ms_bekle(10); //10ms
bekleniyor
PORTC
= 0x01; //PORTC'de 1 değeri gönderiliyor 01
PORTB
= segment[i%10]; //i'nin 10'a bölümünden kalanı gösteriliyor
ms_bekle(10); //10ms
bekleniyor
}
void
main(void)
{
int
i = 0; // Herhangi bir değişken tanımlanıyor
ADCON1
= 0x07; // PORTA dijital yapılıyor
TRISA
= 0x03; // PORTA'nın ilk iki pini giriş
TRISB
= 0x00; // PORTB çıkış olarak yönlendiriliyor
TRISC
= 0x00; // PORTC çıkış yapılıyor
PORTA
= 0x00; // PORTA'nin tüm çıkışları sıfırlanıyor
PORTB
= 0x00; // PORTB'nin tüm çıkışları sıfırlanıyor
PORTC
= 0x00; // PORTC'nin tüm çıkışları sıfırlanıyor
for(;;) //
Sonsuz döngüye giriliyor
{
if(RA0==0) //
RA0'pini 0 mı?
{
while(!RA0);
// Buton bırakıldı mı diye bakılıyor
i++; //
Değişken artırılıyor
if(i>99) //
Eğer değişken 99'dan büyükse 0 oluyor
i=0;
}
else
if(RA1==0) //
RA1'pini 0 mı?
{
while(!RA1); //
Buton bırakıldı mı diye bakılıyor
i--; //
Değişken azaltılıyor
if(i<0) //
Eğer değişken 0'dan küçükse 99 oluyor
i=99;
}
sayi_goster(i); //
O anki sayı gösteriliyor
}
}
Bir önceki
dersimizde tek haneli 7 segment display için 0-9 arası bir sayıcı
devresini oluşturmuştuk. Bu dersimizde ise 00-99 arası sayabilen
bir sayıcı oluşturacağız. Eğer istenirse iki tane tek 7 segment
display yanyana konularak da 00-99 sayıcı devresi yapılabilir.
Ancak yapışık haldeki iki haneli 7 segment display i
programlamakla arasında pek bir fark olmayacaktır. Bu iki haneli
olan displayde abcdefg uçları ortaktır. Kicad programının
kılıflarında ayrı ayrı gözükmüş ama aslında birleşiktir.
Burdaki kılıf şeklinde bile olsa pic portlarını her halükarda
ortak kullanırlar. Yani 1. display hanesinin a girişi ile 2.
display hanesinin a girişi birleşip Port B0 a bağlanır. O yüzden
kafanız karışmasın.
Bu displaydeki
dikkat edeceğimiz hususlardan biride display hanelerinin aktiflenme
portlarıdır. Port C0 ve Port C1 e bağlanan portlar aktifleme
işlemini yapar. Bilindiği üzere biz bu display hanelerine veri
göndereceğimiz zaman hane seçimine göre C0 veya C1 portlarından
birini aktifleriz. Bu şekilde aktif olan (Lojik 1) display hanesine
veri yazılabilir. İlk haneden sonra diğer haneye yazabilmek için
bu haneyi aktif (lojik 1), diğer haneleri ise pasif (lojik 0)
yapmamız gerekir. Ayrıca bir haneden diğerine geçiştede belirli
bir süre aralığı bekleme yapmamız gerekmekte. Buradaki devrede
denemelerimizde 10 ms ile isiste kararlı çalıştığı görüldü.
Bu kodla ilgili bir
diğer dikkat edilecek husus ise Butona basılmanın algılanması
ile birlikte Buton bırakılana kadar döngüde tutulma durumudur.
Buda bize butona basıştaki arttırma yada azaltmanın birer birer
yapılmasının kontrollü bir şekilde sağlar. Bu bir programlama
tekniğidir. Projelerinizde tam buton kontrolünü sağlayabilir.
Sayigoster isimli
fonksiyonumuzda dikkat çeken bir husus ise bir sayının onlar
hanesinin alınması işleminin sayının 10 a bölümü ile çıkan
bölüm sonucunun olmasıdır. Yani bölmenin bölüm sonucu onlar
hanesidir. Aynı şekilde bir sayının 10 bölümünden kalan değer
ise birler hanesini verir. Yine buda bir pratik programlama
tekniğidir. Diğer kısımlari önceki derslerde tekrarladığımız
için yinelemeye gerek görülmemiştir. Bir sonraki derste görüşmek
üzere hoşçakalın.
duralikiraz.blogspot.com
23
Haziran 2015
“Muvaffakiyet
Allahtandır.”
Hiç yorum yok:
Yorum Gönder