tualimforum.com

tualimforum.com (http://www.tualimforum.com/)
-   Elektronik-Bilgisayar (http://www.tualimforum.com/elektronik-bilgisayar/)
-   -   PIC İle LCD Uygulamaları (http://www.tualimforum.com/elektronik-bilgisayar/6793-pic-ile-lcd-uygulamalari.html)

smtyksl 09.07.08 09:59

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