FORMDAKİ ARKADAŞLARLA PAYLAŞMAK İSTEDİM. Programı kendim yaptım.PORTC.0 SET düğmesi.Buna basılı tuttuğunuz zaman sırasıyla dakika-saat-hafta-gün ve ay ayarı yapılıyor.SET e bastıktan sonra PORTC.1 VE PORTC.2 ile yukarı aşağı yaparak istediğiniz değere getiriyorsunuz.Alarmı ayarlamak için PORTC.1 tuşunu basılı tutuyorsunuz.Ayarladığınız alarmı görmek içinde PORT.C.1 tuşunu basılı tutuyorsunuz.Isı için kalibrasyon yapmadım.Alarım vakti geldiğinde PORTC.7 çıkış veriyor.Siz bunu istediğiz çıkışla değiştirebilirsiniz.PIC olarak 16F877 veya 876 kullanılabilir.Son olarak PIC in enerjisi kesildiğinde son bilgileri hafızasında tutuyor.Tekrar enerji verildiğinde kaldığı yerden devem eder.Herkese çalışmalarında başarılar.
DEFINE LCD_DREG PORTB DEFINE LCD_DBIT 4 DEFINE LCD_EREG PORTB DEFINE LCD_EBIT 3 DEFINE LCD_RSREG PORTB DEFINE LCD_RSBIT 2 DEFINE LCD_BITS 4 DEFINE LCD_LINES 2 DEFINE LCD_COMMANBUS 2000 ;komut gecikme süresi mikrosaniye olarak DEFINE LCD_DATAUS 50 ;veri gecikme süresi mikrosaniye olarak
DEFINE ADC_BITS 10 'A/D çevirim sonucu kaç bit olacak DEFINE ADC_CLOCK 3 'Clock kaynağı (3=rc) DEFINE ADC_SAMPLEUS 100 'Şarj zamanı mikro saniye cinsinden.
ASAAT var byte SAAT var byte dSaat var byte ' Display de görünecek saat değişkeni ADAKIKA var byte DAKIKA var byte Saniye var byte SAY var byte ' Saniye parçacıkları Guncelle var byte ' LCD güncellenme durumu i var byte ' Döngü değişkeni
GUN var WORD HAFTA var byte AY var byte YIL var byte ARA VAR BYTE ARA1 VAR BYTE AC VAR BYTE HAM VAR BYTE ISI VAR BYTE
LCDOUT $FE,1 ,dec2 dSaat, ":", dec2 Dakika, ":", dec2 Saniye," ",1," ",DEC3 ISI,"C",0 Lcdout $FE,$C0," ALARM CALIYOR" HIGH PORTC.7 If SET = 1 Then SUSTUR GOTO SAATCEVRIM SUSTUR: LOW PORTC.7 AC=0 WRITE 7,AC
ATLA: ARA=HAFTA select case ARA case 0 lcdout $fe,$CB,"Pazar" case 1 lcdout $fe,$CB,"Pts." case 2 lcdout $fe,$CB,"Sal",7 case 3 lcdout $fe,$CB,5,"ar." case 4 lcdout $fe,$CB,"Per." case 5 lcdout $fe,$CB,"Cuma" case 6 lcdout $fe,$CB,"Cts." end select
SAATCEVRIM: DSAAT = SAAT ' Saati 0-12 aralığına getir If (SAAT // 24) = 0 Then Endif
If SAAT < 24 Then
Endif
Guncelle = 0 ' EkranI güncelle
Endif Goto ANADONGU ' Sonsuz döngü sağla
ARK: LCDOUT $FE,1,"== SAAT AYARI ==" LCDOUT $FE,$C0,"DAKIKA: ",DEC2 DAKIKA ARK1: If SET= 0 Then AYAR GOTO ARK1
AYAR:
DAKIKA1:: LCDOUT $FE,1,"== SAAT AYARI ==" LCDOUT $FE,$C0,"DAKIKA: ",DEC2 DAKIKA PAUSE 100 IF SET=1 THEN SAAT1 if YUKARI=1 then DAKIKA=DAKIKA+1 if DAKIKA>=60 then DAKIKA=0
pause 100 endif endif if ASAGI=1 then DAKIKA=DAKIKA-1 if DAKIKA>=60 then DAKIKA=59
PAUSE 100 ENDIF endif GOTO DAKIKA1
SAAT1: If SET= 0 Then SAAT2 GOTO SAAT1
SAAT2: LCDOUT $FE,1,"== SAAT AYARI ==" LCDOUT $FE,$C0,"SAAT: ",DEC2 SAAT PAUSE 100 IF SET=1 THEN HAFTA1 if YUKARI=1 then SAAT=SAAT+1 if SAAT>=24 then SAAT=0
pause 100 endif endif if ASAGI=1 then SAAT=SAAT-1 if SAAT>=24 then SAAT=23
PAUSE 100 ENDIF endif GOTO SAAT2
HAFTA1: If SET= 0 Then HAFTA2 GOTO HAFTA1
HAFTA2: LCDOUT $FE,1,"== GUN AYARI ==" Lcdout $FE,$C0,"HAFTA:",DEC1 HAFTA Lcdout $FE,$C0 ARA=HAFTA select case ARA case 0 lcdout $fe,$C9,"Pazar" case 1 lcdout $fe,$C9,"Pts." case 2 lcdout $fe,$C9,"Sal",7 case 3 lcdout $fe,$C9,5,"ar." case 4 lcdout $fe,$C9,"Per." case 5 lcdout $fe,$C9,"Cuma" case 6 lcdout $fe,$C9,"Cts." end select
PAUSE 100 IF SET=1 THEN GUN1 if YUKARI=1 then HAFTA=HAFTA+1 if HAFTA>=7 then HAFTA=0
pause 100 endif endif if ASAGI=1 then HAFTA=HAFTA-1 if HAFTA>=7 then HAFTA=6
PAUSE 100 ENDIF endif GOTO HAFTA2
GUN1: If SET= 0 Then GUN2 GOTO GUN1
GUN2: LCDOUT $FE,1,"== TARIH AYARI ==" LCDOUT $FE,$C0,"GUN: ",DEC2 GUN PAUSE 100 IF SET=1 THEN AY1 if YUKARI=1 then GUN=GUN+1 if GUN>=32 then GUN=1
pause 100 endif endif if ASAGI=1 then GUN=GUN-1 if GUN>=32 OR GUN=0 then GUN=31
PAUSE 100 ENDIF endif GOTO GUN2
AY1: If SET= 0 Then AY2 GOTO AY1
AY2: LCDOUT $FE,1,"== TARIH AYARI ==" Lcdout $FE,$C0,"AY: ",DEC2 AY
PAUSE 100 IF SET=1 THEN ARK2 if YUKARI=1 then AY=AY+1 if AY>=13 then AY=1
pause 100 endif endif if ASAGI=1 then AY=AY-1 if AY>=13 OR AY=0 then AY=12
PAUSE 100 ENDIF endif GOTO AY2
ARK2: If SET= 0 Then KONTROL GOTO ARK2 ;---------------------ALARM RUTİNİ-------------------- ALARMARK: LCDOUT $FE,1,"= ALARM AYARI ="
ALARMARK1: If YUKARI= 0 Then ALARM GOTO ALARMARK1
ALARM: ADAKIKA1:: LCDOUT $FE,1,"= ALARM AYARI =" LCDOUT $FE,$C0,"DAKIKA: ",DEC2 ADAKIKA PAUSE 100 IF SET=1 THEN ASAAT1 if YUKARI=1 then ADAKIKA=ADAKIKA+1 WRITE 5,ADAKIKA if ADAKIKA>=60 then ADAKIKA=0
pause 100 endif endif if ASAGI=1 then ADAKIKA=ADAKIKA-1 WRITE 5,ADAKIKA if ADAKIKA>=60 then ADAKIKA=59
PAUSE 100 ENDIF endif GOTO ADAKIKA1
ASAAT1: If SET= 0 Then ASAAT2 GOTO ASAAT1
ASAAT2: LCDOUT $FE,1,"= ALARM AYARI =" LCDOUT $FE,$C0,"SAAT: ",DEC2 ASAAT PAUSE 100 IF SET=1 THEN ADEVRE if YUKARI=1 then ASAAT=ASAAT+1 WRITE 6,ASAAT if ASAAT>=24 then ASAAT=0
pause 100 endif endif if ASAGI=1 then ASAAT=ASAAT-1 WRITE 6,ASAAT if ASAAT>=24 then ASAAT=23
PAUSE 100 ENDIF endif GOTO ASAAT2
ADEVRE: If SET= 0 Then ADEVRE1 GOTO ADEVRE
ADEVRE1: LCDOUT $FE,1,"= ALARM AYARI =" if AC=0 then ALARM5 if AC=1 then ALARM6 ALARM5: LCDOUT $FE,1,"= ALARM AYARI =" Lcdout $FE,$C0," KAPALI" GOTO GEC ALARM6: LCDOUT $FE,1,"= ALARM AYARI =" Lcdout $FE,$C0," ",1,1," ACIK ",1,1 GEC: pause 200 IF SET=1 THEN ARK2 if YUKARI=1 then AC=AC+1 ARA1=AC WRITE 7,AC if AC>=2 then AC=0
endif endif
GOTO ADEVRE1
disable
KESME:
ADCIN 0,HAM
ISI=HAM*100/51
SAY = SAY + 1 ' SANİYE SAY If SAY < 61 Then SAYDIR ' 61 * 16,384ms = 1 sn
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
HAFTA = HAFTA + 1 GUN = GUN + 1 If GUN >= 31 Then GUN = 1 AY = AY + 1 If HAFTA >= 7 Then HAFTA = 0
Yaptığınız projeyi paylaştığınız için kendi adıma teşekkür ederim
Fakat picin timer kesmesi bildiğiniz üzere tam olarak 1 sn de kesme yapmıyor.Bundan dolayı saatte sürekli bir kayma olacaktır.Acaba bir saat entegresi ile yapılsa daha kullanışlı olmaz mıydı?
Teşekkürler
90alper90 Söylediğin doğru.Ama ben bir haftadır kullanıyorum.Yaklaşık 3-4 sn. bir sapma oluyor.FORMULA 1 de kullanmıyacağımıza göre çokta önemsemedim.