PIC16F877 İle lcd kronometre ve geri sayım devresi

| Mayıs 26, 2023 Tarihinde güncellendi
PIC16F877 İle lcd kronometre ve geri sayım devresi

PIC 16F877 İLE LCD KRONOMETRE VE GERİ SAYIM DEVRESİ PICBASIC PRO Bu devrede PIC 16f877 mikrodenetleyicisi kullanılarak LCD (Liquid Crystal Display) üzerinde kronometre ve geri sayım uygulaması yapılmıştır. Sayma işlemi için mikrodenetleyicinin TMR0 kesmesi kullanılmıştır. Devre tasarımı ve baskı devre işlemleri için Proteus ISIS ve Proteus ARES programları kullanılmıştır. Devreye ait akış diyagramı aşağıdaki gibidir.

Şekil 1:Akış diyagramı

lcd-kronometre-geri-sayim-akis-diagrami

Ön panel Görünümü

on-panel-lcd-buton-gorunum

1: Menüde yukarı hareket etme ve geri sayım sayacı değer artırma butonu,

2: Menüde aşağı hareket etme ve geri sayım sayacında değer azaltma butonu,

3: Seçili menüyü onaylama butonu,

4: Kronometre ve geri sayım sayacı için Başlat/Durdur/Devam etme butonu,

5: Kronometre ve geri sayım sayacı sıfırlama ve geri sayım sayacında saat, dakika, saniye değerlerinin seçilmesi,

Devre şeması ve baskı devre alt üst görünüm
kronometre-geri-sayim-devresi kronometre-geri-sayim-baski-devre kronometre-geri-sayim-pcb

Malzeme listesi ve fiyatlar

kronometre-geri-sayim-malzeme-listesi-maliyet

Devreye ait mikrodenetleyici kodları MicroCode Studio PlusPICBASIC PRO derleyicisinde yazılmış ve derlenmiştir. Derleme işlemi için bilgisayarınızda PBP246 ve MPASM assembly derleyici dosyaları bulunmalıdır.

'*****************************************************************
'*  DOSYA    : KRONOMETRE                                        *
'*  YAZAR    : HASAN ÜZÜLMEZ                                     *
'*  NOT      : KRONOMETRE VE GERİ SAYIM SAYACI                   *
'*  TARİH    : 08.03.2009 PAZAR                                  *
'*  Versiyon : 1.0                                               *
'*****************************************************************

@ device pic16f877 	'işlemci 16F877
@ device pic16f877, wdt_off  'Watch Dog timer kapalı
@ device pic16f877, pwrt_on  'Power on timer açık
@ device pic16f877, protect_off  'Kod Koruma kapalı

'---------------------------LCD TANIMLAMALARI[BAŞLA]----------------------------
Define LCD_DREG	PORTB	    'LCD data bacakları hangi porta bağlı?
Define LCD_DBIT		4		'LCD data bacakları hangi bitten başlıyor?
Define LCD_EREG	PORTB	    'LCD Enable Bacağı Hangi Porta bağlı?
Define LCD_EBIT		3		'LCD Enable Bacağı Hangi bite bağlı ?
Define LCD_RWREG PORTB 	    'LCD R/W Bacağı Hangi Porta bağlı?
Define LCD_RWBIT 	2 		'LCD R/W Bacağı Hangi bite bağlı ?
Define LCD_RSREG	PORTB	'LCD RS Bacağı Hangi Porta bağlı ?
Define LCD_RSBIT	1		'LCD RS bacağı Hangi Bite bağlı  ?
Define LCD_BITS		4		'LCD 4 bit mi yoksa 8 bit olarak bağlı?
Define LCD_LINES	2		'LCD Kaç sıra yazabiliyor
'---------------------------LCD TANIMLAMALARI[BİTİŞ]----------------------------

'-------------------------DEĞİŞKEN TANIMLAMALARI[BAŞLA]-------------------------
TRISA=%00011111
TRISB=0
TRISC=0
TRISD=0
TRISE=0
ADCON1=7
SIRA var byte
SECENEK var byte
SALISE var byte
SANIYE var byte
DAKIKA var byte
SAAT var byte
SAYAC VAR BYTE
TIP VAR BYTE
SALISEYENI var byte
SANIYEYENI var byte
DAKIKAYENI var bytE
SAATYENI var byte
MENU VAR PORTA.0
YUKARI var PORTA.1
ASAGI var PORTA.2
MODE VAR PORTA.3
DURDUR VAR PORTA.4
'-------------------------DEĞİŞKEN TANIMLAMALARI[BİTİŞ]-------------------------

'-------------------------LCD KARAKTER HAFIZASI[BAŞLA]--------------------------
LCDOUT $FE,$40, $00, $00, $00, $00, $00, $00, $00, $00   'CGRAM 0. ADRES " "
LCDOUT $FE,$48, $00, $04, $06, $1F, $06, $04, $00, $00   'CGRAM 1. "OK"
LCDOUT $FE,$50, $00, $00, $00, $00, $00, $00, $00, $00   'CGRAM 2. ADRES " "
LCDOUT $FE,$58, $1B, $0E, $11, $15, $17, $11, $0E, $00   'CGRAM 3. ADRES "kronometre"
LCDOUT $FE,$70, $04, $00, $0E, $04, $04, $04, $0E, $00   'CGRAM 6. "i"
'-------------------------LCD KARAKTER HAFIZASI[BİTİŞ]--------------------------

SAAT=0
DAKIKA=0
SANIYE=0
SALISE=0
SAATyeni=0
DAKIKAyeni=0
SANIYEyeni=0
SALISEyeni=0
clear
'----------------------------ANA MENU[BAŞLA]------------------------------------
BASLANGIC:
Lcdout $fe, 1
if asagi=0 then
   if sira<1 then
       call gecikme
       sira=sira+1
   else
       sira=0
   endif
endif
if YUKARI =0 then
   if sira<1 then
       call gecikme
       sira=sira-1
   else
       sira=0
   endif
endif
IF SIRA>1 THEN SIRA=1
LCDOUT $FE,$80,SIRA+1," KRONOMETRE"
LCDOUT $FE,$C0,SIRA," GER",6," SAYIM"
CALL GECIKME
SAAT=0
DAKIKA=0
SANIYE=0
SALISE=0
SAATyeni=0
DAKIKAyeni=0
SANIYEyeni=0
SALISEyeni=0
IF SIRA=0 AND MENU=0 THEN
while menu=0
wend
GOTO KRONOMETRE
ENDIF
IF  MENU=0 THEN
while menu=0
wend
goto GERI_SAYIM
endif
goto BASLANGIC
'----------------------------ANA MENU[BİTİŞ]------------------------------------

'---------------------------GERİ SAYIM[BAŞLA]-----------------------------------
GERI_SAYIM:
LCDOUT $FE,1
LCDOUT $FE,$83,"GER",6," SAYIM"
LCDOUT $FE,$C1,3," ",DEC2 SAAT,":",DEC2 DAKIKA,":",DEC2 SANIYE,":",DEC2 SALISE
call gecikme
IF DURDUR=0 THEN
while DURDUR=0
wend
IF SECENEK<2 THEN
SECENEK=SECENEK+1
ELSE
SECENEK=0
CALL GECIKME
ENDIF
ENDIF

IF SECENEK=0 THEN
   IF ASAGI=0 THEN
      IF SAAT=0 THEN SAAT=100
         SAAT=SAAT-1
         CALL GECIKME
   ENDIF
   IF YUKARI=0 THEN
   IF SAAT=99 THEN SAAT=-1
         SAAT=SAAT+1
         CALL GECIKME
   ENDIF
ENDIF

IF SECENEK=1 THEN
   IF ASAGI=0 THEN
      IF DAKIKA=0 THEN DAKIKA=60
         DAKIKA=DAKIKA-1
         CALL GECIKME
   ENDIF
   IF YUKARI=0 THEN
   IF DAKIKA=>59 THEN DAKIKA=-1
         DAKIKA=DAKIKA+1
         CALL GECIKME
   ENDIF
ENDIF

IF SECENEK=2 THEN
   IF ASAGI=0 THEN
      IF SANIYE=0 THEN SANIYE=60
         SANIYE=SANIYE-1
         CALL GECIKME
   ENDIF
   IF YUKARI=0 THEN
   IF SANIYE=>59 THEN SANIYE=-1
         SANIYE=SANIYE+1
         CALL GECIKME
   ENDIF
ENDIF
if mode=0 then
while mode=0
wend
TIP=1

if SALISE=0 AND SANIYE=0 AND DAKIKA=0 AND SAAT=0 THEN
GOTO GERI_SAYIM
ELSE

IF saat=>0 AND dakika=>0 AND SANIYE>0 THEN
SANIYE=SANIYE-1
ELSE
IF DAKIKA=0 AND SANIYE=0 THEN
IF SAAT>0 THEN SAAT=SAAT-1 : DAKIKA=59 :SANIYE=59
ENDIF

IF SANIYE=0 THEN
IF DAKIKA>0 THEN DAKIKA=DAKIKA-1 : sANIYE=59
ENDIF
ENDIF
salise=100

goto KESME_AYAR
ENDIF

else
if menu=0 then
while menu=0
wend
goto BASLANGIC
else
GOTO GERI_SAYIM
endif
ENDIF
'---------------------------GERİ SAYIM[BİTİŞ]-----------------------------------

'------------------------KRONOMETRE MENÜSÜ[BAŞLA]-------------------------------
KRONOMETRE:
LCDOUT $FE,1
LCDOUT $FE,$83,"KRONOMETRE"
LCDOUT $FE,$C1,3," ",DEC2 SAAT,":",DEC2 dakika,":",DEC2 saniye,":",DEC2 salise
CALL GECIKME
if mode=0 then
while mode=0
wend
TIP=0
goto KESME_AYAR
else
if menu=0 then
while menu=0
wend
goto BASLANGIC
else
GOTO KRONOMETRE
endif
endif
'--------------------------KRONOMETRE MENÜSÜ[BİTİŞ]-----------------------------

'-----------------------KESME KONFİGÜRASYONU[BAŞLA]-----------------------------
KESME_AYAR: 

ON INTERRUPT GoTo KESME 'kesme oluşursa 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
IF TIP=0 THEN GOTO ARTIR
IF TIP=1 THEN GOTO AZALT
'-----------------------KESME KONFİGÜRASYONU[BİTİŞ]----------------------------- 

'----------------------------GERI SAYIM[BAŞLA]----------------------------------
AZALT:
LCDOUT $FE,$C3, DEC2 SAAT,":",DEC2 DAKIKA,":",DEC2 SANIYE,":",DEC2 SALISE
if mode=0 then
SALISEyeni=SALISE
SANIYEyeni=SANIYE
SAATyeni=SAAT
DAKIKAyeni=DAKIKA
while mode=0
wend
goto G_DURAGAN_ZAMAN:
else
goto AZALT
endif

G_DURAGAN_ZAMAN:
if durdur=0 then
HIGH PORTB.0
SAAT=0
DAKIKA=0
SANIYE=0
SALISE=0
SAATyeni=0
DAKIKAyeni=0
SANIYEyeni=0
SALISEyeni=0
endif
LCDOUT $FE,$C3, DEC2 SAATYENI,":",DEC2 DAKIKAYENI,":",DEC2 SANIYEYENI,":",DEC2 SALISEYENI
if mode=0 then
while mode=0
wend
goto G_DEVAM
else
if menu=0 then
CALL GECIKME
goto BASLANGIC
else
GOTO G_DURAGAN_ZAMAN
endif
endif

G_DEVAM:
SAAT=SAATyeni
DAKIKA=DAKIKAyeni
SANIYE=SANIYEyeni
SALISE=SALISEyeni
goto AZALT

'----------------------------GERI SAYIM[BİTİŞ]----------------------------------

'----------------------------KRONOMETRE[BAŞLA]----------------------------------
ARTIR:
LCDOUT $FE,$C3,DEC2 saat,":",DEC2 dakika,":",DEC2 saniye,":",DEC2 salise 

if mode=0 then
saliseyeni=salise
saniyeyeni=saniye
saatyeni=saat
dakikayeni=dakika
while mode=0
wend
goto K_DURAGAN_ZAMAN:
else
goto ARTIR
endif 

K_DURAGAN_ZAMAN:
if durdur=0 then
saatyeni=0
dakikayeni=0
saniyeyeni=0
saliseyeni=0
endif
LCDOUT $FE,$C3,DEC2 SAATYENI,":",DEC2 dakikaYENI,":",DEC2 saniyeYENI,":",DEC2 saliseYENI
if mode=0 then
while mode=0
wend
goto K_DEVAM
else
if menu=0 then
CALL GECIKME
goto BASLANGIC
else
GOTO K_DURAGAN_ZAMAN
endif
endif

K_DEVAM:
saat=saatyeni
dakika=dakikayeni
saniye=saniyeyeni
salise=saliseyeni
goto ARTIR
'----------------------------KRONOMETRE[BİTİŞ]----------------------------------

'------------------------KESME FONKSIYONU[BAŞLA]--------------------------------
DISABLE
KESME:
IF TIP=0 THEN
SAYAC=SAYAC+1
IF SAYAC=1 then
SAYAC=0
salise=salise+1
IF salise=100 THEN
salise=0
saniye=saniye+1
IF saniye=60 THEN
saniye=0
dakika=dakika+1
IF dakika=60 THEN
dakika=0
saat=saat+1
IF saat=99 THEN saat=0
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF

IF TIP=1 THEN
SAYAC=SAYAC+1
IF SAYAC=1 then
SAYAC=0
SALISE=SALISE-1
IF SALISE=0 THEN
IF SANIYE<>0 THEN
SANIYE=SANIYE-1
SALISE=100
ENDIF
IF SANIYE=0 THEN
IF DAKIKA<>0 THEN
DAKIKA=DAKIKA-1
SANIYE=59
ENDIF
IF DAKIKA=0 THEN
IF SAAT<>0 THEN
SAAT=SAAT-1
DAKIKA=59
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
if SALISE=0 AND SANIYE=0 AND DAKIKA=0 AND SAAT=0 THEN GOTO GERI_SAYIM
ENDIF
INTCON.2=0
RESUME
'------------------------KESME FONKSIYONU[BİTİŞ]--------------------------------
GECIKME:
PAUSE 100
RETURN
END

Projenin tamamlanmış hali ve test aşamalarına ait resimler

lcd-kronometre-geri-sayim-picbasic-pro

lcd-kronometre-geri-sayim-picbasic-pro-2

lcd-kronometre-geri-sayim-picbasic-pro-3

lcd-kronometre-geri-sayim-picbasic-pro-4

lcd-kronometre-geri-sayim-picbasic-pro-5

lcd-kronometre-geri-sayim-picbasic-pro-6

lcd-kronometre-geri-sayim-picbasic-pro-7

PIC16F877 ile lcd kronometre ve geri sayım devresine ait tüm dosyalar isis simülasyon ares pcb ve kaynak picbasic pro yazılım;

pic16f877-ile-lcd-kronometre-ve-geri-sayim-devresi

Şifre-Pass: 320volt.com

Yayım tarihi: 2009/04/07 Etiketler: , , , , , , ,



21 Yorum “PIC16F877 İle lcd kronometre ve geri sayım devresi

  1. MüminMümin

    S.A Allah güç kuvvet versin. Gerçekten çok güzel bir çalışma. Peki saat geri sayımı bitirince buzzer dan ses vermesi için ne yapmamız lazım. Mesela 5 dakika saysın. 00 olunca buzzer dan ses çıksın. Foto Pozlama için.

    Saygılarımla
    Mümin Kalınkaya

    CEVAPLA
  2. KonyalıKonyalı

    Baskı devrede dikkat ederseniz 33. pin Portb.0 ucu boşta yazılımda sürenin sıfırlandığı satırda

    if SALISE=0 AND SANIYE=0 AND DAKIKA=0 AND SAAT=0 THEN GOTO GERI_SAYIM

    bu pini aktif yaparsanız led veya buzzer bağlayabilirsiniz.Yalnız devre uygulayan bazı arkadaşlara göre biraz yavaş çalışıyo muhtemelen 5 dakikada 5-10 saniye sonra veya önce bitirebilir eğer hassas bi yerde kullanacaksanız düzgün çalışan bi sayacla kontrol edin ona göre fazla veya eksik değer girin.

    Kolay gelsin

    CEVAPLA
  3. MüminMümin

    S.A Hayırlı Ramazanlar dilerim.
    Vermiş olduğunuz bilgiden dolayı çok teşekkür ederim. Allah razı olsun.

    Saygılarımla
    Mümin Kalınkaya

    CEVAPLA
  4. berabera

    Baskı devreyinin çıktıyı alırken orantılı çıkmadı büyük çıktı.Yardımcı olur musun?

    CEVAPLA
  5. CABBARCABBAR

    Selamün Aleyküm kardeş ellerine sağlık çok teşekkürler. sizden bir ricam olacak bu devrenin çizimlerinin orjinalleri lazım bana yardımcı olursanız sevinirim şimdiden teşekkürler.

    CEVAPLA
  6. sametsamet

    Selamün Aleyküm ellerine sağlık çok teşekkürler. sizden bir ricam olacak bu devrenin çizimlerinin orjinalleri lazım bana yardımcı olursanız sevinirim şimdiden teşekkürler.

    CEVAPLA
  7. KonyaliKonyali

    Aleyküm Selam yazının altında proje ile ilgili tüm dosya ve dökümanların bulunduğu “kronometre-gerisayim.rar” bağlantısını sanırım görmediniz. Bu bağlantıyı kullanarak dosyaları indirebilirsiniz.

    CEVAPLA
  8. sametsamet

    Selam abi abi ben bu projeyi satın almak istiyorum satabilirmisiniz acaba ?

    CEVAPLA
  9. sametsamet

    merhaba abi bunun örjinal dökümanını alabilirmiyim senden

    CEVAPLA
  10. mustafamustafa

    selamün aleyküm abicim bu yaptığın devreyi ben satın almak istiyorum ben öğrenciyim ödev nedeniyle korınometreyi satın almak istiyorum lütfen abi çok önemli

    CEVAPLA
  11. Bekir SayrımBekir Sayrım

    Selamün Aleyküm.

    Yapmış olduğunuz çalışma oldukça faydalı ve yararlı bir çalışma. Sizi tebrik ediyorum. Firmamızda bu cihazlardan kullanmak istiyoruz. Bizimle irtibata geçmenizi rica ediyorum

    Teşekkürler

    ARY OTOMOTİV
    Bekir Sayrım
    0216 312 62 00

    CEVAPLA
  12. taha çakırtaha çakır

    merhaba arkadaşlar. Bir konuda yardım isteyeceğim. Elinde bu kodun C’ye çevrilmiş hali olan var mı? yada çevirebilecek olan?

    CEVAPLA
  13. Y.öY.ö

    Selamun aleyküm acaba devrenin display bağlanmış halini isis dosyası şeklinde koyar mısnız.

    CEVAPLA
  14. mustafamustafa

    s.a kardeş programı yüklerken hata veriyor bunu nasıl düzeltebilirim

    CEVAPLA
  15. koraykoray

    kardeşim bu klamenslerin bağlanma şeklini lcd ye net olarak gözüken bir resim vb. var mıdır ?

    CEVAPLA
  16. atakozatakoz

    Devre çalışıyormu sorun varmı ona göre yapmayı düşünüyorum ??

    CEVAPLA

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir