Mikrobasic de LCD ye integer değeri nasıl yazdırabiliriz?

Başlatan 35badboy35, 13 Şubat 2011, 12:30:46

35badboy35

Arkadaşlar selam. Öncelikle konuyu daha iyi anlatabilmek için deneme amaçlı yazmış olduğum MicroBasic kodlarını aşağıda sizlere verdim.
--------------------------------------------------------------------------------------------
program RDS

' Declarations section

dim txt1 as char[20]

' Lcd module connections

dim
  LCD_RS as sbit at RB2_bit
  LCD_EN as sbit at RB3_bit
  LCD_D7 as sbit at RB7_bit
  LCD_D6 as sbit at RB6_bit
  LCD_D5 as sbit at RB5_bit
  LCD_D4 as sbit at RB4_bit

dim
  LCD_RS_Direction as sbit at TRISB2_bit
  LCD_EN_Direction as sbit at TRISB3_bit
  LCD_D7_Direction as sbit at TRISB7_bit
  LCD_D6_Direction as sbit at TRISB6_bit
  LCD_D5_Direction as sbit at TRISB5_bit
  LCD_D4_Direction as sbit at TRISB4_bit

' End Lcd module connections

main:

TRISB = 0
PORTB = 0
ADCON1 = 0  ' Configure AN pins as digital I/O

txt1="selam"

Lcd_Init()

DONGU:

Lcd_Cmd(_LCD_CURSOR_OFF)       ' Cursor off
Lcd_Out(1,1,txt1)                           ' Write text in first row

GOTO DONGU

end.


-------------------------------------------------------------------------------
Şimdi bu kod üzerinden sormak istediğim bir soru var, ben MicroBasic te karakter LCD nin ekranına yazı yazdırabiliyorum. Buraya kadar herşey güzel, ama LCD ler sadece üzerlerine yazı yazdırılmak için kullanılmıyor tabiki. Benim üzerinde çalıştığım projede pic in bir şekilde algıladığı verileri integer hatta float tipinde sabitlere atadıktan sonra bu sayı değerlerini LCD ye girebilmem gerekiyor. Bu Lcd_Out(1,1,txt1) komutunda txt1 değişkenini nasıl kullanayımki veya nasıl bir metod uygulayımki LCD de pic in algıladığı sayısal verileri gösterebileyim. Benim için önemli bir konu, yardımlarınızı bekliyorum. Şimdiden çok teşekkürler herkeze.

NOT:  
PicBasic te bu işlem,
...
LCDOUT  $FE,$8A,DEC V

şeklinde yapılabiliyordu.

jimraynor

integer ve float yapilarini text formatina cevirmek icin hazir kütühaneleri var. help dosyasinda inttostr floattostr isimli fonksiyonlari incele. coversation gibi bir başlik altinda toplanmiş olmali.

35badboy35

 jimraynor yardımların için teşekkürler. Yanlız şöyle bir sorun yaşıyorum şimdide, IntToStr dönüştürücüsünü kullandığımda dönüşüm yapılıyor ama LCD ye diyelimki ben Birinci Satır - Birinci Sütüna yazdırdığımda verileri yani kodu böyle yazdığımda veri LCD nin 3. veya 4. satırına yazılıyor. Bunun sebebi nedir acaba bununla ilgili bir bilgin var mı ?

jimraynor

interger ile +32bin -32 bin arasında sayı yazabildiğinden dolayı ilk başları boş bırakıyor. Bir nevi sayıyı lcdye yazarken sağa dayalı olarak yazmış oluyor. sayıları tek tek lcdde saydırmaya çalışırsan bunu rahatlıkla fark edersin.

35badboy35

Peki anladım durumu. Yardımların için çok teşekkürler.

MrDarK

Belki standart bir cevap olmayacak bu cevabım ama işini görebilir. Eğer amacın sadece sayıyı karaktere çevirmekse; interger bir sayıyı + 30 ile toplarsan o sayının karakter tablosundaki değerini elde edersin ;)
Picproje Eğitim Gönüllüleri ~ MrDarK

XX_CİHAN_XX

Alıntı yapılan: MrDarK - 20 Şubat 2011, 16:18:29
Belki standart bir cevap olmayacak bu cevabım ama işini görebilir. Eğer amacın sadece sayıyı karaktere çevirmekse; interger bir sayıyı + 30 ile toplarsan o sayının karakter tablosundaki değerini elde edersin ;)
Tabi bu sayının hex 30 olması gerekir.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

35badboy35

MrDarK ve XX_CİHAN_XX arkadaşlarım benim aslında yapmak istediğim Karakter LCD ye float yada integer tipinde bir değer yazdırmaktı, ama bunu yaparken istediğim Lcd_Out(1,1,"10") gibi birşey değil tabiki. Daha çok bu Lcd_Out(1,1,txt1) komutundaki txt1 değişkeni içerisine atayacağım integer veya float tipi değişkenleri LCD ye yazdırmak istiyorum. Buradaki amacım şu, örneğin ADC den gelen dijital bilgi üzerinde bir takım matematiksel işlemler yaptıktan sonra çıkan sonucu txt1 değişkenine yazdırmalıyım. İşte bu değeride LCD de göstermeliyim. Yani örneğim bir sistemim var ve bu sistem pil ile çalışıyor. Bende sistemimdeki pilin durumunu LCD ekranımda görmek istiyorum (6.75 volt gibi). Bu işi gerçekleştirebilmek için bu soruyu sormuştum.

XX_CİHAN_XX

Basic' te bu tür işlemler için hazır fonksiyonlar vardır. Bu dile hakim arkadaşlar bir öneride bulunurlar.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

35badboy35

Diğer forumlardan da araştırdım ve sorunuma çözüm buldum yardımcı olan tüm arkadaşlarada teşekkür ediyorum herkeze kolay gelsin.

Maxim

Alıntı yapılan: 35badboy35 - 24 Şubat 2011, 11:56:33
Diğer forumlardan da araştırdım ve sorunuma çözüm buldum yardımcı olan tüm arkadaşlarada teşekkür ediyorum herkeze kolay gelsin.

rica ederiz,
sakın açıklamayın sır olarak sizde kalsın çözüm .

35badboy35

Aradığım sorunun cevabı aşağıdaki programdır.

program LCD_Float

' Lcd module connections
dim LCD_RS as sbit at RB4_bit
LCD_EN as sbit at RB5_bit
LCD_D4 as sbit at RB0_bit
LCD_D5 as sbit at RB1_bit
LCD_D6 as sbit at RB2_bit
LCD_D7 as sbit at RB3_bit

LCD_RS_Direction as sbit at TRISB4_bit
LCD_EN_Direction as sbit at TRISB5_bit
LCD_D4_Direction as sbit at TRISB0_bit
LCD_D5_Direction as sbit at TRISB1_bit
LCD_D6_Direction as sbit at TRISB2_bit
LCD_D7_Direction as sbit at TRISB3_bit
' End Lcd module connections

dim orj_ondalik_sayi as float
dim orj_ondalik_text as string[11]


sub procedure LCD_Float(dim satir, sutun, ondalik_sayi as float, dim digits as byte)
dim temp_string as string[17]
dim zx as byte

FloatToStr(ondalik_sayi, temp_string)
zx = 0
while (temp_string[zx] <> ".")
zx = zx + 1 'ondalık string içeriğinde noktayı bulana kadar devcam et
wend

if digits > 0 then
zx = zx + digits + 1
if (temp_string[zx] >= "5") then
if (temp_string[zx - 1] <> "9") then
temp_string[zx - 1] = temp_string[zx - 1] + 1
end if
end if
end if
temp_string[zx] = $00
Lcd_Out(satir, sutun, temp_string)
end sub

main:
ADCON1 = 7
INTCON = 0 ' disable all interrupts

TRISC = 0
portc = 0

orj_ondalik_sayi = 123.4567

LCD_Init() ' init LCD on PORTB (for EasyPIC3 or lower)
LCD_Cmd(_LCD_CURSOR_OFF) ' turns of LCD cursor
LCD_Cmd(_LCD_CLEAR) ' clear LCD


while TRUE

Lcd_Out(1,1,"Orjinal: ")
FloatToStr(orj_ondalik_sayi, orj_ondalik_text)
Lcd_Out_CP(orj_ondalik_text)

Lcd_Out(2,1,"Tamsayi: ")
LCD_Float(2, 10, orj_ondalik_sayi, 0) 'digit 0 olursa tamsayı olarak ekrana yazar

Lcd_Out(3,1,"1 hane: ")
LCD_Float(3, 10, orj_ondalik_sayi, 1)

Lcd_Out(4,1,"2 hane: ")
LCD_Float(4, 10, orj_ondalik_sayi, 2)

Delay_ms(700) ' delay 700ms
wend
end.

"Başka bir forumdan alıntıdır."