avatar_ete

PIC Basic Ders-03 (LCD Kullanımı)

Başlatan ete, 28 Ağustos 2011, 14:45:56

Emro

Sayın ETE hocam
Maalesef olmadı. Değer her değiştiğinde (her buttona basışta) alt limit ekranı anlık gözüküp kayboluyor. Bana gereken ise; butona basıp bıraktığımda ekrana alt limiti gösteren sekmenin gelmesi ve buttona her basıp bırakışımda al limit değeri değişirken ekran sekmesinin ana ekrana dönmemesi. Butondan elimizi çektikden 2 sn sonra Ana ekrana dönüşün olması gerekiyor.
         
    Bu 2 sn lik bekleyişi pause komutu ile yapamıyorum çünkü program "pause 2000" komutunda beklediğinden her değer değişimi için tuşa basma sürem 2n olmalı. Seri bir şekilde basıldığında değer değişmiyor.

   Pause komutu kullanmadığımda ise elimi buttondan her çekişimde ekrandaki alt limit sekmesi ana ekrana dönüyor. Seri bir şekilde bas bırak yaparsam ekran bir o sekmeye bir bu sekmeye gittiği için allak bullak oluyor.

Yazı metini ile anlatması güç bir durum  :)


ete

Programı koy buraya bakayım. Bir hata vardır göremediğimiz. Bazen lafla değilde görerek çözmek daha kolay oluyor. Onun içinde programa bakmak yeterli olur sanırım.

Ete

Emro

#77
PORTA = 0 : PORTB = 0 : PORTC = 0

TRISB = 0
TRISC = 0
TRISD = %10111010
TRISE = 0

SYMBOL BUZ = PORTB.0
PORTB = 0
BUZ = 1
PAUSE 100
BUZ = 0
PAUSE 100


PAUSE 1000
             
define LCD_RSREG           PORTB     'LCD DE RS BACAĞI HANGİ PORTA BAĞLANDI
DEFINE LCD_RSBIT              1      'LCD DE RS BACAĞI HANGİ BİTE BAĞLANDI
DEFINE LCD_EREG            PORTB     'LCD DE ENABLE BACAĞI HANGİ PORTA BAĞLANDI
DEFINE LCD_EBIT               3      'LCD DE ENABLE BACAĞI HANGİ BİTE BAĞLANDI
DEFINE LCD_DREG            PORTB     'LCD DE DATA BACAKLARI PORT D YE BAĞLI
DEFINE LCD_DBIT               4      'LCD DE DATA BACAKLARI PORTTA HANGİ BİTTEN BAŞLIYOR
DEFINE LCD_BITS               4      'LCD 4 BİT BAĞLI
DEFINE LCD_LINES              4      'LCD KAÇ SATIRDAN OLUŞUYOR


'---------------------SEMBOLLER----------------

SYMBOL BAR1 = PORTC.0
SYMBOL BAR2 = PORTC.1
SYMBOL BAR3 = PORTC.2
SYMBOL BAR4 = PORTC.3
SYMBOL BAR5 = PORTC.4
SYMBOL BAR6 = PORTC.5
SYMBOL BAR7 = PORTC.6
SYMBOL BAR8 = PORTC.7
symbol FAN  = PORTD.1
symbol ARTI = PORTD.4
symbol EKSI = PORTD.5

'-------------------------DEĞİŞKENLER----------------------------
I VAR BYTE
ORTAMISISI VAR BYTE
HAVAHIZI VAR BYTE
ARTTIR VAR BYTE
EKSILT VAR BYTE
SAYI VAR BYTE
BIRLER VAR BYTE
ONLAR VAR BYTE
SAYI2 VAR BYTE
sayac var word
'----------------------------------------------------------------

'------------ANALOG AYARLARI---------------------------

ADCON1 =%00001110

'-----------------------------------------------------------------------------

I = 3000
LCDOUT $FE, 1
'-------------------------------EKRAN AÇILIŞ----------------------------------
LCDOUT "       firma ismi " :  PAUSE 1000
LCDOUT $FE, $D4, "  internet adresi " : PAUSE 2000
BUZ= 1
PAUSE 100
BUZ = 0
PAUSE 100


LCDOUT $FE, 1

lcdout "TO CHANGE SYSTEM"
LCDOUT $FE, $C0, "LANGUAGE TO ENGLISH"
LCDOUT $FE, $94, "PRESS ' + '"
PAUSE 2000
BUZ = 1
PAUSE 100
BUZ = 0
PAUSE 100


LCDOUT $FE, 1
LCDOUT "  ALT LiMiT:    m/s" : pause 1000



LCDOUT $FE, 1
lcdout "  ALT LiMiT:   m/s."
LCDOUT $FE, $C0, "LiMiT DEGERiNi"
lcdout $FE, $94, "AYARLAMAK iCiN +/-"
LCDOUT $FE, $D4, "TUSLARINI KULLANINIZ"
PAUSE 2000
BUZ = 1
PAUSE 100
BUZ = 0
PAUSE 100



LCDOUT $FE, 1
LCDOUT "  SiSTEM SENSORLERi "
LCDOUT $FE, $C0, "  KALiBRE EDiLiYOR "
pause 10
LCDOUT $FE, $94,  "       %  0 " : BAR1 = 1 : PAUSE 1000
PAUSE 10
LCDOUT $FE, $94,  "       % 10 " :  BAR1 = 0  : BAR2 = 1 : PAUSE 1000
pause 10
LCDOUT $FE, $94,  "       % 20 " :  BAR2 = 0: BAR3 = 1: PAUSE 1000
pause 10   
LCDOUT $FE, $94,  "       % 30 " : BAR3 = 0 :BAR4 = 1 : PAUSE 1000
pause 10
LCDOUT $FE, $94,  "       % 40 " :BAR4 = 0 : BAR5 = 1 : PAUSE 1000
pause 10
LCDOUT $FE, $94,  "       % 50 " :BAR5 = 0 : BAR6 = 1 : PAUSE 1000
pause 10
LCDOUT $FE, $94, "        % 60 " : BAR6 = 0: BAR7= 1  : PAUSE 1000
pause 10       
LCDOUT $FE, $94,  "       % 70 " : BAR7= 0 : BAR8 = 1 : PAUSE 1000
pause 10
LCDOUT $FE, $94,  "       % 80 " : BAR8 = 0 : PAUSE 1000
pause 10
LCDOUT $FE, $94,  "       % 90 " : PAUSE 1000 
pause 10
LCDOUT $FE, $94,  "      % 100 ": PAUSE 1000 
pause 10
BUZ= 1
PAUSE 1000
BUZ = 0
GOTO ANA_EKRAN
'-------------------------------------------------------------------------------


ANA_EKRAN:
ADCIN  0,ORTAMISISI

LCDOUT $FE, 1
LCDOUT "     CEKEROCAK   "
LCDOUT $FE, $94,"ORTAM ISISI:", DEC3 ORTAMISISI
LCDOUT $FE, $D4,"HAVA HIZI  :", DEC3 HAVAHIZI
PAUSE 300


IF FAN = 1 THEN                               'fan buttonuna basılırsa
toggle porte.1                                ' porte 1 i togglle
                                              ' alt programa gosubla
gosub fan_aktif
ENDIF
'-----------------------------------------------------------------------------------------------------------
IF ARTI = 1 THEN                                'ETE hocam size bahsettiğim kısım burası                                     
SAYI = SAYI + 1
lcdout $FE,1 : LCDOUT "ALT LiMiT:", DEC3 SAYI
PAUSE 100
ENDIF
while ARTI=0 and SAYAC<3000 
pause 1
sayac=sayac+1
WEND                                             'ETE hocam size bahsettiğim kısım burası
'------------------------------------------------------------------------------------------------------------     
GOTO ANA_EKRAN


fan_aktif:                                   ' fanın basbırak olması için alt prog

pause 50
IF FAN = 1 THEN fan_aktif

RETURN





ete

#78
BU Artı tuşu nasıl çalıştırılıyor. Basıp bırakma şeklindemi yoksa basılı tutarak mı kullanılıyor.
Burada nasıl kullanıldığından ziyade nasıl kullanmak istediğini söylesen daha doğru olur sanırım. Sayı değeri bas bırak ile mi artsın basılı tutarakmı artsın.  Sayı değişkeni Byte cinsinden olduğuna göre en fazla 255 olabilir. O halde bas bırak şeklinde çalıştırmak daha uygun bana kalırsa. Bu şekilde olunca tuşun bırakıldığınıda kontrol altına almak gerekir. Sorun burada önceden de ikaz etmiştim ama anlamamışsın sanırım.

Programa bakılırsa tuşa basılınca pic pinine HIGH veriliyor doğrumudur.
While döngüsüne sokmadan önce SAYAC=0 yazman gerekirdi örneğinide vermiştim ama koymamışsın neden acaba?

sorunlu olan kısmı aşağıdaki şekilde değiştir olması gerekir.
IF ARTI = 1 THEN                                'ETE hocam size bahsettiğim kısım burası                                     
   SAYI = SAYI + 1
   lcdout $FE,1 : LCDOUT "ALT LiMiT:", DEC3 SAYI
   while ARTI=1:WEND
   PAUSE 100
ENDIF
SAYAC=0
while ARTI=0 and SAYAC<3000 
pause 1
sayac=sayac+1
WEND

Ete


Emro

teşekkür ederim hocam sorunu hallettim

Powered by EzPortal