LCD saatte 12-24 sorunu yardım lütfen..

Başlatan mcguiverali, 05 Mart 2008, 23:49:27

mcguiverali

Öncelikle yeniden herkese merhabalar..
Sorum sudur bu kodun 24 lük saat düzenine göre calışması gerekiyor fakat 12 lik calışıyor ben bi turlu cözemedim birde sizin görüşlerinize sunayım dedim yardımcı olursanız sevinirim..

2. sorum ise acaba adım adım debug edcek ve herhangi bi registerin(örn. bu kodda SAAT değiskeni) degerini anlık gösterebilecek bi program varmıdır..

Şimdiden teşekkür ederim saygılarımla..

DEFINE LCD_DREG    PORTB
 DEFINE LCD_DBIT    0
 DEFINE LCD_RSREG   PORTB
 DEFINE LCD_RSBIT   4
 DEFINE LCD_EREG    PORTB
 DEFINE LCD_EBIT    5
 DEFINE LCD_BITS    4
 DEFINE LCD_LINES   2
 
 SAAT VAR BYTE
 DSAAT VAR BYTE
 DAKIKA VAR BYTE
 SANIYE VAR BYTE
 TMR0_SAY VAR BYTE
 GUNCELLE VAR BYTE
 I VAR BYTE
 
 PAUSE 100
 
 SAAT=0
 DAKIKA=0
 SANIYE=0
 TMR0_SAY=0
 
 GUNCELLE=1
 
 OPTION_REG=%01010101
 INTCON=%10100000
 
 ON INTERRUPT GOTO TMR0_KESME
 
 TRISB=%00000000
 TRISA=%11111111
 
 
 ANADONGU:
 IF PORTA.0=1 THEN DAK_AZALT
 IF PORTA.1=1 THEN DAK_ARTTIR
 IF PORTA.3=1 THEN SAAT_AZALT
 IF PORTA.2=1 THEN SAAT_ARTTIR
 
 KONTROL:
 IF GUNCELLE=1 THEN 
 LCDOUT $FE,1
 DSAAT=SAAT
 IF(SAAT//12)=0 THEN
 DSAAT=DSAAT+12
 ENDIF
 IF SAAT<12 THEN
 LCDOUT DEC2 DSAAT,":",DEC2 DAKIKA,":", DEC2 SANIYE
 LCDOUT$FE,$C0,"SABAH"
 ELSE
 LCDOUT DEC2 (DSAAT-12),":",DEC2 DAKIKA,":", DEC2 SANIYE
 LCDOUT$FE,$C0,"OGLE"
 ENDIF
 GUNCELLE=0
 ENDIF
 GOTO ANADONGU:
 
 DAK_ARTTIR:
 DAKIKA=DAKIKA+1
 IF DAKIKA>=60 THEN
 DAKIKA=0
 SAAT=SAAT+1
 IF SAAT >=24 THEN
 SAAT=0
 ENDIF
 ENDIF
 GOTO ARK_SONDUR

 DAK_AZALT:
 DAKIKA=DAKIKA-1
 IF DAKIKA>=60 THEN
 DAKIKA=59
 SAAT=SAAT-1
 IF SAAT>=24 THEN
 SAAT=23
 ENDIF
 ENDIF
 GOTO ARK_SONDUR
 
 SAAT_AZALT:
 SAAT=SAAT-1
 IF SAAT<=0 THEN
 SAAT=24
 ENDIF
 GOTO ARK_SONDUR:
 
 SAAT_ARTTIR:
 SAAT=SAAT+1
 IF SAAT>=24 THEN
 SAAT=0
 ENDIF

 ARK_SONDUR:
 FOR I=1 TO 25
 PAUSE 10
 NEXT I
 GUNCELLE=1
 GOTO KONTROL
 DISABLE

 TMR0_KESME:
 TMR0_SAY=TMR0_SAY+1
 IF TMR0_SAY < 61 THEN KESME_SONU:
 TMR0_SAY=0
 SANIYE=SANIYE+1
 IF SANIYE>=60 THEN
 SANIYE=0
 DAKIKA=DAKIKA+1
 IF DAKIKA>=60 THEN
 DAKIKA=0
 SAAT=SAAT+1
 IF SAAT >=24 THEN
 SAAT=0
 ENDIF
 ENDIF 
 ENDIF
 GUNCELLE=1
 
 KESME_SONU:
 INTCON.2=0
 RESUME
 ENABLE
 END


Düşünmeden öğrenmek beyhude, öğrenmeden düşünmek, tehlikelidir.....

mucitotomasyon

kod inceleme icin proteus kullan  tektek komutları ilerletirin
birde 24 saat diye gösterecem ama 12 gözüküyo dion attrıtıgın sayacı kadar arttırman lazım basic den anlasam  sorununu bulurdum

kadirbas

Esasında Basic kullanmadığım için ben de bilmiyorum ama kodu incelediğimde hatayı farkettiğimi düşünüyorum.

DSAAT=SAAT
 IF(SAAT//12)=0 THEN
 DSAAT=DSAAT+12
 ENDIF
 IF SAAT<12 THEN
 LCDOUT DEC2 DSAAT,":",DEC2 DAKIKA,":", DEC2 SANIYE
 LCDOUT$FE,$C0,"SABAH"
 ELSE
 LCDOUT DEC2 (DSAAT-12),":",DEC2 DAKIKA,":", DEC2 SANIYE
 LCDOUT$FE,$C0,"OGLE"
 ENDIF
 GUNCELLE=0


Bu kısımdan benim anladığım, saatin 12lik saat düzenine göre gösterilmeye çalışıldığı ve hatta buna ek olarak "SABAH"  ya da "OGLE" ibaresinin de eklenmek istendiği. Basic bilen arkadaşlar da değerlendirirler gerçi.

Sanırım bu kodu hazır kullandığınız ve çok üzerine durmadığınız için farkedemediniz.

İyi çalışmalar...

mcguiverali

Alıntı yapılan: "kadirbas"
LCDOUT DEC2 (DSAAT-12),":",DEC2 DAKIKA,":", DEC2 SANIYE
 LCDOUT$FE,$C0,"OGLE" '


quote]
DSAAT-12 yerine DSAAT yazınca düzeldi fakat ufak bi sorun daha var şimdide saat gece 00 oldugunda 12 .oglen 12 oldugunda ise 24 gösteriyor..yardımlarınızı bekliyorum..
Düşünmeden öğrenmek beyhude, öğrenmeden düşünmek, tehlikelidir.....

mcguiverali

Alıntı yapılan: "mucitotomasyon"kod inceleme icin proteus kullan  tektek komutları ilerletirin

PROTEUS da registerlerin degerlerini görebiliyormuyuz peki?
Düşünmeden öğrenmek beyhude, öğrenmeden düşünmek, tehlikelidir.....

mcguiverali

saat sorunun cözdüm..birkaçda ekleme yaptım ..bu benim bitirme ödevim olacak .tamamen bitirdigimde komple proje olarak siteye sunarım saygılar..
Düşünmeden öğrenmek beyhude, öğrenmeden düşünmek, tehlikelidir.....