lcd ekranda 1234 sayısını nasıl yazdırabilirim

Başlatan emreemre, 23 Nisan 2015, 14:54:18

emreemre

bu konuda hiç bi fikrim yok tek tek dikeyleri ve yatayları tanımlayabiliyorken ekranda nasıl 1234 sayısını elde edecegimi anlamamış durumdayım 4 yerine 5 yazdım yanlışlıkla bunu nasıl silip 4 yapacagım hocam yazdıgınız örnekleri tekrar tekrar bakıyorum yazmaya çalışıyorum ama olmuyor lütfen bana bi çözüm yolu söyleyin veya bitane örnek yazabilcek arkadaş arıyorum yani durumum ekranda 1234 yazarken 1 sayısına bastıgımda ekranda * işaretini görecegim lütfen yardımcı olun nasıl 1234 yazdıracagım çözüm yolu bulamadım :(

ete

Bu şekilde mesaj yazarsan cevap alabileceğini sanmıyorum. Bu nedenle seni uyarmak istedim.
Bir şeylerden bahsediyorsun ama anlamak için müneccim olmak gerek. Hadi tecrübe ve yazı içinde geçen kelimelerden bir tuş takımı taraması yaptığını anladığımı farzedelim. Hangi dili kullanıyorsun belli değil, Ortada bir şema yok. Nasıl cevaplarım ki bu soruları. Ancak aşağıdakişekilde olur.
10 tabanına göre sayı sisteminin özelliklerini kullanarak ard arda basılmış rakam değerlerini tek rakama çevirip ekranda gösterebilirsin. Örnek vereyim, Basılan tuşlar TUS isimli değişkende ekrandaki sayı gösterimide SAYI isismli WORD değişkeninde saklanacak olsun.
1 tuşuna bastın TUS=1 oldu.   SAYI=SAYI*10+TUS formülüne bunu uygularsan SAYI=0 * 10 +1=1 olacaktır.
2 tuşuna bastın TUS=2 oldu   SAYI=1 * 10 +2=12 oldu
3 tuşuna bastın TUS=3 oldu   SAYI=12*10+3=123 oldu.
Sayı değerini ekrana direk yazdırırsan ekranda her basılan tustan sonra oluşan SAYI değerini görürsün.
Sen basılan tuş değeri yerine "*" görmek istiyorsan ekrana her tuş için 1 adet * yazdırırsın olur biter.

Ete

emreemre


emreemre

hocam tekrar tekrar denedigim halde olmuyor
buyrun ekte yardımcı olun lütfen

ete

Program dediğin şey iki satır kod ve Proton ile yazılmış Ben proton kullanmıyorum yardımcı olamayacağım maalesef.
Ete

emreemre

haddimi fazla aşıyorum ama bununla ilgili son sorum olacak micro code ile yazmaya çalışsam nasıl bir kod yazarım bununla ilgili yardımcı olurmusunuz

ete

Biraz arama zahmetine neden girmiyorsun. Bak Basic Dersleri diye 14 derslik ders notu yayınlamışım. İçinde Tuş takımı kullanımıda mevcut.
http://etepic.com/index.php/topic,19.0.html
Linkinde verilen deri aç baştan sona oku yada sana gerekli olan kısmını oku. Öğren bir şeyler sonra yapmaya çalış takıldığın yeri sor.

Ete

emreemre

hocam saolun teşekkür ederim sonunda yapmayı başardım ve şimdi de şöyle birşey yapmam gerekiyor
keypaddan her bastıgım tuş için ekranda "*" bunu görecegim yardımcı olurmusunuz

ete

Yaptım dediğin şey çalışmıyor. TRISB ayrın yanlış bence.  Giriş pinlerin PORTB.0-PORTB.1-PORTB2 pinleri ama sen PORTB.1-PORTB.2-PORTB.3 olarak ayarlamışsın. Dolayısıyla sol sütun çalışmıyor.

Aşağıdaki programı dene bakalım;

Device 16F877A

TRISB=%00000111

TUS VAR Byte
SAYI VAR Word
SIRA VAR BYTE

Declare LCD_DTPIN PORTD.4
Declare LCD_ENPIN PORTD.3
Declare LCD_RSPIN PORTD.2
Declare LCD_INTERFACE 4
Declare LCD_LINES 2

Symbol YATAY_A= PORTB.4
Symbol YATAY_B= PORTB.5
Symbol YATAY_C= PORTB.6
Symbol YATAY_D= PORTB.7
Symbol DIKEY_1= PORTB.1
Symbol DIKEY_2= PORTB.2
Symbol DIKEY_3= PORTB.3
CMCON=7
OPTION_REG.7=0

Tus=0
DelayMS 200
Print At 1,1,"SIFRE GIR"
Print At 2,1,"SIFRE=>"
BASLA:
PORTB =254
YATAY_A=0
If DIKEY_1=0 Then
  Tus=1:GoSub EKRAN
  While DIKEY_1=0:Wend
EndIf

If DIKEY_2=0 Then
  Tus=2:GoSub EKRAN
  While DIKEY_2=0:Wend
EndIf
       
If DIKEY_3=0 Then
Tus=3:GoSub EKRAN
While DIKEY_3=0
Wend
EndIf
High YATAY_A

YATAY_B=0
If DIKEY_1=0 Then
Tus=4:GoSub EKRAN
While DIKEY_1=0
Wend
EndIf

If DIKEY_2=0 Then
Tus=5:GoSub EKRAN
While DIKEY_2=0
Wend
EndIf

If DIKEY_3=0 Then
Tus=6:GoSub EKRAN
While DIKEY_3=0
Wend
EndIf
High YATAY_B

YATAY_C=0
If DIKEY_1=0 Then
Tus=7:GoSub EKRAN
While DIKEY_1=0
Wend
EndIf
If DIKEY_2=0 Then
Tus=8:GoSub EKRAN
While DIKEY_2=0
Wend
EndIf
If DIKEY_3=0 Then
Tus=9:GoSub EKRAN
While DIKEY_3=0
Wend
EndIf
High YATAY_C
YATAY_D=0
If DIKEY_1=0 Then
'Tus=11:THEN PROGRAMA_GIRIS
While DIKEY_1=0
Wend
EndIf
If DIKEY_2=0 Then
Tus=0:GoSub EKRAN
While DIKEY_2=0
Wend
EndIf
If DIKEY_3=0 Then
SAYI=SAYI/10
While DIKEY_3=0
Wend
EndIf
High YATAY_D
DelayMS 100
GoTo BASLA
EKRAN:
If TUS=12 Then
SAYI=SAYI/10
TUS=0
GoTo ATLA
EndIf
SAYI=SAYI*10+TUS
ATLA:
Print At 2,(8+SIRA),"*"
SIRA=SIRA+1
IF SIRA=4 then SIRA=0
Return
End


emreemre

#9
hocam tekrar soruyorum ama ben tus=11 ve tus=12 ye bastıgım "*" bu işareti almak istemiyorum tus=11 i kendime göre progma giriş tuşu yapıcam tus=12 ise yanlış yazdıgım tus için mesela söyle sifre 1234 yaptım ama ben yazarken 1235 yazdım onu 5 i silip 4 yapmak için kullanıcam. sıra adında ayrı tanımlamamışsınız ben "sıra var word" şeklinde yaptım bu dogru mu?

teşekkürler

ete

Önceki mesajımda verdiğim programı son isteğe göre değiştirdim.  Bazı şeyleri kandinde yapabilirsin. Biraz düşünüp mantığını çalıştırman kafi aslında. Neden hiç bir şey düşünmüyorsun. Bir isteğin var mesela;
- 11 tuşuna basıldığı zaman Programa giriş tuşu yapacağım diyorsun. O halde GIRIS diye bir altprogramın olmalı. Bu tuşa basılıncada program oraya gitmeli nasıl gidebilir. Tabiiki o tuşa basıldığını tespit ettiğin yerde bu işi yapman gerek.
If DIKEY_1=0 Then
Tus=11:THEN PROGRAMA_GIRIS
While DIKEY_1=0
Wend
EndIf

şeklinde yapabilirsin.

Diğer tuşyani 12 ye basılınca önceki girilmiş sayıyı silecek sayı nasıl silinir? Farzedelim elinde 1235 sayısı var sondaki 5 yerine aslında 4 yazacaktın 5 yazmışsın bunu silmen gerekiyor. Yapılacak iş gayet basit SAYI=SAYI/10 dersen otomatikman son hane silinmiş olmazmı sence. Normal hesapmakinasında yaparsan bu işlemi 123,5 bulursun ama pic matematiği yalnızca tam sayılarla çalıştığı (integer matematiği) için çıkan sonuç 123 olacaktır. Hemen Burada sıra değerinide bir eksiltmek gerekir elbette. Böylece yeni girilecek sayı kendi yerine girecektir.
Şöyle;
If DIKEY_3=0 Then
Tus=12:SAYI=SAYI/10:SIRA=SIRA-1:IF SIRA=255 then SIRA=0
While DIKEY_3=0
Wend
EndIf

Sıra eksiltmeyi yukardaki program ailave etmedim sen edersin artık.
Düşününce çok zor değil görüyorsun.

Ete

emreemre

evet hocam zor degil görüyorum ben bu işlerle kendim ugraşıyorum sizin verdigin derslerle tutunuyorum okulda böle bir dersim yok  12de olacakmış ben 11 sınıfım saolun hocam allah razı olsun elinize saglık :)

teşekkürler

emreemre

#12
'birer arttırarak yazma
Print At 2,(8+SIRA),"*"     
SIRA=SIRA+1
If SIRA=4 Then SIRA=0


'silme olayı
If DIKEY_3=0 Then
Tus=12:SAYI=SAYI/10:SIRA1=SIRA-1
print at 2,(sıra-sıra1)," "
IF SIRA1=255 then SIRA1=0
While DIKEY_3=0
Wend
EndIf

ben niyye yapamıyorum acaba yeterince düşündügümü düşünüyorum 10 yollla yazdım olmadı işte

ete

Bazen düşünürsün yaparsın bir şeyler ama uygulayınca yanlış olduğunu görürsün. Bu nedenle simulasyon bu işlerde önemlidir.
Nedenyapamadığını anlamak için bende kodu PBP da yazdım. Çalışan kod aşağıdadır. Ama sen buna bakarak kendi kodlarını düzeltmen gerekiyor.

Pek çok yeri aynıdır bazı tanımlamalar farklıdır yalnızca. Zorluk çekeceğini sanmam.
@ DEVICE PIC16f877A
@ DEVICE PIC16f877A, WDT_OFF
@ DEVICE PIC16f877A, BOD_ON
@ DEVICE PIC16f877A, PWRT_ON
@ DEVICE PIC16f877A, PROTECT_OFF
@ DEVICE PIC16f877A, XT_OSC
DEFINE OSC 4
CMCON=7
TRISB=%00000111

TUS  VAR Byte 56
SIRA VAR BYTE 57
SAYI VAR Word 60

DEFINE LCD_DREG  PORTD 'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT  4  'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG  PORTD 'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT  3  'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG PORTD 'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 2  'LCD RS 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


Symbol YATAY_A= PORTB.4
Symbol YATAY_B= PORTB.5
Symbol YATAY_C= PORTB.6
Symbol YATAY_D= PORTB.7
Symbol DIKEY_1= PORTB.0
Symbol DIKEY_2= PORTB.1
Symbol DIKEY_3= PORTB.2
CMCON=7
OPTION_REG.7=0

Tus=0
PAUSE 200
LCDOUT $FE,$80,"SIFRE GIR"
LCDOUT $FE,$C0,"SIFRE=>"
BASLA:
PORTB =254
YATAY_A=0
If DIKEY_1=0 Then
  Tus=1:GoSub EKRAN
  While DIKEY_1=0:Wend
EndIf

If DIKEY_2=0 Then
  Tus=2:GoSub EKRAN
  While DIKEY_2=0:Wend
EndIf
       
If DIKEY_3=0 Then
Tus=3:GoSub EKRAN
While DIKEY_3=0
Wend
EndIf
High YATAY_A

YATAY_B=0
If DIKEY_1=0 Then
Tus=4:GoSub EKRAN
While DIKEY_1=0
Wend
EndIf

If DIKEY_2=0 Then
Tus=5:GoSub EKRAN
While DIKEY_2=0
Wend
EndIf

If DIKEY_3=0 Then
Tus=6:GoSub EKRAN
While DIKEY_3=0
Wend
EndIf
High YATAY_B

YATAY_C=0
If DIKEY_1=0 Then
Tus=7:GoSub EKRAN
While DIKEY_1=0
Wend
EndIf
If DIKEY_2=0 Then
Tus=8:GoSub EKRAN
While DIKEY_2=0
Wend
EndIf
If DIKEY_3=0 Then
Tus=9:GoSub EKRAN
While DIKEY_3=0
Wend
EndIf
High YATAY_C
YATAY_D=0
If DIKEY_1=0 Then
'Tus=11:THEN PROGRAMA_GIRIS
While DIKEY_1=0
Wend
EndIf
If DIKEY_2=0 Then
Tus=0:GoSub EKRAN
While DIKEY_2=0
Wend
EndIf
If DIKEY_3=0 Then
SAYI=SAYI/10
LCDOUT $FE,($C7+SIRA)," "
SIRA=SIRA-1
While DIKEY_3=0
Wend
EndIf
High YATAY_D
PAUSE 100
GoTo BASLA
EKRAN:

SAYI=SAYI*10+TUS
ATLA:
LCDOUT $FE,$C8+SIRA,"*"
SIRA=SIRA+1
IF SIRA=5 then SIRA=0
Return
End

emreemre

Hocam bole yazarak basinizi agritiyorum evet ama lutfen bana kizmayin ozur dilerim kodlar icin saolun

Powered by EzPortal