Merhaba arkadaşlar, bugunkü dersimizde basit bir saat yapacağız. Bu saat devresi çok da fonksiyonel olmayan, ilk değeri kendimizin girdiği bir saat olacak.

Unutmayın biz bu uygulamayı CCS programlama bilgimizi ve algoritma mantığımızı geliştirmek için yapmış olacağız. yoksa canımımız gerçek bir saat yapmak istese bir real time clock entegresi kullanırdık, böylece enerji kesildiğinde saat normal saatle eş zamanlı olarak çalışırdı. Bildiğin tam bir saat olurdu ya, neyse :)

Evet saat devremizin kodu aşağıda: 16f877A ile gerçekleştirdiğimiz bu devrede saat değeri LCD ekranda gösteriliyor. SAAT ve DAKİKA adlı butonlarla saatimizi ayarlıyoruz ve çalışmaya bırakıyoruz. RESET butonu ise saati sıfırlıyor. bu haliyle projemizi, 1 er saniye ile artan bir kronometre olarak tasavvur edebilirsiniz. Artık kodları teker teker anlatmıyorum. Sizler bakın, anlayamadığınız yerlerde yorum yoluyla sorularınızı sorabilirsiniz. Şu kadarını söyleyeyim ki her bir saniye artışı timer kesmesi ile yapılıyor. timer2 modülünü 10ms de bir kesme verecek şekilde ayarladık. ve her 100 adet kesmede (sayac değişkeniyle) saniye 1 artıyor.

Devrenin Proteus Simülasyon görüntüsü:

pic saat devresi

Dijital Saat Programı:

#include "main.h"
#define use_portb_lcd TRUE
#include <lcd.c>

#define DAKIKABUTON   1
#define SAATBUTON      2
#define RESETBUTON     3
#define YOK                 0

void TusBilgisi(void);
void DakikaAyar(void);
void SaatAyar(void);
void Resetleme(void);
void SaatGoster(void);

int8 saniye=0;
int8 dakika=0;
int8 saat=0;
int8 sayac=0;
int8 AnlikTus=YOK;

#INT_TIMER2
void SaatArtir()
{
if(++sayac>=100)
{
sayac=0;
if(++saniye>=60)
{
saniye=0;
if(++dakika>=60)
{
dakika=0;
if(++saat>=24)
saat=0;
}
}

}
TusBilgisi();
}

 

///ANA PROGRAM/////

void main()
{
Set_tris_c(0xFF);
set_tris_b(0x00);
lcd_init();

Setup_timer_2(T2_DIV_BY_16,124,5);
enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER2);

lcd_gotoxy(1,2);printf(lcd_putc,"www.Ruzname.Net");
while(1)
{
if(AnlikTus)
{if(AnlikTus==DAKIKABUTON)DakikaAyar();
if(AnlikTus==SAATBUTON)SaatAyar();
if(AnlikTus==RESETBUTON)Resetleme();
AnlikTus=YOK;
}
SaatGoster();
}
}

//////ANA PROGRAM SONU//////

void TusBilgisi()
{

if(!AnlikTus)
{
if(input(pin_c0)) AnlikTus=DAKIKABUTON;
if(input(pin_c1)) AnlikTus=SAATBUTON;
if(input(pin_c2)) AnlikTus=RESETBUTON;

}

}

void DakikaAyar()
{
if(++dakika>=60) dakika=0;
}

void SaatAyar()
{
if(++saat>=25) saat=0;
}

void Resetleme()
{
saniye=0;
dakika=0;
saat=0;

}

void SaatGoster()
{
{
lcd_gotoxy(1,1);printf(lcd_putc,"%02d:",saat);
lcd_gotoxy(4,1);printf(lcd_putc,"%02d:",dakika);
lcd_gotoxy(7,1);printf(lcd_putc,"%02d",saniye);
lcd_gotoxy(1,2);printf(lcd_putc,"www.Ruzname.Net");
delay_ms(500);
printf(lcd_putc,"\f");
}

}

TAGS:PIC CCS C ile saat devresi, pic dijital saat, lcd dijital saat, kesme, timer, lcd dijital saat programı, pic ccs digital saat devresi,CCS PIC C ile LCD kullanımı

Anahtar Kelimeler: Mikrodenetleyici, CCS PIC C dersleri, PIC ile saat devresi, saat hex dosyası

peynir6 suyu tozu , 17/09/2008-13:50 Facebook'ta Paylas