avatar_efeworld

lcd display kursör yanıp sönme sorunu

Başlatan efeworld, 17 Kasım 2016, 15:41:19

efeworld

selamlar hocam ve arkadaşlar.benim sorunum lcd de karakter yazarken yazdığım karakaterin yanıp sönmesini yada altında çizginin olmasını istiyorum.yani hangi karakterde işlem yapılacağını görmek istiyorum ´$fe,$0f bu işi yapıyor ama ben bu programa uyduramadım yardımcı olurmusunuz acaba.işlemci 16 f877
 
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
define LCD RWREG PORTB
define LCD_RWBIT 2
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2

adcon1=7
low portb.2
portb=0
portc=0
trisb=0
trisc=255
w var byte[9]
i var byte
t var byte
symbol atlat=portc.3
symbol okey =portc.2
symbol yukari=portc.1
symbol asagi=portc.0
basla:
lcdout $fe,1
pause 200
i=0
for i=0 to 8
read i,w[i]
lcdout $fe,$84+i,w[i]
next i
t=65
i=0
wer:
if atlat =1 then er
if yukari=1 then t=t+1
while yukari=1:wend
if asagi =1 then t=t-1
while asagi=1:wend
lcdout $fe,$84+i,t
if okey=1 then gec
goto wer
gec:
pause 250
while okey=1:wend
er:
w[i]=t
i=i+1
t=65
if atlat=1 then yaz
if i=9 then yaz
goto wer

yaz:
  i=0
for i=0 to 8
write i,w[i]
pause 10
next i

ete

 while asagi=1:wend
lcdout $fe,$84+i,t
if okey=1 then gec


Yerine,

 while asagi=1:wend
      LCDOUT $FE,$0C   'kursör kapatıldı
      lcdout $fe,$84+i,T 'yazı LCD ye yazıldı
      LCDOUT $FE,$10   'kursör 1 hane sola alındı
      lcdout $fe,$0E       'alttan çizgili kursör açıldı
if okey=1 then gec


yaz. 0E alttan çizgili kursörü açar. 0F ise gözkırpan blok kursörü açar. Ben alttan çizgiliyi tercih ettim sen gerekirse değiştir.
Yukarıdaki satırların düzgün çalışması programın yeniden kursor kapatma komutuna aktarılması gerekir. Buraya dönüş uzar ise o zaman Kursörü açtıktan sonra biraz gecikme koyup tekrar kursörü kapatman gerekir.

Ben genellikle şöyle yaparım.
- Kursörü yazı yazacağım yere getiririm.  (LCDOUT $fe,$84+i)
- Burada kursörü açarım. (LCDOUT $fe,$0E) ve 100 ms gecikme koyarım. (pause 100)
- SOnra kursörü kapatırım (LCDOUT $fe,$0c) ve tekrar bir 100 ms gecikme eklerim. (pause 100)
- Sonra tuş kontrollerini yaparım ama tuşlara herhangi bir gecikme koymam.
- Tuş kontrollerinden sonra yazılacak bilgiyi yazarım.  (LCDOUT t)
      
      LCDOUT $FE,$84+i
      LCDOUT $FE,$0F :pause 100
      LCDOUT $FE,$0C:pause 100
.......bu araya tuş kontrolleri girecek
      LCDOUT t



Ete




efeworld

çok teşekkür ederim hocam ALLAH size uzun ömür versin inşallah

efeworld

hocam birde şu orum olacak aşağıdaki yazdığım program çalışırken elektrik kesildi diyelim sonra da elektrik geldi programın neresinde hangi saniyede kaldığını bulmasını istiyorum.mesela elektrik gelince ekranda işlem yarım kaldı devam edilsinmi diye yazı çıksın ve okey dediğimde nerde kaldıysa devam edecek.ben bunu nasıl yapabilirim nereye kayıt yapıcaz hocam saygılar


DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
define LCD RWREG PORTB
define LCD_RWBIT 2
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2

adcon1=7
low portb.2
w var byte[16]
x var byte
y var byte
z var byte
x1 var byte
y1 var byte
z1 var byte
g1 var byte
a var byte
c var byte
d var byte
t var byte
b var byte
i var byte
ne var byte
g var byte
m var byte
n var byte
v var byte[16]

xl var byte
q var byte
u var byte
h var bit
o var byte
oy var byte
symbol yukari=portc.0:symbol asagi=portc.1:symbol okey =porta.0:symbol atlat=porta.1
symbol acilstop =portc.4:symbol termik =portc.5:symbol kapak =portc.6
symbol motor=portd.0:symbol durulama=portd.1
trisc=255
trisa=255
trisd=%0
trisb=0
trise=%111
trisa=%00000001
porta=0
porte=0
portb=0
portc=0
portd=0
x=9
y=3
z=6
g=3
baba:
oy=0
x1=0
y1=0
z1=0
g1=0
low motor:low durulama
lcdout $fe,1,"  MUTLU SOGUTMA "
LCDOUT $FE,$C2,"0544 937 4662"
pause 500


lego:
pause 100
if okey =1 and atlat=1 then bakbi
if yukari=1 or asagi=1  then zeki
goto lego
zeki:
A=1
lcdout $fe,1
i=0
for i=0 to 8
read i,w[i]
lcdout $fe,$80," =>"
lcdout $fe,$84+i,w[i]
next i
i=0
for i=0 to 8
read i+9,w[i]
lcdout $fe,$c4+i,w[i]
next i
pause 200
while okey=1 or asagi=1 or yukari=1
wend
bir:
if  atlat=1 and oy=5 then prgyaz
if asagi=1 then metin
if okey=1 then git1
goto bir
bakbi:
lcdout $fe,1,"  SIFRE GIRIN"
bakki:
lcdout $fe,$c5,42,42,42,42
pause 200
if yukari =1 or asagi=1 then selim
goto bakki
selim:
pause 100
while yukari=1
wend
while asagi=1:wend
lcdout $fe,1,"  SIFRE GIRIN"
sel:
lcdout $fe,$c5,#x1,42,42,42
pause 100
if yukari=1 then x1=x1+1
while yukari=1
wend
if asagi=1 then x1=x1-1
while asagi=1
wend
if x1=255 then x1=0
if x1=10 then x1=9
if okey=1 then van
goto sel
van:
pause 50
while okey=1
wend
lcdout $fe,1,"  SIFRE GIRIN"
van1:
lcdout $fe,$c5,#x1,#y1,42,42
pause 100
if yukari=1 then y1=y1+1
while yukari=1
wend
if asagi=1 then y1=y1-1
while asagi=1
wend
if y1=255 then y1=0
if y1=10 then y1=9
if okey=1 then van2
goto van1
van2:
  pause 50
while okey=1
wend
lcdout $fe,1,"  SIFRE GIRIN"
van3:
lcdout $fe,$c5,#x1,#y1,#z1,42
pause 100
if yukari=1 then z1=z1+1
while yukari=1
wend
if asagi=1 then z1=z1-1
while asagi=1
wend
if z1=255 then y1=0
if z1=10 then y1=9
if okey=1 then van4
goto van3
van4:
  pause 100
while okey=1
wend
lcdout $fe,1,"  SIFRE GIRIN"
van5:
lcdout $fe,$c5,#x1,#y1,#z1,#g1
pause 100
if yukari=1 then g1=g1+1
while yukari=1
wend
if asagi=1 then g1=g1-1
while asagi=1
wend
if z1=255 then g1=0
if z1=10 then g1=9
if okey=1 then van6
goto van5
van6:
if x=x1 and y=y1 and z=z1 and g=g1 then
goto van7
else
goto baba
endif
goto van6
van7:
oy=5
goto zeki
metin:
A=2
lcdout $fe,1
i=0
for i=0 to 8
read i,w[i]
lcdout $fe,$84+i,w[i]
next i
i=0
for i=0 to 8
read i+9,w[i]
lcdout $fe,$c0," =>"
lcdout $fe,$c4+i,w[i]
next i
pause 200
while okey=1 or asagi=1 or yukari=1
wend
iki:
if atlat=1 and oy=5 then prgyaz
if asagi=1 then suna
if yukari= 1 then zeki
if okey=1 then git2
goto iki
suna:
A=3
lcdout $fe,1
i=0
for i=0 to 8
read i+9,w[i]
lcdout $fe,$84+i,w[i]
next i
i=0
for i=0 to 8
read i+18,w[i]
lcdout $fe,$c0," =>"
lcdout $fe,$c4+i,w[i]
next i
pause 200
while okey=1 or asagi=1 or yukari=1
wend
uc:
if atlat=1 and oy=5 then prgyaz
if asagi =1 then yelda
if yukari= 1 then metin
if okey=1 then git3
goto uc

yelda:
A=4
lcdout $fe,1
i=0
for i=0 to 8
read i+18,w[i]
lcdout $fe,$84+i,w[i]
next i
i=0
for i=0 to 8
read i+27,w[i]
lcdout $fe,$c0," =>"
lcdout $fe,$c4+i,w[i]
next i
pause 200
while okey=1 or asagi=1 or yukari=1
wend
dort:
if atlat=1 and oy=5 then prgyaz
if asagi=1 then ayse
if yukari= 1 then suna
if okey=1 then git4
goto dort

ayse:
A=5
lcdout $fe,1
i=0
for i=0 to 8
read i+27,w[i]
lcdout $fe,$84+i,w[i]
next i
i=0
for i=0 to 8
read i+36,w[i]
lcdout $fe,$c0," =>"
lcdout $fe,$c4+i,w[i]
next i
pause 200
while okey=1 or asagi=1 or yukari=1
wend
bes:
if atlat=1 and oy=5 then prgyaz
if yukari= 1 then yelda
if asagi=1 then yasin
if okey=1 then git5
goto bes

yasin:
A=6
lcdout $fe,1
i=0
for i=0 to 8
read i+36,w[i]
lcdout $fe,$84+i,w[i]
next i
i=0
for i=0 to 8
read i+45,w[i]
lcdout $fe,$c0," =>"
lcdout $fe,$c4+i,w[i]
next i
pause 200
while okey=1 or asagi=1 or yukari=1 or asagi=1
wend
alti:
if atlat=1 and oy=5 then prgyaz

if yukari= 1 then ayse
if asagi=1 then
oy =0
goto baba
endif
if okey=1 then git6
goto alti

prgyaz:
  lcdout $fe,1
pause 100
while atlat=1:wend
if a=1 then adap1
if a=2 then adap2
if a=3 then adap3
if a=4 then adap4
if a=5 then adap5
if a=6 then adap6
adap1:
i=0
for i=0 to 8
read i,w[i]
lcdout $fe,$84+i,w[i]
next i
goto yemis
adap2:
i=0
for i=0 to 8
read i+9,w[i]
lcdout $fe,$84+i,w[i]
next i
goto yemis
adap3:
i=0
for i=0 to 8
read i+18,w[i]
lcdout $fe,$84+i,w[i]
next i
goto yemis
adap4:
i=0
for i=0 to 8
read i+27,w[i]
lcdout $fe,$84+i,w[i]
next i
goto yemis
adap5:
i=0
for i=0 to 8
read i+36,w[i]
lcdout $fe,$84+i,w[i]
next i
goto yemis
adap6:
i=0
for i=0 to 8
read i+45,w[i]
lcdout $fe,$84+i,w[i]
next i
yemis:
i=0
t=w[i]
wer:
  if t >100 then t=65
  if t <36 then t=65
if atlat =1 then er
if yukari=1 then t=t+1
while yukari=1:wend
if asagi =1 then t=t-1
while asagi=1:wend
lcdout $fe,$0c
lcdout $fe,$84+i,t
lcdout $fe,$10
lcdout $fe,$0d
if okey=1 then gec
goto wer
gec:

pause 250
while okey=1:wend
er:
w[i]=t
i=i+1
t=w[i]
if atlat=1 then yaz
if i=9 then yaz
goto wer
yaz:
if a=1 then yaz1
if a=2 then yaz2
if a=3 then yaz3
if a=4 then yaz4
if a=5 then yaz5
if a=6 then yaz6
goto yaz
yaz1:
i=0
for i=0 to 8
write i,w[i]
pause 10
next i
goto derece
yaz2:
i=0
for i=0 to 8
write i+9,w[i]
pause 10
next i
goto derece
yaz3:
i=0 
for i=0 to 8
write i+18,w[i]
pause 10
next i
goto derece
yaz4:
i=0
for i=0 to 8
write i+27,w[i]
pause 10
next i
goto derece
yaz5:
i=0
for i=0 to 8
write i+36,w[i]
pause 10
next i
goto derece
yaz6:
  i=0
for i=0 to 8
write i+45,w[i]
pause 10
next i
derece:
lcdout $fe,$0c
pause 100
lcdout $fe,1,"   MOTOR SURE"
PAUSE 100
WHILE okey=1
WEND
WHile atlat =1
wend
ayar1:
c=120
ay1:
if yukari=1 then c=c+1
while yukari=1:wend
if asagi=1 then c=c-1
while asagi=1:wend
lcdout $fe,$c4,#c," (sn)"
if okey=1 then deryaz
if c=59 then c=60
if c=255 then c=254
goto ay1
deryaz:
if a=1 then deryaz1
if a=2 then deryaz2
if a=3 then deryaz3
if a=4 then deryaz4
if a=5 then deryaz5
if a=6 then deryaz6
goto deryaz
deryaz1:
write 54,c
pause 10
goto kurzam
deryaz2:
write 60,c
pause 10
goto kurzam
deryaz3:
write 66,c
pause 10
goto kurzam
deryaz4:
write 72,c
pause 10
goto kurzam
deryaz5:
write 78,c
pause 10
goto kurzam
deryaz6:
write 84,c
pause 10
kurzam:
pause 100
while okey=1:wend
lcdout $fe,1," DURULAMA SURE"
PAUSE 100
d=12
kura:
if yukari=1 then d=d+1
while yukari=1:wend
if asagi=1 then d=d-1
while asagi=1:wend
lcdout $fe,$c4,dec2 d," (sn)"
if okey=1 then kuryaz
if d=255 then d=0
if d=91 then d=90
goto kura
kuryaz:
  if a=1 then kuryaz1
if a=2 then kuryaz2
if a=3 then kuryaz3
if a=4 then kuryaz4
if a=5 then kuryaz5
if a=6 then kuryaz6
goto kuryaz
kuryaz1:
  write 55,d
pause 10
goto baba
kuryaz2:
write 61,d
pause 10
goto baba
kuryaz3:
write 67,d
pause 10
goto baba
kuryaz4:
write 73,d
pause 10
goto baba
kuryaz5:
write 79,d
pause 10
goto baba
kuryaz6:
write 85,d
pause 10
goto baba
 
git1:
read 54,C
read 55,D
goto kurutma
git2:
read 60,C
read 61,D
goto kurutma
git3:
read 66,C
read 67,D
goto kurutma
git4:
read 72,C
read 73,D
goto kurutma
git5:
read 78,C
read 79,D
goto kurutma
git6:
  read 84,C
read 85,D
goto kurutma
kurutma:
lcdout $fe,1,"MOTOR CALISIYOR"
pause 250
m=0
 
  lan:
  FOR i=0 to c
  LCDOUT $fe,$c2,dec3 m,"     ",dec3 m
  high motor
  m=m+1
  pause 330
  if c=m then yallah
  if kapak =0 then
  gosub kolpa
  endif
  if atlat = 1 then baba
  if okey =1 then yallah
if acilstop =0 then aci
if termik =0 then ter
   pause 330
  if c=m then yallah
  if kapak =0 then
  gosub kolpa
  endif
  if atlat = 1 then baba
  if okey =1 then yallah
if acilstop =0 then aci
if termik =0 then ter
   pause 330
  if c=m then yallah
  if kapak =0 then
  gosub kolpa
  endif
  if atlat = 1 then baba
  if okey =1 then yallah
if acilstop =0 then aci
if termik =0 then ter
  next
  goto lan
yallah:
low motor
lcdout $fe,1,"DURULAMA CALIS"
pause 250
m=0
  pause 3000
  bilader:
  FOR i=0 to d
  LCDOUT $fe,$c2,dec3 m,"     ",dec3 m
  high DURULAMA
   m=m+1
  pause 330
  if D=m then baba
  if kapak =0 then
  gosub kulp
  endif
  if atlat =1 then baba
if acilstop =0 then aci
if termik =0 then ter
  pause 330
  if D=m then baba
  if kapak =0 then
  gosub kulp
  endif
  if atlat =1 then baba
if acilstop =0 then aci
if termik =0 then ter
  pause 330
  if D=m then baba
  if kapak =0 then
  gosub kulp
  endif
  if atlat =1 then baba
if acilstop =0 then aci
if termik =0 then ter
  next
  goto bilader 
  kolpa:
   lcdout $fe,1,"   KAPAK ACIK"
  pause 100
  low motor
  low durulama
  arzu:
  if kapak =1 and okey =1 then laf
  goto arzu
  laf:
   lcdout $fe,1,"MOTOR CALISIYOR"
  pause 200
  while okey =1
  wend
  return
  aci:
   lcdout $fe,1,"  SU ALINIYOR"
   LCDOUT $FE,$C0,"  BEKLEYIN..."
   pause 100
  low motor
  acs:
  if acilstop =1 then fistik
  goto acs
  ter:
   lcdout $fe,1,"  TERMIK ATMIS"
  pause 100
  low motor
  low durulama
  terle:
  if okey=1 then baba
  goto terle
  kulp:
     lcdout $fe,1,"   KAPAK ACIK"
  pause 100
  low motor
  low durulama
  sym:
  if kapak =1 and okey =1 then bajaj
  goto sym
bajaj:
   lcdout $fe,1,"DURULAMA CALIS"
  pause 200
  while okey=1
  wend
  return
fistik:
lcdout $fe,1," ISLEM TAMAM"
LCDOUT $FE,$C0,"  OKEY'e BAS "
   pause 100
vali:
if okey=1 then zeki
goto vali

ete

Çok mantıklı bir istek değil bu. Neden dersen her sn bir kayıt almak zorunda kalırsın. Programın her kademesine bir numara vermen gerekecek. Kademe isimli bir değişken tanımla ve her bölüm yada yer bir kademe numarasına sahip olsun. Dolayısıyla program nereye giderse oranın kademe numarasını alsın ve oradaki çalışma esnasında hem kademe numarası hemde sn değeri kayıt edilsin.
Bu  işlem sonunda eprom kayıt ömrünü kısa sürede doldurabilirsin. Bunu unutma.
Bunun yerine şebekden gelen voltajı kondansatörsüz bir besleme ile pic bacağına gir ve oranın low a düşüp düşmediğini sürekli kontrol et. Pic beslemesi ise en azından 20.000 uF lık bir kondansatörle olsun. Regülesiz besleme girişi low olur olmaz sistem hemen kademe ve zaman kayıdını alıp programı sonlandırır. Kondansatör değeri buna izin verecek şekilde yeterince büyük olmalıdır 20.000 uF değerini öylesine söyledim belki 10.000 uF da yetebilir. Burada önemli olan diğer şebeke girişinin kondansatörsüz veya nf cinsinden bir kondansatörle verilmesi dir böylece şebeke kesildiği anda o pin anında low olacaktır.
Ete

efeworld

Değerli bilgileriniz için çok teşekkür ederim hocam.Allah razı olsun

Powered by EzPortal