Pic+buton+lcd

Başlatan ylmz, 21 Eylül 2011, 14:58:33

ylmz

Arkadaşlar merhaba kullanmış olduğum mcu nun portb.3 ucuna bır buton bağladım bu butona bastığım zaman lcd ekranda bişey yazmasını
butonu bıraktığım zaman yazmış olduğum yazının gıtmesını ıstıyorum fakat bir türlü beceremedım butona basıyorum yazı gelıyor ama butondan elımı çektiğim zaman yazı gıtmıyor bununla ılgılı pic basic de bir döngü oluşturdum fakat tam beceremedim olayı

İstediğim : Butona basılınca yazı ekrana gelsın , Butondan elımı çektiğim zaman yazı gıtsın
Programım :
endif
    if test.0=1 then goto atla1
    if portb.3 = 0 then   
    test.0 = 1
    LCDOUT $fe, $D4, "  YAZI 1"
     endif
atla1
    if test.0 = 0 then goto atla2
    if portb.3 = 1 then
    test.0 = 0
    LCDOUT $fe, $D4, "  YAZI 1"
    endif
atla2
Regülatör Dns Trafo | Regülatör | Redresör | Ups

fryrmnd

while-wend döngüsü ile yapabilirsiniz

ylmz

Regülatör Dns Trafo | Regülatör | Redresör | Ups

fryrmnd

while portb.3=0 (veya portb.3=1, nasıl kullanmak istiyorsan)
lcdout .....
wend

ete

Belkide şöyle yapmak daha uygun olur.
if portb.3 = 0 then   
    test.0 = 1
    LCDOUT $fe, $D4, "  YAZI 1"
    while portb.3=0:wend
    lcdout $fe,1
   endif

Ama programın diğer kısımlarına hakim olmadan bu kodu yalnızca değerlendirmek yanlış olabilir.
Bir yerde doğru iş yapalım derken diğer yerde bir başka işe mani olabiliriz.
Zira while - wend komutu programı bloke eder. Yani tuşu bırakıncaya kadar program orada bloke olur. Bu arada yapılması gereken başka işler var ise onları yapamazsın.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

ylmz

ete teşekkür ederim kod ıcın fakat dediğin gıbı olmadı olay
4 satır lcd kullanıyorum diğer satırlardakı yazılar gıdıyor bu porta bağlı butona basınca buna nasıl bir çözüm üretebiliriz acaba ?
Regülatör Dns Trafo | Regülatör | Redresör | Ups

fryrmnd

butona basınca yazdırcağın yazının altına gitmesini istemediğin yazıları tekrar yazdır.

canbulut

#7
bu şekilde denerseniz çözüm olabilirmi?

basla:
if portb.3=1 then
'lcdout $fe,1
'pause 200
lcdout $fe,$80,"yazı"
pause 1000
else
'lcdout $fe,1
'pause 200
lcdout $fe,$80,"                "   '
endif
goto basla
end

canbulut

yazdığım $80 ilk satır içindi $d4 4.satır ise 80 yazan yerleri d4 ile değiştirirseniz işini görür sanıyorum

ylmz

Arkadaşlar teşekkür edıyorum sorunu çözdüm fakat 4X20 Lcd ımde 2 cı satıra yazıları yazıyorum fakat
kendisi otomatik olarak ılk baştan 6 tane boşluk bırakıp yazıyor bu neden kaynaklanır acaba ?
Regülatör Dns Trafo | Regülatör | Redresör | Ups

fryrmnd

2. SATIRI
lcdout $fe,$c0,"yazı"
şeklinde yaz

ylmz

#11
ZATEN ÖYLE YAZIYORUM FAKAT YAZI GELIYOR BI AN SONRA KAYBOLUYOR, IKINCI SATIRDA KAYBOLUYOR DİĞER SATIRLARDA KAYBOLMUYOR
Regülatör Dns Trafo | Regülatör | Redresör | Ups

fryrmnd

kodun tamamını yazın da başka bir sorun mu var acaba

ylmz

#13
Yazıyorum :


'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2009 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 17.06.2009                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
ana         var     word
yana        var     ana.byte1
anay        var     word
set         var     word
seta        var     set.byte1
ek2         var byte
ek3         var byte
ek4         var byte
ek5         var byte
yed         var byte
mkont       var byte
olcum       var byte
zsay        var word
degert      var word
hsay1       var word
hsay2       var word
volt        var word
voltt       var word
amper       var word
ampert      var word
test        var byte

ASM
    BSF STATUS,RP0
    MOVLW   B'11101111'
    MOVWF   0Fh
    MOVLW   .48
    MOVWF   10h
    BCF STATUS,RP0
ENDASM

DEFINE LCD_DREG PORTB    'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT 4        'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_RSREG PORTA   'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 7       'LCD RS bacağı Hangi Bite bağlı ?
DEFINE LCD_EREG PORTA    'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT 6        'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_BITS 4        'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES 4       'LCD Kaç sıra yazabiliyor

on interrupt goto kesme
disable
trisb       = %00001000
portb       = 0
zsay        = 0
test        = 0
option_reg  = %10000100
intcon      = %10100000
trisa       = %00111111
porta       = 0
volt        = 0
amper       = 0
voltt       = 0
ampert      = 0
ana         = 0
ek2         = 0
ek3         = 0
ek4         = 0
ek5         = 0
hsay1       = 0
hsay2       = 0
adcon0      = %01000001
adcon1      = %00001001
adcon0.3 = 1
adcon0.4 = 1
adcon0.5 = 0
adcon1.7    =1
adcon0.3    =1
portb.6     = 1
portb.1     = 1
pause 500
    lcdout $fe,1
    LCDOUT $FE,2,   "  Calismamm"
    pause 500


enable

BASLA
    if hsay2 = 2 then        LCDOUT $FE,2,   "   LCD CALiSMAM  "
    if hsay2 > 2200 then     
    hsay2 = 0
   
   
    endif
    if test.0=1 then goto atla1
    if portb.3 = 0 then 
    test.0 = 1
    LCDOUT $fe, $C0, "  %40 %60 %80 %100"
     endif
atla1
    if test.0 = 0 then goto atla2
    if portb.3 = 1 then
    test.0 = 0
    LCDOUT $fe, $C0, "  %40 %60 %80 %100"
    endif
atla2
   
     


    if hsay1 = 120 then
    adcon0.3 = 0
    adcon0.4 = 0
    adcon0.5 = 1
    volt   = voltt  / 60
    amper  = ampert / 60
    voltt  = 0
    ampert = 0
    degert = 0
    hsay1 = 0
    if amper > 10 then



Burada %40 sımgesı yanıp sönuyor diğerlerı gayet normal çalışıyor
Regülatör Dns Trafo | Regülatör | Redresör | Ups

fryrmnd

ylmaz yazdım sana ama kod mantıksız geldi bana  yada şema felan yok ondan. yani ekrandan  %40 %60 %80 %100 yazısı silinmicek gibi duruyor