Proteus Simülasyonu DIPNOT 1: Yukarıda verilen kod PIC 16F877 içindir. Bu PIC'te ADC ayarları yapmak üzere ayrılmış iki register bulunur. Bunlar ADCON0 ve ADCON1'dir. Burada yaptığımız ADC'de çevirim için gerekli zaman bilgisini yada interrupt(kesme) gibi özellikleri kullanmadık. Sadece 8 bitlik, bu kapasitede bir ADC yapmak için bu ayar yeterlidir. Yakında bu sitede ADC hakkında daha detaylı bilgilere ulaşabileceksiniz.
DIPNOT 2: ADCIN komutuyla ADCBILGI değişkeninin içine 0-255 arası bir değer atanmıştır. 8 bitlik bir analog-dijital çevirici 1/256 çözünürlüğe sahiptir. Örneğin değişim aralığımız 0-5 Volt olsun, 2.50 Volt için dijital değer 127, 1.25 Volt için 256/5*1.25 yani 64 olur. PIC Basic'te, bölme işleminden sonra virgülden sonraki sayılar doğrudan atılır.Yani floating point ya da yuvarlama olayı yoktur.Yaptığımız analog-dijital çeviricide virgülden sonraki rakam değerlerini kaybetmemek, hassasiyeti arttırmak için okunan dijital bilgi 100 değeri ile çarpılır ve daha sonra 5/256 ile çarpılmak yerine kolaylık olması için 51'e bölünür.
DIPNOT 3:Çıkan sayı üç basamaklıdır ve bu sayının rakamları DIG komutu ile alınarak ekrana yazılır. Değer göstermek için LCDOUT komutundan sonra önüne # işareti konarak değişken yazılır. Böylece değişkenin değeri ekrana yazılmış olur. Ayrıca tek satırda birden fazla şey yazmak için araya virgül konmalıdır.
LCD UYGULAMASI - 3 : LCD İLE HESAP MAKİNESİ
Son LCD uygulaması olarak burada basit bir hesap makinesi (sadece dört işlem yapan) nasıl yapılır onu anlatacağım. Şemamız aşağıdaki gibi olacak. Kullanacağınız tuş takımı 4x4'lük herhangi bir tuş takımı olabilir. Bu uygulamada da tıpkı zamalayıcı programında olduğu gibi tuş takımını tarayacağız. Yalnız burada 12 değil de 16 tane tuş bulunuyor, yani 7 değil de 8 hattımız var. Bu hatlardan 4'ünü giriş 4'ünü çıkış yapıp değeri okuyacağız.
INCLUDE "MODEDEFS.BAS"
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 6 ;BO? PORT KALMADI?I YÇYN OSYLATÖR BACAKLARINDAN
DEFINE LCD_EREG PORTA ;BYRYSYNY ÇIKI? YAPTIK (BKZ: DYPNOT1)
DEFINE LCD_EBIT 0
DEFINE LCD_BITS 4
DEFINE LCD_LINES 1 ;LCDMIZ 1 SATIRLIK
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50
CMCON=7
VRCON=0
TRISA=222 ;PORTA GYRY? ÇIKI?LARINI AYARLADIK (BKZ: DYPNOT2)
TRISB=0
TEMP VAR BYTE
ISLEM VAR BYTE
DEGER VAR BYTE
DEGER1 VAR WORD
DEGER2 VAR WORD
DEGER3 VAR WORD
DEGER4 VAR WORD
DEGER5 VAR WORD
YENI VAR BIT ;ÇE?YTLY BAYRAKLAR (FLAG BITS)
IKINCI VAR BIT
CLEAR ;TÜM DE?Y?KENLERY SIFIRLADIK
DEGER=77 ;TU? TAKIMDA OLMAYAN BYR DE?ER VERDYK
;***************ANA DÖNGÜ****************************************** ***
ANA:
CALL TARA
CALL GOSTER
CALL DEGERLENDIR
GOTO ANA
;************************************************* ********************
GOSTER:
IF DEGER<10 && YENI=0 THEN LCDOUT #DEGER
IF DEGER<10 && YENI=1 THEN
LCDOUT 254,1 ;E?ER YENY BYR Y?LEME BA?LANDIYSA EKRANI SYLER
LCDOUT #DEGER
ENDIF
TEMP=DEGER ;BASILAN DE?ERY KAYBETMEMEK IÇIN BU I?LEMI YAPTIK
GERIBAS: ;TU? TAKIMINDAN ELYN ÇEKYLMESYNY KONTROL EDYYOR
CALL TARA
IF DEGER!=77 THEN GERIBAS
RETURN
DEGERLENDIR:
IF TEMP<10 && IKINCI=0 THEN CALL SAYIYAP
IF TEMP<10 && IKINCI=1 THEN CALL SAYIYAP2
IF TEMP>9 THEN CALL ISLEMYAP
RETURN
SAYIYAP:
DEGER1 = TEMP
DEGER2 = DEGER2*10 + DEGER1 ;SAYIYI ONDALIK DÜZENDE YAZAR
RETURN
SAYIYAP2:
DEGER3 = TEMP
DEGER4= DEGER4*10 + DEGER3
RETURN
ISLEMYAP:
IF TEMP=10 THEN ;TEMYZLE (CLEAR) DÜ?MESYNE BASILIRSA EKRANI TEMYZLER
CLEAR
LCDOUT 254, 1
ENDIF
IF TEMP=11 THEN ;E?YTTYRE BASILIRSA HESAPLAMA Y?LEMY YAPILIR
IF ISLEM=1 THEN DEGER5=DEGER2+DEGER4
IF ISLEM=2 THEN DEGER5=DEGER2-DEGER4
IF ISLEM=3 THEN DEGER5=DEGER2*DEGER4
IF ISLEM=4 THEN DEGER5=DEGER2/DEGER4
LCDOUT "=", #DEGER5
YENI=1
ENDIF
IF TEMP=12 THEN ;EKRANDA HANGY Y?LEMYN YAPILDI?I GÖZÜKÜR
ISLEM=1 ;Y?LEM DE?Y?KENYNE HANGY Y?LEM YAPILACA?I ATANIR
LCDOUT "+" ;IKINCI BAYRAGI 1 YAPILARAK 2. SAYIYA GEÇYLDY?Y
IKINCI=1 ;BELYRTYLYR
ENDIF
IF TEMP=13 THEN
ISLEM=2
LCDOUT "-"
IKINCI=1
ENDIF
IF TEMP=14 THEN
ISLEM=3
LCDOUT "x"
IKINCI=1
ENDIF
IF TEMP=15 THEN
ISLEM=4
LCDOUT "%"
IKINCI=1
ENDIF
RETURN
TARA: ;TU? TAKIMINI TARAR
DEGER = 77
HIGH PORTB.4
IF PORTA.1=1 THEN DEGER=7
IF PORTA.2=1 THEN DEGER=8
IF PORTA.3=1 THEN DEGER=9
IF PORTA.4=1 THEN DEGER=15
LOW PORTB.4
HIGH PORTB.5
IF PORTA.1=1 THEN DEGER=4
IF PORTA.2=1 THEN DEGER=5
IF PORTA.3=1 THEN DEGER=6
IF PORTA.4=1 THEN DEGER=14
LOW PORTB.5
HIGH PORTB.6
IF PORTA.1=1 THEN DEGER=1
IF PORTA.2=1 THEN DEGER=2
IF PORTA.3=1 THEN DEGER=3
IF PORTA.4=1 THEN DEGER=13
LOW PORTB.6
HIGH PORTB.7
IF PORTA.1=1 THEN DEGER=10
IF PORTA.2=1 THEN DEGER=0
IF PORTA.3=1 THEN DEGER=11
IF PORTA.4=1 THEN DEGER=12
LOW PORTB.7
RETURN