LCD de satırlara kutu yapılması ve yanıp sönmesi??

Başlatan davul42, 25 Mart 2011, 18:55:27

davul42

2*16 Lcd var elimde..Resimdeki gibi istediğim ekrana kutu yapmam için hangi yolu izlemem gerekiyor ve diğer bir şekildede sıra sıra her bir kutunun baştan başlıyarak ilerlemesini istiyorum yardım ederseniz çok iyi olur..sağolun dostlar
http://img138.imageshack.us/i/0108lcd2.gif/

Maxim

istenen şey forumda var, daha önce yapıldı denendi yayınlandı hemde birkaç defa
örnek kodlarına kadar hepsi var
arama yapınız
bar lcd diye aranırsa çıkması lazım

davul42

LCD lerde kendinin tanımlayabileceğin 8 adet karekter vardır.
Bu karekterlerin her biri için ise 8 adet data olması gerekir. Bu datalar üreteceğin karektere göre hesaplanmaktadır. Detaylarını zaten makaleden aldın sanırım.
Her bir karekterin birer yerleşme adresi var. Bunlar;
- $40  (0 nolu karekter için kullanılır)
- $48  (1 nolu karekter için kullanılır)
- $50  (2 nolu karekter için kullanılır )
- $58  (3 nolu karekter için kullanılır)
- $60  (4 nolu karekter için kullanılır)
- $68  (5 nolu karekter için kullanılır)
- $70  (6 nolu karekter için kullanılır)
- $78  (7 nolu karekter için kullanılır)
Bu adreslerden hangisine karekter datalarını yazmış isen program içinde ona ait karekter numarasını kullanarak ilgili karekteri ekranda yazdırabilirsin.
Örnek vereyim;
LCDOUT $FE,$58,$0E,$10,$10,$0E,$01,$05,$1E,$04 'Ş dataları
Bu ifade Ş harfine ait dataları içermektedir. Adres olarak da $58 kullanılmış. O halde bu karekteri kullanmak için programda 3 rakamını kullanacaksın demektir. Yani AŞIK yazdırabilmen için şöyle yapman gerekli;
LCDOUT $FE,1,"A",3,"IK"
Diyelimki Ş harfine ait dataları 0 nolu karektere ait olan $40 adresine koyduk;
LCDOUT $FE,$40,$0E,$10,$10,$0E,$01,$05,$1E,$04 'Ş dataları
Bu durumda AŞIK yazdırabilmen için şöyle yapman gerek;
LCDOUT $FE,1,"A",0,"IK"
hepsi bu kadar.  Yalnızca Ş harfini yazdırman için LCDOUT  $fe,1,0 yazman yeterli oluyor. Demekki karekter numarasını yazarsan o karekteri ekrana getirebiliyorsun. Yalnızca dikkat etmen gereken husus karekterin yazılacağı yeri iyi tayin etmek olacaktır.

Ete arkadaşımız sağolsun iyi anlatmış ordan olayı çözdüm..

Ama son bir sorum olacak size özel karakterlerin data kodlarını nasıl buluyoruz...
Mesela Ş ninki hocamızın yaptığı gibi
print $FE,$58,$0E,$10,$10,$0E,$01,$05,$1E,$04
Yarım Bar ınki
print $FE,$40,$18,$18,$18,$18,$18,$18,$18,$18
gibi...
yani bu kodları biz nasıl kodluyacaz...Teşekkür ederim...

Mucit23

Bu iş için yapılmış ufak programlar var. LCD ekranda istedğin şekli oluşturup datalarını alabiliyorsun.
LCD_KarakterMatik_-_DC_v5.5

omereliusuk

#4
Cursor1,1
Print $FF
$ff bahsettiğiniz tam dolu simgeyi ifade ediyor<kaynak datasheet>. ayrıca ve de boşu boşuna lcdnin hafızasını doldurmayın derim. tabi yine de siz bilirsiniz.
bir de lcd'nin datasheet ini incelerseniz bu bahsettiğiniz cevapları bulabilirsiniz.

davul42

biraz daha pratik yaparak bu konuyu daha iyi anlayacağım..yardımlarınız için teşekkür ederim...

TMR0 sayacı kesmesiyle yaptığım saat devresinde bölme oranlarını veya osilatör değerlerini değiştirerek gerçek zamanı tuturmaya çalıştığımızı biliyorum fakat bi sorum olacak bu değerleri değiştirmem dışında birde kullandığım sayac değişkeninin değerini değiştyirerekte ayarlayabilirmiyim.
yani ete hocanın örneğiyle;
'****************************************************************
'* Name : KESMETMR0.BAS *
'* Author : [Erol Tahir Erdal] *
'* Notice : Copyright (c) 2005 [ETE] *
'* : All Rights Reserved *
'* Date : 23.04.2005 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
PORTA=0:portb=0
TRISB=%00000000 'PortB tamamı çıkıs yapıldı.
TRISA=%00000000 'A portu tamamı çıkıs yapıldı.
'-----------------------------------------------------------------
@ DEVICE pic16F628 'islemci 16F628
@ DEVICE pic16F628, WDT_OFF 'Watch Dog timer kapalı
@ DEVICE pic16F628, PWRT_ON 'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF 'Kod Koruma kapalı
@ DEVICE pic16F628, MCLR_off 'MCLR pini kullanılıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanılacak
'-----------------------------------------------------------------
DEFINE LCD_DREG PORTB 'LCD data bacakları hangi porta baglı?
DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten baslıyor?
DEFINE LCD_EREG PORTB 'LCD Enable Bacagı Hangi Porta baglı?
DEFINE LCD_EBIT 3 'LCD Enable Bacagı Hangi bite baglı ?
define LCD RWREG PORTB 'LCD R/W Bacagı Hangi Porta baglı?
define LCD_RWBIT 2 'LCD R/W Bacagı Hangi bite baglı ?
DEFINE LCD_RSREG PORTB 'LCD RS Bacagı Hangi Porta baglı ?
DEFINE LCD_RSBIT 1 'LCD RS bacagı Hangi Bite baglı ?
DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak baglı?
DEFINE LCD_LINES 2 'LCD Kaç sıra yazabiliyor
'-------------------------------------------------------------------------
ON INTERRUPT GoTo KESME 'kesme olusursa KESME adlı etikete git.
OPTION_REG=%10000101 'Pull up dirençleri PTAL- Bölme oranı 1/64.
INTCON=%10100000 'Kesmeler aktif ve TMR0 kesmesi aktif
TMR0=0
CMCON=7 '16F628 de komparatör pinleri iptal hepsi giris çıkıs
'----------------------------------------------------------------------------
SAYAC VAR BYTE
SN VAR BYTE
DAK VAR BYTE
SAAT VAR BYTE
GUN VAR BYTE
'-----------------------------------------------------------------------------
CLEAR 'tüm degiskenler sıfırlandı
PAUSE 200
LCDOUT $FE,1
LOW PORTB.2 'LCD -R/W bacagı LOW'a çekildi.
'-----------------------------------------------------------------------------
BASLA:
LCDOUT $FE,$84,DEC2 SAAT,":",DEC2 DAK,":",DEC2 SN
GOTO BASLA
DISABLE
KESME:
SAYAC=SAYAC+1 'kesme sayacı 1 sn= 61(sayac) x 256 (Tmr0) x 64 (bölme)
--------------------------------------------------------------------------------------
IF SAYAC=61 then '61 adet kesme olunca 1 sn. süre geçiyor.(999424 us)SAYAC=0 'sayaç sıfırlanıyor "------------------------------------------------------------------------------------
SN=SN+1 'saniye degeri bir artırılıyor
IF SN=60 THEN 'saniye 60 olmus ise 1 dakika süre geçti o halde
SN=0 ' saniye sıfırlanıyor
DAK=DAK+1 ' dakika degeri bir artırılıyor
IF DAK=60 THEN 'dakika 60 olmus ise 1 saat süre geçti
DAK=0 ' dakika sıfırlanıyor
SAAT=SAAT+1 ' saat degeri bir artırılıyor
IF SAAT=24 THEN 'saat 24 olmus ise 1 gün geçti
SAAT=0 'saat sıfırlanıyor
GUN=GUN+1 'gün degeri bir artırılıyor
IF GUN=365 THEN GUN=0 'gün 365 olmus ise
ENDIF 'gün sıfırlanıyor 1 yıl geçti
ENDIF
ENDIF
ENDIF
INTCON.2=0 'TMR0 Kesme bayragı sıfırlanıyor
RESUME
ENABLE
END
'-----------------------------------------------------------------------------------
61 DEĞİŞKEN DEĞERİNİ DEĞİŞTİREREK GERÇEK ZAMANI AYARLAYABİLİRMİYİM VE KOMUT VERME SIRASINDA
BUNUN PROGRAMA BİR ZARARI OLURMU..ÇÜNKÜ SAAT DIŞINDA PİC %80 Nİ KADAR PROGRAMLI(16F877)..TŞK EDERİM..