Device = 16F877 XTAL 4 TRISB=0 TRISD=%00000111 Dongu: If PORTD.0=1 And PORTD.1=1 Then PORTB.0=1 EndIf If PORTD.0=1 Or PORTD.2=1 Then PORTB.0=0 EndIf GoTo Dongu |
Yukarıdaki örnekte ise aynı anda iki şart birden And, Or bağlaçları ile birbirine bağlanarak kontrol edilmiştir. Örneğin PortD.0 ve PortD.1’e bağlı butonlara aynı anda basılırsa PortB.0’ı Logic 1’e gider. Eğer PortD.0’a veya PortD.2’ye bağlı butonlara basılırsa PortB.0’a bağlı led söner.
Şekil 10 |
Şekil 11 |
Örneğin display ile 1 rakamı oluşturmak isteniyorsa B ve C ledlerinin yanması gerekmektedir. Yine aynı şekilde 3 rakamı için ise A,B,B,D,G ledleri yanmalıdır. Seven segmentler farklı büyüklüklerde tasarlanabilir. Segment’ler büyüdükçe içindeki led'lerinde sayıları artar. Her segmentte seri olarak bağlanmış 2,3 veya daha fazla led bulunabilir. Çalışma voltajları içindeki seri bağlı led'lerin sayılarına göre değiştiği için led'lerin transistörler ile sürülmesi gerekebilir.
Prg:14
Device = 16F877 XTAL 4 TRISB=0 TRISD=%00000111 Dim Sayac As Byte Sayac=0 GoSub Display Dongu: If PORTD.0=1 Then While PORTD.0=1 : Wend If Sayac<9 Then Sayac= Sayac +1 GoSub Display EndIf If PORTD.1=1 Then While PORTD.1=1 : Wend If Sayac>0 Then Sayac= Sayac -1 GoSub Display EndIf GoTo Dongu Display: HSerOut [Dec Sayac] If Sayac=0 Then PORTB=%00111111 ;0 If Sayac=1 Then PORTB=%00000110 ;1 If Sayac=2 Then PORTB=%01011011 ;2 If Sayac=3 Then PORTB=%01001111 ;3 If Sayac=4 Then PORTB=%01100110 ;4 If Sayac=5 Then PORTB=%01101101 ;5 If Sayac=6 Then PORTB=%01111101 ;6 If Sayac=7 Then PORTB=%00000111 ;7 If Sayac=8 Then PORTB=%01111111 ;8 If Sayac=9 Then PORTB=%01101111 ;9 Return End |
Yukarıdaki örnekte yeni bir komut kullanılmıştır. Gosub komutu GoTo komutu gibi belirtilen etikete gitmeyi sağlar. Fakat bu komutun Goto komutundan farkı gidilen noktaya Return ile geri dönülmesidir. Goto kesin bir gidiştir. Gosub ise ana program döngüsü içinde gerektiği zaman geçici olarak gidilen gerekli kodlar çalıştıktan sonra tekrar geri dönülen noktalar için kullanılması uygundur.
Bu program parçalarına Alt program ( subrutine ) denir. Alt program parçaları program için birden fazla çalışması gereken fakat çalışacak kodların birbiri ile aynı olması durumlarında kullanılır. Programda tuşlara basıldığında Sayac değişkeninin değeri birer birer artmakta ve azalmaktadır. Her değer değişiminde de değer Seven Segment ile gösterilmektedir. Tuşlara basıldığında Seven Segment üzerinde gösterim yapacak olan kod parçacığı ortak olduğu için bu kod bir alt program şeklinde hazırlanmış ve gerektiği zaman bu koda gidilip programa geri dönülmüş ve kalınan yerden devam edilmiştir. Gosub ile gidilen yerden mutlaka Return komutu ile geri dönülmelidir.
Yine program içinde kullanılan yeni bir komutta While Wend komutudur. Bu komut şartlı döngü komutudur. Şart sağlandığı müddetçe döngünün dönüşü devam eder. Şart sağlanmadı noktada program Wend komutunun bir altındaki satırdan itibaren çalışmaya devam eder.
Döngü komutları üç grupta incelenir.
- Sonsuz döngü: Goto komutu ile sonsuz döngüler kurulur.
- Sayıya bağlı döngüler: For Next komutu istenilen sayıda döngü kurulmasını sağlarlar.
- Şartlı Döngüler: Bu tip döngülerde While Wend ve Repeat Until komutları kullanılır. Bu döngülerde şart doğru olduğu sürece döngünün dönüşü devam eder.
Main:…..…..…..…..…..Goto Main
Dim Sayac as byteFor Sayac=0 to 10…..…..…..…..Next
Dim Sayac as byteSayac=0While Sayac<10Sayac=Sayac+1…..…..Wend
Programı satır satır incelemeye başlarsak;
Ekrana basılacak değerleri saklamak için öncelikle adı Sayac, tipi byte olan bir değişken tanımlanmış ve ilk değer olarak ta 0 yüklenmiştir. Bu değerin ilk kez seven segment’te gözükmesi için Gosub komutu ile alt rutine gidilmiştir. Alt rutinde if önermeleri ile Sayac değişkeninin değeri kontrol edilmiştir. Uygun olan değere göre gerekli olan segment ledleri yakılarak display'de sayı oluşturması sağlanmıştır. Sonra Return komutu ile Gosub komutu ile gelinen yere geri dönülmüş ve bir alt satırdan itibaren program çalışmasına devam etmiştir.
Sonsuz döngünün içinde ilk önce tuşlara basılıp basılmama durumu kontrol edilmiştir. PortD.0’na bağlı tuşa basılırsa yani girişe Logic 1 verilirse şart sağlamış olur ve ilk önermenin içi çalışmaya başlar.
İlk önermenin hemen alt satırında While PORTD.0=1: Wend Komut satırı yer almaktadır. Burada ilk etapta incelenmesi gereken konu komutların arasına konmuş olan: sembolüdür. Bu sembol eğer bir satırda birden fazla komutu art arda yazmak gerekiyorsa komutları birbirinden ayırmak amacı ile kullanılır. Kısaca Wend komutu bir alt satıra yazılması gerekirken bu komutu üstteki satıra yazmak için: sembolü kullanılmıştır.
Gelelim bu satırı neden kullandık. Bildiğiniz gibi mikrodenetleyiciler bağlamış olduğunuz kristalin hızına göre farklı hızlarla çalışsa da yine elimizin butona basılması ve çekilmesi işlemi sırasında program birçok kez aynı yerden geçecektir. Böyle bir çalışma bizim istediğimizin dışında sonuçlara neden olacaktır. Bu yüzden butona bastığımızda butondan elimizi çekinceye kadar programın o noktada takılı kalmasını sağlamak bu satırın görevidir. Bu satırda PortD.0 Logic 1 olduğu müddetçe bu satır While Wend arasında dönüp duracaktır. Elimizi butondan çektiğimizde ise Logic 0’a gidecek ve şart artık sağlanmayacağı için bir alt satıra gidilerek program kaldığımız yerden çalışmaya devam edecektir.
Bu satırda ise Sayac değişkeninin değeri 9'dan küçük ise değeri bir arttırılacak yeni sayaç değerine göre displaya yeniden değer basılacaktır. Diğer If önermesi ise Sayaç değişkeninin değerini azaltmak için kullanılmıştır.
Ekrana basılacak değerleri saklamak için öncelikle adı Sayac, tipi byte olan bir değişken tanımlanmış ve ilk değer olarak ta 0 yüklenmiştir. Bu değerin ilk kez seven segment’te gözükmesi için Gosub komutu ile alt rutine gidilmiştir. Alt rutinde if önermeleri ile Sayac değişkeninin değeri kontrol edilmiştir. Uygun olan değere göre gerekli olan segment ledleri yakılarak display'de sayı oluşturması sağlanmıştır. Sonra Return komutu ile Gosub komutu ile gelinen yere geri dönülmüş ve bir alt satırdan itibaren program çalışmasına devam etmiştir.
Sonsuz döngünün içinde ilk önce tuşlara basılıp basılmama durumu kontrol edilmiştir. PortD.0’na bağlı tuşa basılırsa yani girişe Logic 1 verilirse şart sağlamış olur ve ilk önermenin içi çalışmaya başlar.
İlk önermenin hemen alt satırında While PORTD.0=1: Wend Komut satırı yer almaktadır. Burada ilk etapta incelenmesi gereken konu komutların arasına konmuş olan: sembolüdür. Bu sembol eğer bir satırda birden fazla komutu art arda yazmak gerekiyorsa komutları birbirinden ayırmak amacı ile kullanılır. Kısaca Wend komutu bir alt satıra yazılması gerekirken bu komutu üstteki satıra yazmak için: sembolü kullanılmıştır.
Gelelim bu satırı neden kullandık. Bildiğiniz gibi mikrodenetleyiciler bağlamış olduğunuz kristalin hızına göre farklı hızlarla çalışsa da yine elimizin butona basılması ve çekilmesi işlemi sırasında program birçok kez aynı yerden geçecektir. Böyle bir çalışma bizim istediğimizin dışında sonuçlara neden olacaktır. Bu yüzden butona bastığımızda butondan elimizi çekinceye kadar programın o noktada takılı kalmasını sağlamak bu satırın görevidir. Bu satırda PortD.0 Logic 1 olduğu müddetçe bu satır While Wend arasında dönüp duracaktır. Elimizi butondan çektiğimizde ise Logic 0’a gidecek ve şart artık sağlanmayacağı için bir alt satıra gidilerek program kaldığımız yerden çalışmaya devam edecektir.
Bu satırda ise Sayac değişkeninin değeri 9'dan küçük ise değeri bir arttırılacak yeni sayaç değerine göre displaya yeniden değer basılacaktır. Diğer If önermesi ise Sayaç değişkeninin değerini azaltmak için kullanılmıştır.
Çok Teşekkür ederiz paylaşım için... emeğinize sağlık.
YanıtlaSilhocam ortak anotlu(+) display kullansaydık bağlantı şekli değişecek peki delphi yazılıma etki edecek bir durum söz konusu olurmuydu
YanıtlaSilsaygılarımla
hocam bu anlatılarınız için çok tesekkürler sayenizde aklıma takılan biçok noktayı buradan telafi edebiliyorum..
YanıtlaSilÇok güzel bilgiler yayınlamışsınız teşekkürler iyi çalışmalar...
YanıtlaSilEğer ortak anot seven segment kullanacaksanız hem devre hemde yazılım değişmelidir. Çünkü şu anki sürme mantığına ters olarak ledleri sürmeniz gereklidir. İleriki konularda bu şekilde sürme yönteminede örnek hazırlamayı düşünüyorum. Yorumlarınız için teşekkürler. Saygılarımla.
YanıtlaSil