PIC İle LCD Uygulamaları Artık cep telefonlarıyla, dijital saatlerle ve göstergeli her türlü eşyayla hayatımızın bir parçası olan LCD (Lquid Crystal Display - Sıvı Kristal Gösterge) ekranları kullanarak birşeyler yapmak istemez misiniz? Proteus ve PIC Basic ikilisiyle birçok uygulamayı kolayca yapabilirsiniz. LCD UYGULAMASI - 1-YAZI YAZMA DEFINE OSC 4 ' PIC'in çalışma hızını 4 MHZ 'e ayarladık DEFINE LCD_DREG PORTB ' Yazı bilgisini göndereceğimiz portu seçtik DEFINE LCD_DBIT 4 ' Bilgi göndermek için başlangıç bitini seçtik DEFINE LCD_RSREG PORTB ' LCD Register(Kayıt) Portunu seçtik DEFINE LCD_RSBIT 0 ' LCD Register Bitini seçtik DEFINE LCD_EREG PORTB ' Enable(Yazılma) Portunu seçtik DEFINE LCD_EBIT 1 ' Enable bitni seçtik DEFINE LCD_BITS 4 ' Kaç bitlik bir hattan bilgi transferi yapacağımızı yazdık. DEFINE LCD_LINES 2 ' Kaç satırlık bir LCDmiz varsa yazdık DEFINE LCD_COMMANDUS 2000 ' Kac mikrosaniyede bir komut gönderileceğini yazdık DEFINE LCD_DATAUS 50 ' Kac mikrosaniyede bir yazı gönderileceğini yazdık LCDOUT 254,1, " LCD KULLANMA" LCDOUT 254,192," PROGRAM : 01" LCD UYGULAMASI - 2: LCD EKRANDA DEĞE.R GÖSTERME Bu uygulamada PIC 16F877'nin analog kanallarından bilgi okuyacağız ve bu bilgiyi voltaj bilgisine çevirip LDC ekranda göstereceğiz. Aşağıda bu programın kodunu bulabilirsiniz. DEFINE LCD_DREG PORTC DEFINE LCD_DBIT 4 DEFINE LCD_RSREG PORTB DEFINE LCD_RSBIT 0 DEFINE LCD_EREG PORTB DEFINE LCD_EBIT 2 DEFINE LCD_LINES 2 DEFINE LCD_BITS 4 DEFINE ADC_BITS 8 DEFINE ADC_CLOCK 3 DEFINE ADC_SAMPLEUS 50 TRISA = 255 ;PORTA'YI GIRIŞ OLARAK TANIMLADIK ADCBILGI VAR BYTE A VAR BYTE B VAR BYTE C VAR BYTE D VAR WORD ADCON1 = 0 ;ADCON1 REGISTERINI SIFIRLADIK(*DIPNOT 1) ADC_OKU: ADCIN 0, ADCBILGI ;A0 KANALINDAN ANALOG VERI OKUR, ;DIJITAL BILGIYI ADCBILGI DEGISKENINE ATAR D=ADCBILGI*100/51 ;BILGI VOLTAJ CINSINDEN YAZILIR(*DIPNOT 2) LCDOUT 254, 1 ;EKRANI TEMIZLE A=D DIG 2 ;ADCBILGI DEGISKENININ SAGDAN 3. RAKAMINI A'YA B=D DIG 1 ;ADCBILGI DEGISKENININ SAGDAN 2. RAKAMINI B'YE C=D DIG 0 ;ADCBILGI DEGISKENININ SAGDAN 1. RAKAMINI C'YE ATADIK LCDOUT #A, ".", #B, #C," V" ;EKRANA DEGERLERI YAZDIRDIK(*DIPNOT 3) PAUSE 100 ;100 MILISANIYE BEKLEYIP BASA DÖN GOTO ADC_OKU http://www.edevreler.com/devreler/LCD02.gif 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 |
Bütün Zaman Ayarları WEZ +3 olarak düzenlenmiştir. Şu Anki Saat: 18:19 . |
Powered by vBulletin Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.6.0 RC 2