Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: yamak - 16 Eylül 2011, 16:16:30

Başlık: lpc1768 ile dijital-analog saat uygulaması
Gönderen: yamak - 16 Eylül 2011, 16:16:30
LPC1768 in rtc si ile ilgili uygulama olması ve glcd ile analog saat uygulamasının içimde kalmasından dolayı böyle bir uygulama yaptım.Kullandığım kit mcb1700 dür.Saat ayarlamaları için kit üzerindeki joystick i kullandım,ayarlama kısmına geçmek için key1 e yaklaşık 2 sn basılı tutmak ayarlama kısmından çıkmak için de INT0 butonuna basmak yeterli. Umarım bu konu ile ilgilenen arkadaşlara yardımcı olmuşumdur.



main:

#include <lpc17xx.h>
#include <yusuf_rtc.h>
#include <yusuf_lpc17xx_delay.h>
#include <stdio.h>
#include <lpc_glcd.h>
#include <math.h>
#define pi 3.1415926535897932384626433832795
RTC_TIME local_time,current_time,alarm_time;
uint32_t sec,min,hour,mon,mday,wday,year,i=1,j=0,z=0,start_count,select=0,pwm;
volatile uint32_t start=0,stop=0,setting=0,alarm_on=1,yanson=0;
char f[10]=" ";
char g[10]=" ";
void pwm_init(void);
void clock_write(void);
void pwm_start(void);
void pwm_stop(void);
void SysTickStop(void);
void analog_saat(void)
{
char v[8]=" ";
int analog_hour,analog_min,analog_sec,akrep_aci,yelkovan_aci,akrep_x,akrep_y,yelkovan_x,yelkovan_y,saniye_aci,saniye_x,saniye_y,i;
//glcd_circle(30,30,28,0,1);
glcd_circle(95,30,28,0,1);
glcd_circle(95,30,2,1,1);
glcd_text57(91,5,"12",1,1);
glcd_text57(117,27,"3",1,1);
glcd_text57(93,50,"6",1,1);
glcd_text57(70,27,"9",1,1);
glcd_line(106,10,108,8,1);
glcd_line(114,19,116,17,1);
glcd_line(114,41,116,43,1);
glcd_line(106,49,108,51,1);
glcd_line(83,49,81,51,1);
glcd_line(75,41,73,43,1);
glcd_line(75,19,73,17,1);
glcd_line(84,10,82,8,1);
current_time=RTCGetTime();
analog_min=current_time.RTC_Min;
analog_hour=current_time.RTC_Hour;
analog_sec=current_time.RTC_Sec;
if(analog_hour>11)
analog_hour=analog_hour-12;
if(analog_hour>3)
analog_hour=15-analog_hour;
else
analog_hour=3-analog_hour;
if(analog_min>15)
analog_min=75-analog_min;
else
analog_min=15-analog_min;
if(analog_sec>15)
analog_sec=75-analog_sec;
else
analog_sec=15-analog_sec;
akrep_aci=analog_hour*30-(int)((current_time.RTC_Min/12)*6);
yelkovan_aci=analog_min*6;
saniye_aci=analog_sec*6;
akrep_x=(cos((pi*akrep_aci)/180))*15+95;
akrep_y=30-(sin((pi*akrep_aci)/180))*15;
yelkovan_x=(cos((pi*yelkovan_aci)/180))*18+95;
yelkovan_y=30-(sin((pi*yelkovan_aci)/180))*18;
saniye_x=(cos((pi*saniye_aci)/180))*20+95;
saniye_y=30-(sin((pi*saniye_aci)/180))*20;
glcd_line(95,30,akrep_x,akrep_y,1);
glcd_line(95,30,yelkovan_x,yelkovan_y,1);
glcd_line(95,30,saniye_x,saniye_y,1);
}
void SysTick_Handler(void)
{
j++;
if(j==4&&stop==1) //Ayarlama modunda yanip sönme hizi
{
yanson++;
clock_write();
j=0;
}
}
void SysTickStart(void)
{
SysTick->LOAD=100000000;//45ms preriyot
SysTick->VAL =(0x00);
SysTick->CTRL=0x07;
}
void SysTickStop(void)
{
SysTick->CTRL=0x00;
}
void clock_write(void)
{
if(select%2==0)
{
current_time=RTCGetTime();
sec= current_time.RTC_Sec;
min=current_time.RTC_Min;
hour=current_time.RTC_Hour;
mon=current_time.RTC_Mon;
mday=current_time.RTC_Mday;
year=current_time.RTC_Year;
wday=current_time.RTC_Wday;
}
if(select%2!=0)
{
alarm_time=RTCGetAlarmTime();
sec= alarm_time.RTC_Sec;
min= alarm_time.RTC_Min;
hour=alarm_time.RTC_Hour;
mon= alarm_time.RTC_Mon;
mday=alarm_time.RTC_Mday;
year=alarm_time.RTC_Year;
wday=alarm_time.RTC_Wday;
}
if((setting==1&&stop==1)&&yanson%2==0)
{
f[0]=' ';
f[1]=' ';
f[2]=':';
}
else if((stop==0&&hour<10)||(hour<10&&yanson%2!=0&&setting==1)||(hour<10&&setting!=1))
sprintf(f,"0%d:",hour);
else if((stop==0&&hour>=10)||(hour>=10&&yanson%2!=0&&setting==1)||(hour>=10&&setting!=1))
sprintf(f,"%d:",hour);
if((setting==2&&stop==1)&&yanson%2==0)
{
f[3]=' ';
f[4]=' ';
f[5]=':';
}
else if((stop==0&&min<10)||(min<10&&yanson%2!=0&&setting==2)||(min<10&&setting!=2))
sprintf(f+3,"0%d:",min);
else if(stop==0&&min>=10||(min>=10&&yanson%2!=0&&setting==2)||(min>=10&&setting!=2))
sprintf(f+3,"%d:",min);
if((setting==3&&stop==1)&&yanson%2==0)
{
f[6]=' ';
f[7]=' ';
}
else if((stop==0&&sec<10)||(sec<10&&yanson%2!=0&&setting==3)||(sec<10&&setting!=3))
sprintf(f+6,"0%d",sec);
else if((stop==0&&sec>=10)||(sec>=10&&yanson%2!=0&&setting==3)||(sec>=10&&setting!=3))
sprintf(f+6,"%d",sec);
glcd_fillScreen(0);
glcd_rect(1,0,63,20,0,1);
glcd_rect(1,22,63,53,0,1);
glcd_text57(3,55,"Yusuf Yamak",1,1);
analog_saat();
if(select%2==0)
{
    glcd_text57(3,1,"Saat",1,1);
glcd_text57(3,24,"Tarih",1,1);
}
else
{
glcd_text57(3,1,"Alrm Saati",1,1);
glcd_text57(3,24,"Alrm Tarhi",1,1);
}
glcd_text57(3,11,f,1,1);
if((setting==4&&stop==1)&&yanson%2==0)
{
g[0]=' ';
g[1]=' ';
g[2]='/';
}
else if((stop==0&&mday<10)||(mday<10&&yanson%2!=0&&setting==4)||(mday<10&&setting!=4))
sprintf(g,"0%d/",mday);
else if(stop==0&&mday>=10||(mday>=10&&yanson%2!=0&&setting==4)||(mday>=10&&setting!=4))
sprintf(g,"%d/",mday);
if((setting==5&&stop==1)&&yanson%2==0)
{
g[3]=' ';
g[4]=' ';
g[5]='/';
}
else if((stop==0&&mon<10)||(mon<10&&yanson%2!=0&&setting==5)||(mon<10&&setting!=5))
sprintf(g+3,"0%d/",mon);
else if((stop==0&&mon>=10||mon>=10&&yanson%2!=0&&setting==5)||(mon>=10&&setting!=5))
sprintf(g+3,"%d/",mon);
if((setting==6&&stop==1)&&yanson%2==0)
{
g[6]=' ';
g[7]=' ';
g[8]=' ';
g[9]=' ';
g[10]='\0';
}
else if(stop==0||(yanson%2!=0&&setting==6)||setting!=6)
sprintf(g+6,"%d",year);
glcd_text57(3,34,g,1,1);
if(setting==7&&stop==1&&yanson%2==0)
glcd_text57(37,55,"     ",1,1);
else if(stop==0||(yanson%2!=0&&setting==7)||setting!=7)
{
switch(wday)
{    
case 0:glcd_text57(4,44,"Pazar",1,1);
break;
case 1:glcd_text57(4,44,"Pazartesi",1,1);
break;
case 2:glcd_text57(4,44,"Sali",1,1);
break;
case 3:glcd_text57(4,44,"Carsamba",1,1);
break;
case 4:glcd_text57(4,44,"Persembe",1,1);
break;
case 5:glcd_text57(4,44,"Cuma",1,1);
break;
case 6:glcd_text57(4,44,"Cumartesi",1,1);
break;
default:
break;
}
}
}

void start_timer(uint32_t wait)
{

  LPC_TIM1->TCR=0x02;//reset timer
      LPC_TIM1->IR=0xFF;//tüm kesmeleri resetle
      LPC_TIM1->MR1=wait*24000;
      LPC_TIM1->MCR=1<<3;
      LPC_TIM1->TCR=0x01;//start timer
  LPC_TIM1->PR=0x00;
  NVIC_EnableIRQ(TIMER1_IRQn);
                   
}
void stop_timer(void)
{
LPC_TIM1->TCR=2;
NVIC_DisableIRQ(TIMER1_IRQn);
}
void TIMER1_IRQHandler(void)
{
if(start_count==0)//ayarlama modunda degilken timer acilmissa
{
stop=1;
setting=1;
alarm_on=0;
j=0;
SysTickStart();
}
stop_timer();
start=0;
}
void RTC_IRQHandler (void)
{
if(LPC_RTC->ILR&0x01) //artis kesmesi olusmussa
{
LPC_RTC->ILR|=1; //kesme bayragi temizle

if(pwm==1)//alarm 10 saniye boyunca çalacak
{
z++;
if(z==10)
{
pwm_stop();
z=0;
}
}
clock_write();

}
if((LPC_RTC->ILR)&0x02&&alarm_on==1) // Alarm kesmesi olusmussa
{
LPC_RTC->ILR|=2;//kesme bayragi temizle
pwm_start();
    glcd_fillScreen(0);
glcd_text57(30,20,"ALARM",2,1);

SysTickStart();
}

}
void pll_hazirla(void)
{
LPC_SC->SCS=0x20;
LPC_SC->CLKSRCSEL=0x01; //select main oscilator
LPC_SC->CCLKCFG=0x03; //pllclk/4
LPC_SC->PLL0CON=0x01; //pll activeted
LPC_SC->PLL0CFG=0x20031; //msel=49,nsel=2;
LPC_SC->PLL0FEED=0xAA;
    LPC_SC->PLL0FEED=0x55;
while(!(LPC_SC->PLL0STAT&(1<<26)));
LPC_SC->PLL0CON=0x07;
LPC_SC->PLL0FEED=0xAA;
    LPC_SC->PLL0FEED=0x55;
LPC_SC->PCLKSEL0=0;
}
void pwm_start(void)
{
LPC_PINCON->PINSEL4|=1<<10;
LPC_PWM1->MR0=25000000;//FREKANS=PCLK/25000000
LPC_PWM1->MR6=10000000;//DUTY CYCLE=10/25
LPC_PWM1->MCR=2;
LPC_PWM1->PCR=1<<14;//PWM6 OUTPUT ENABLED
LPC_PWM1->TCR=0x02;
LPC_PWM1->LER=0x40;//MCR YAZILAN DEGER AKTIFLESTI
LPC_PWM1->TCR=0x09;
pwm=1;
}
void pwm_stop(void)
{
LPC_PWM1->PCR=0;
LPC_PWM1->TCR=0x00;
pwm=0;
}
int main(void)
{
int m1=0,m2=0,s=0;
pll_hazirla();
LPC_GPIO2->FIODIR=0xFF;
LPC_GPIO2->FIOCLR=0xFF;
LPC_GPIO0->FIODIR=0xFFFFFFFF;
LPC_GPIO0->FIOCLR=0xFFFFFFFF;
LPC_GPIO1->FIODIR=0xFFFFFFFF;
LPC_GPIO1->FIOCLR=0xFFFFFFFF;
LPC_GPIO1->FIODIR&=~((1<<25)|(1<<26)|(1<<27)|(1<<28)|(1<<29));//joystick icin
glcd_init();
rtc_init();
rtc_start();
NVIC_EnableIRQ(RTC_IRQn);
RTCAlarmMask(AMRDOM|AMRDOW|AMRDOY|AMRMON|AMRYEAR);//alarm'i sadece saat dakika ve saniye etkileyecek
while(1)
{
 
   if(!(LPC_GPIO1->FIOPIN&(1<<25))) //alarm time ya da local time secme
{
if(stop==1)
setting=1;
if(s==0)
{
    select++;
s=1;
}
}
else if((LPC_GPIO1->FIOPIN&(1<<25)))
{
s=0;
}
   if(stop==0) //ayarlama modunda degilse
   {
   if(start==0)
   {
    if(!(LPC_GPIO2->FIOPIN&(1<<11)))//butonu basilmissa
{
    start_timer(1000);
    start=1;
start_count=0;
}
   }
   else
   {
    if((LPC_GPIO2->FIOPIN&(1<<11))) //butona basilmamissa
{
stop_timer();
start=0;
}
}
}
else if(stop==1) //ayarlama modunda ise
{
if(!(LPC_GPIO1->FIOPIN&(1<<28)))//joystick saga hareket ettirilmisse
{
if(m2==0)
{
setting++;
if(setting==8)
{
setting=1;
}
m2=1;
}
}
else if((LPC_GPIO1->FIOPIN&(1<<28)))
{
m2=0;
}
if(!(LPC_GPIO1->FIOPIN&(1<<27)))//joystick sola hareket ettirilmisse
{
if(m1==0)
{
setting--;
if(setting==0)
{
setting=7;
}
m1=1;
}
}
else if((LPC_GPIO1->FIOPIN&(1<<27)))
{
m1=0;
}
if(setting==1)//Saat ayari
{

if(!(LPC_GPIO1->FIOPIN&(1<<29)))
{
if(stop==0||(select%2==0&&stop==1)) //local time saat ayari artis
{
local_time.RTC_Hour=LPC_RTC->HOUR;
local_time.RTC_Hour++;
if(local_time.RTC_Hour==24)
local_time.RTC_Hour=0;
LPC_RTC->HOUR=local_time.RTC_Hour;
DelayMs(0,400);
}
if((select%2==1&&stop==1)) //alarm time saat ayari artis
{
alarm_time.RTC_Hour=LPC_RTC->ALHOUR;
alarm_time.RTC_Hour++;
if(alarm_time.RTC_Hour==24)
alarm_time.RTC_Hour=0;
LPC_RTC->ALHOUR=alarm_time.RTC_Hour;
DelayMs(0,400);
}
}

if(!(LPC_GPIO1->FIOPIN&(1<<26)))
{
if(stop==0||(select%2==0&&stop==1))
{
local_time.RTC_Hour=LPC_RTC->HOUR; //local time saat ayari azalis
local_time.RTC_Hour--;
if(local_time.RTC_Hour<0)
local_time.RTC_Hour=23;
LPC_RTC->HOUR=local_time.RTC_Hour;
DelayMs(0,400);
}
if((select%2==1&&stop==1))
{
alarm_time.RTC_Hour=LPC_RTC->ALHOUR;//alarm time saat ayari azalis
alarm_time.RTC_Hour--;
if(local_time.RTC_Hour<0)
alarm_time.RTC_Hour=23;
LPC_RTC->ALHOUR=alarm_time.RTC_Hour;
DelayMs(0,400);
}
}
}
else if(setting==2) //Dakika ayari
{

if(!(LPC_GPIO1->FIOPIN&(1<<29)))
{

if(stop==0||(select%2==0&&stop==1)) //local time dakika ayari artis
{
local_time.RTC_Min=LPC_RTC->MIN;
local_time.RTC_Min++;
if(local_time.RTC_Min==60)
local_time.RTC_Min=0;
LPC_RTC->MIN=local_time.RTC_Min;
DelayMs(0,400);
}
if((select%2==1&&stop==1))
{
alarm_time.RTC_Min=LPC_RTC->ALMIN; //alarm time dakika ayari artis
alarm_time.RTC_Min++;
if(alarm_time.RTC_Min==60)
alarm_time.RTC_Min=0;
LPC_RTC->ALMIN=alarm_time.RTC_Min;
DelayMs(0,400);
}
}
if(!(LPC_GPIO1->FIOPIN&(1<<26)))
{
if(stop==0||(select%2==0&&stop==1)) //local time dakika ayari azalis
{
local_time.RTC_Min=LPC_RTC->MIN;
local_time.RTC_Min--;
if(local_time.RTC_Min<0)
local_time.RTC_Min=59;
LPC_RTC->MIN=local_time.RTC_Min;
DelayMs(0,400);
}
if((select%2==1&&stop==1)) //alarm time dakika ayari azalis
{
alarm_time.RTC_Min=LPC_RTC->ALMIN;
alarm_time.RTC_Min--;
if(local_time.RTC_Min<0)
alarm_time.RTC_Min=59;
LPC_RTC->ALMIN=alarm_time.RTC_Min;
DelayMs(0,400);
}
}
}
else if(setting==3) //saniye ayari
{
if(!(LPC_GPIO1->FIOPIN&(1<<29)))
{
if(stop==0||(select%2==0&&stop==1))//local time saniye ayari artis
{
LPC_RTC->SEC=0;
DelayMs(0,400);
}
if((select%2==1&&stop==1)) // alarm time saniye ayari artis
{
alarm_time.RTC_Sec=LPC_RTC->ALSEC;
alarm_time.RTC_Sec++;
if(alarm_time.RTC_Sec==60)
alarm_time.RTC_Sec=0;
LPC_RTC->ALSEC=alarm_time.RTC_Sec;
DelayMs(0,400);
}
}
if(!(LPC_GPIO1->FIOPIN&(1<<26)))
{
if(stop==0||(select%2==0&&stop==1)) //local time saniye ayari azalis
{
LPC_RTC->SEC=0;
DelayMs(0,400);
}
if((select%2==1&&stop==1)) //alarm time saniye ayari azalis
{
alarm_time.RTC_Sec=LPC_RTC->ALSEC;
alarm_time.RTC_Sec--;
if(local_time.RTC_Sec<0)
alarm_time.RTC_Sec=23;
LPC_RTC->ALSEC=alarm_time.RTC_Sec;
DelayMs(0,400);
}
}
}
else if(setting==4) //ayin günü ayari
{
if(!(LPC_GPIO1->FIOPIN&(1<<29)))
{
if(stop==0||(select%2==0&&stop==1))
{
local_time.RTC_Mday=LPC_RTC->DOM; //local time ay gunu ayari artis
local_time.RTC_Mday++;
if(local_time.RTC_Mday==32)
local_time.RTC_Mday=1;
LPC_RTC->DOM=local_time.RTC_Mday;
DelayMs(0,400);
}
if((select%2==1&&stop==1)) //alarm time ay gunu ayari artis
{
alarm_time.RTC_Mday=LPC_RTC->ALDOM;
alarm_time.RTC_Mday++;
if(alarm_time.RTC_Mday==32)
alarm_time.RTC_Mday=1;
LPC_RTC->ALDOM=alarm_time.RTC_Mday;
DelayMs(0,400);
}
}
if(!(LPC_GPIO1->FIOPIN&(1<<26)))
{
if(stop==0||(select%2==0&&stop==1)) //local time ay gunu ayari azalis
{
local_time.RTC_Mday=LPC_RTC->DOM;
local_time.RTC_Mday--;
if(local_time.RTC_Mday<0)
local_time.RTC_Mday=31;
LPC_RTC->DOM=local_time.RTC_Mday;
clock_write();
DelayMs(0,400);
}
if((select%2==1&&stop==1)) // alarm time ay gunu ayari azalis
{
alarm_time.RTC_Mday=LPC_RTC->ALDOM;
alarm_time.RTC_Mday--;
if(local_time.RTC_Mday<0)
alarm_time.RTC_Mday=31;
LPC_RTC->ALDOM=alarm_time.RTC_Mday;
DelayMs(0,400);
}
}
}
else if(setting==5) //ay ayari
{
if(!(LPC_GPIO1->FIOPIN&(1<<29))) //local time ay ayari artis
{
if(stop==0||(select%2==0&&stop==1))
{
local_time.RTC_Mon=LPC_RTC->MONTH;
local_time.RTC_Mon++;
if(local_time.RTC_Mon==13)
local_time.RTC_Mon=1;
LPC_RTC->MONTH=local_time.RTC_Mon;
DelayMs(0,400);
}
if((select%2==1&&stop==1)) //alarm time ay ayari artis
{
alarm_time.RTC_Mon=LPC_RTC->ALMON;
alarm_time.RTC_Mon++;
if(alarm_time.RTC_Mday==13)
alarm_time.RTC_Mon=1;
LPC_RTC->ALMON=alarm_time.RTC_Mon;
clock_write();
DelayMs(0,400);
}
}
if(!(LPC_GPIO1->FIOPIN&(1<<26)))
{
if(stop==0||(select%2==0&&stop==1)) //local time ay ayari azalis
{
local_time.RTC_Mon=LPC_RTC->MONTH;
local_time.RTC_Mon--;
if(local_time.RTC_Mon==0)
local_time.RTC_Mon=12;
LPC_RTC->MONTH=local_time.RTC_Mon;
DelayMs(0,400);
}
if((select%2==1&&stop==1)) //alarm time ay ayari azalis
{
alarm_time.RTC_Mon=LPC_RTC->ALMON;
alarm_time.RTC_Mon--;
if(local_time.RTC_Mon==0)
alarm_time.RTC_Mon=12;
LPC_RTC->ALMON=alarm_time.RTC_Mon;
DelayMs(0,400);
}
}
}
else if(setting==6) //yil ayari
{
if(!(LPC_GPIO1->FIOPIN&(1<<29))) //local time yil ayari artis
{
if(stop==0||(select%2==0&&stop==1))
{
local_time.RTC_Year=LPC_RTC->YEAR;
local_time.RTC_Year++;
if(local_time.RTC_Year==2100)
local_time.RTC_Year=2000;
LPC_RTC->YEAR=local_time.RTC_Year;
DelayMs(0,400);
}
if((select%2==1&&stop==1)) //alarm time yil ayari artis
{
alarm_time.RTC_Year=LPC_RTC->ALYEAR;
alarm_time.RTC_Year++;
if(alarm_time.RTC_Year==2100)
alarm_time.RTC_Year=2000;
LPC_RTC->ALYEAR=alarm_time.RTC_Year;
DelayMs(0,400);
}
}
if(!(LPC_GPIO1->FIOPIN&(1<<26)))//local time yil ayari azalis
{
if(stop==0||(select%2==0&&stop==1))
{
local_time.RTC_Year=LPC_RTC->YEAR;
local_time.RTC_Year--;
if(local_time.RTC_Year==1999)
local_time.RTC_Year=2099;
LPC_RTC->YEAR=local_time.RTC_Year;
DelayMs(0,400);
}
if((select%2==1&&stop==1)) //alarm time yil ayari azalis
{
alarm_time.RTC_Year=LPC_RTC->ALYEAR;
alarm_time.RTC_Year--;
if(local_time.RTC_Year==1999)
alarm_time.RTC_Year=2099;
LPC_RTC->ALYEAR=alarm_time.RTC_Year;
DelayMs(0,400);
}
}
}
else if(setting==7)   //haftanin gunu ayari
{
if(!(LPC_GPIO1->FIOPIN&(1<<29)))
{
if(stop==0||(select%2==0&&stop==1)) //local time haftanin gunu ayari artis
{
local_time.RTC_Wday=LPC_RTC->DOW;
local_time.RTC_Wday++;
if(local_time.RTC_Wday==7)
local_time.RTC_Wday=0;
LPC_RTC->DOW=local_time.RTC_Wday;
DelayMs(0,400);
}
if((select%2==1&&stop==1)) //alarm time haftanin günü ayari artis
{
alarm_time.RTC_Wday=LPC_RTC->ALDOW;
alarm_time.RTC_Wday++;
if(alarm_time.RTC_Wday==7)
alarm_time.RTC_Wday=0;
LPC_RTC->ALDOW=alarm_time.RTC_Wday;
DelayMs(0,400);
}
}
if(!(LPC_GPIO1->FIOPIN&(1<<26))) //local time haftanin gunu ayari azalis
{
if(stop==0||(select%2==0&&stop==1))
{
local_time.RTC_Wday=LPC_RTC->DOW;
local_time.RTC_Wday--;
if(local_time.RTC_Wday<0)
local_time.RTC_Wday=6;
LPC_RTC->DOW=local_time.RTC_Wday;
DelayMs(0,400);
}
if((select%2==1&&stop==1)) //alarm time haftanin gunu ayari azalis
{
alarm_time.RTC_Wday=LPC_RTC->ALDOW;
alarm_time.RTC_Wday--;
if(local_time.RTC_Wday<0)
alarm_time.RTC_Wday=6;
LPC_RTC->ALDOW=alarm_time.RTC_Wday;
DelayMs(0,400);
}
}
}
if(!(LPC_GPIO2->FIOPIN&(1<<10))) //Ayarlama tamam
{
stop=0;
setting=0;
yanson=0;
j=0;
rtc_stop();
alarm_on=1;
SysTickStop();
glcd_fillScreen(0);
glcd_text57(17,15,"AYARLAMA",2,1);
glcd_text57(8,35,"TAMAMLANDI",2,1);
DelayMs(0,1000);
rtc_start();
}
}
   
}
}

rtc.c:
#include <lpc17xx.h>
#include "yusuf_rtc.h"

void rtc_init(void)
{
LPC_SC->PCONP |= (1 << 9);
if(!(LPC_RTC->RTC_AUX)&(0x01<<4))
{
       LPC_RTC->RTC_AUX|=0x01<<4;
}
LPC_RTC->AMR = 0;
  LPC_RTC->CIIR = 1;
  LPC_RTC->CCR = 0;
  return;
}

void rtc_start(void)
{

LPC_RTC->CCR|=0x01;
LPC_RTC->ILR |= 0x03;

}

void rtc_restart(void)
{

LPC_RTC->CCR|=0x02;
}

void rtc_stop(void)
{
LPC_RTC->CCR=0;

}
void RTCSetTime(RTC_TIME Time)
{
LPC_RTC->SEC = Time.RTC_Sec;
    LPC_RTC->MIN = Time.RTC_Min;
  LPC_RTC->HOUR = Time.RTC_Hour;
  LPC_RTC->DOM = Time.RTC_Mday;
  LPC_RTC->DOW = Time.RTC_Wday;
  LPC_RTC->DOY = Time.RTC_Yday;
  LPC_RTC->MONTH = Time.RTC_Mon;
  LPC_RTC->YEAR = Time.RTC_Year;
}

RTC_TIME RTCGetTime(void)
{
RTC_TIME LocalTime;

LocalTime.RTC_Sec = LPC_RTC->SEC;
  LocalTime.RTC_Min = LPC_RTC->MIN;
  LocalTime.RTC_Hour = LPC_RTC->HOUR;
  LocalTime.RTC_Mday = LPC_RTC->DOM;
  LocalTime.RTC_Wday = LPC_RTC->DOW;
  LocalTime.RTC_Yday = LPC_RTC->DOY;
  LocalTime.RTC_Mon = LPC_RTC->MONTH;
  LocalTime.RTC_Year = LPC_RTC->YEAR;
  return ( LocalTime );   
}
void RTCSetAlarm(RTC_TIME Time)
{
LPC_RTC->ALSEC = Time.RTC_Sec;
    LPC_RTC->ALMIN = Time.RTC_Min;
  LPC_RTC->ALHOUR = Time.RTC_Hour;
  LPC_RTC->ALDOM = Time.RTC_Mday;
  LPC_RTC->ALDOW = Time.RTC_Wday;
  LPC_RTC->ALDOY = Time.RTC_Yday;
  LPC_RTC->ALMON = Time.RTC_Mon;
  LPC_RTC->ALYEAR = Time.RTC_Year;
}
RTC_TIME RTCGetAlarmTime(void)
{
RTC_TIME AlarmTime;

AlarmTime.RTC_Sec = LPC_RTC->ALSEC;
  AlarmTime.RTC_Min = LPC_RTC->ALMIN;
  AlarmTime.RTC_Hour = LPC_RTC->ALHOUR;
  AlarmTime.RTC_Mday = LPC_RTC->ALDOM;
  AlarmTime.RTC_Wday = LPC_RTC->ALDOW;
  AlarmTime.RTC_Yday = LPC_RTC->ALDOY;
  AlarmTime.RTC_Mon = LPC_RTC->ALMON;
  AlarmTime.RTC_Year = LPC_RTC->ALYEAR;
  return ( AlarmTime );   
}
void RTCAlarmMask(uint32_t AlarmMask)
{
LPC_RTC->AMR=AlarmMask;
}


rtc.h:
typedef struct{
int RTC_Sec;
int RTC_Min;
int RTC_Hour;
int RTC_Mday;
int RTC_Year;
int RTC_Mon;
int RTC_Wday;
int RTC_Yday;
}RTC_TIME;

#define AMRSEC 0x01
#define AMRMIN 0x02
#define AMRHOUR 0x04
#define AMRDOM  0x08
#define AMRDOW  0x10
#define AMRDOY  0x20
#define AMRMON  0x40
#define AMRYEAR 0x80


extern void rtc_init(void);
extern void rtc_start(void);
extern void rtc_restart(void);
extern void rtc_stop(void);
extern void RTCSetTime(RTC_TIME time);
extern RTC_TIME RTCGetTime(void);
extern RTC_TIME RTCGetAlarmTime(void);

delay.c:
#include <lpc17xx.h>
#include "yusuf_lpc17xx_delay.h"
void DelayMs(int timer_num,int bekle)
{
     if(timer_num==0)
     {

                     LPC_TIM0->TCR=0x02;//reset timer
                     LPC_TIM0->IR=0xFF;//tüm kesmeleri restle
                     LPC_TIM0->MR0=bekle*25000;
                     LPC_TIM0->MCR=0x04;
                     LPC_TIM0->TCR=0x01;//start timer
             LPC_TIM0->PR=0x00;//prescalar deger.Örnegin 2 oldugunda her 3 tick de bir sayar.
                     while(LPC_TIM0->TCR&0x01);//tasana kadar bekle
     }
     if(timer_num==1)
     {
                     LPC_TIM1->TCR=0x02;
                     LPC_TIM1->IR=0xFF;
                     LPC_TIM1->MR0=bekle*25000;
                     LPC_TIM1->MCR=0x04;
                     LPC_TIM1->TCR=0x01;
                     while(LPC_TIM1->TCR&0x01);
     }
     return;
}
void DelayUs(int timer_num,int bekle)
{
     if(timer_num==0)
     {
                     LPC_TIM0->TCR=0x02;
                     LPC_TIM0->IR=0xFF;
                     LPC_TIM0->MR0=bekle*12;
                     LPC_TIM0->MCR=0x04;
                     LPC_TIM0->TCR=0x01;
                     while(LPC_TIM0->TCR&0x01);
     }
     if(timer_num==1)
     {
                     LPC_TIM1->TCR=0x02;
                     LPC_TIM1->IR=0xFF;
                     LPC_TIM1->MR0=bekle*25;
                     LPC_TIM1->MCR=0x04;
                     LPC_TIM1->TCR=0x01;
                     while(LPC_TIM1->TCR&0x01);
     }
     return;
}

Note:GPIO2.5 pinine buzzer bağlandığında alarm vakti gelince çalıyo fakat bu vdeoda buzzer bağlamadığım için sadece ekrana ALARM yazıyo.
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: Okan AKÇA - 16 Eylül 2011, 21:15:51
hocam cok güzel olmuş ama ilk yorum yapan ben oldum bi arm cılgınlıgı başlamıstı  gercekten arm ile ilgilenenler icin bulunmaz bir kaynak
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: M_B - 16 Eylül 2011, 21:47:49
@yamak hocam;
paylaşımınız ve projeniz icin tebrik ederim. ARM ye başlayanlar için guzel bir örnek.
Bende de LPC1768 kiti var ama henuz bir adım atamadım. İnşallah kısa zaman da onunla çalışmaya başlayacağım.

Hocam
yusuf_rtc.h
yusuf_lpc17xx_delay.h
lpc_glcd.h

bunlarıda paylaşabilirmisiniz.

Teşekkürler
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: Kadir Can(16F84) - 16 Eylül 2011, 23:28:27
Hocam;
Galiba rtc.h, yusuf_rtc.h oluyor.
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: yamak - 17 Eylül 2011, 10:28:49
evet arkadaslar rtc.h yusuf_rtc.h. su an telefondan giriyorum nete bilgisayardan girdimde geri kalan kutuphane dosyalarini da paylasirim.
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: yamak - 19 Eylül 2011, 15:08:44
@ M_B
Uygulamanın geri kalan kütüphane dosyaları:

yusuf_lpc17xx_delay.h

extern void DelayMs(int timer_num,int bekle);
extern void DelayUs(int timer_num,int bekle) ;


lpc_glcd.c:

#include <lpc17xx.h>
#include <yusuf_lpc17xx_delay.h>
#include <lpc_glcd.h>
#include <string.h>
const unsigned char TEXT[51][5] ={0x00, 0x00, 0x00, 0x00, 0x00, // SPACE
                         0x00, 0x00, 0x5F, 0x00, 0x00, // !
                         0x00, 0x03, 0x00, 0x03, 0x00, // "
                         0x14, 0x3E, 0x14, 0x3E, 0x14, // #
                         0x24, 0x2A, 0x7F, 0x2A, 0x12, // $
                         0x43, 0x33, 0x08, 0x66, 0x61, // %
                         0x36, 0x49, 0x55, 0x22, 0x50, // &
                         0x00, 0x05, 0x03, 0x00, 0x00, // '
                         0x00, 0x1C, 0x22, 0x41, 0x00, // (
                         0x00, 0x41, 0x22, 0x1C, 0x00, // )
                         0x14, 0x08, 0x3E, 0x08, 0x14, // *
                         0x08, 0x08, 0x3E, 0x08, 0x08, // +
                         0x00, 0x50, 0x30, 0x00, 0x00, // ,
                         0x08, 0x08, 0x08, 0x08, 0x08, // -
                         0x00, 0x60, 0x60, 0x00, 0x00, // .
                         0x20, 0x10, 0x08, 0x04, 0x02, // /
                         0x3E, 0x51, 0x49, 0x45, 0x3E, // 0
                         0x04, 0x02, 0x7F, 0x00, 0x00, // 1
                         0x42, 0x61, 0x51, 0x49, 0x46, // 2
                         0x22, 0x41, 0x49, 0x49, 0x36, // 3
                         0x18, 0x14, 0x12, 0x7F, 0x10, // 4
                         0x27, 0x45, 0x45, 0x45, 0x39, // 5
                         0x3E, 0x49, 0x49, 0x49, 0x32, // 6
                         0x01, 0x01, 0x71, 0x09, 0x07, // 7
                         0x36, 0x49, 0x49, 0x49, 0x36, // 8
                         0x26, 0x49, 0x49, 0x49, 0x3E, // 9
                         0x00, 0x36, 0x36, 0x00, 0x00, // :
                         0x00, 0x56, 0x36, 0x00, 0x00, // ;
                         0x08, 0x14, 0x22, 0x41, 0x00, // <
                         0x14, 0x14, 0x14, 0x14, 0x14, // =
                         0x00, 0x41, 0x22, 0x14, 0x08, // >
                         0x02, 0x01, 0x51, 0x09, 0x06, // ?
                         0x3E, 0x41, 0x59, 0x55, 0x5E, // @
                         0x7E, 0x09, 0x09, 0x09, 0x7E, // A
                         0x7F, 0x49, 0x49, 0x49, 0x36, // B
                         0x3E, 0x41, 0x41, 0x41, 0x22, // C
                         0x7F, 0x41, 0x41, 0x41, 0x3E, // D
                         0x7F, 0x49, 0x49, 0x49, 0x41, // E
                         0x7F, 0x09, 0x09, 0x09, 0x01, // F
                         0x3E, 0x41, 0x41, 0x49, 0x3A, // G
                         0x7F, 0x08, 0x08, 0x08, 0x7F, // H
                         0x00, 0x41, 0x7F, 0x41, 0x00, // I
                         0x30, 0x40, 0x40, 0x40, 0x3F, // J
                         0x7F, 0x08, 0x14, 0x22, 0x41, // K
                         0x7F, 0x40, 0x40, 0x40, 0x40, // L
                         0x7F, 0x02, 0x0C, 0x02, 0x7F, // M
                         0x7F, 0x02, 0x04, 0x08, 0x7F, // N
                         0x3E, 0x41, 0x41, 0x41, 0x3E, // O
                         0x7F, 0x09, 0x09, 0x09, 0x06, // P
                         0x1E, 0x21, 0x21, 0x21, 0x5E, // Q
                         0x7F, 0x09, 0x09, 0x09, 0x76};// R

const unsigned char TEXT2[44][5]={0x26, 0x49, 0x49, 0x49, 0x32, // S
                         0x01, 0x01, 0x7F, 0x01, 0x01, // T
                         0x3F, 0x40, 0x40, 0x40, 0x3F, // U
                         0x1F, 0x20, 0x40, 0x20, 0x1F, // V
                         0x7F, 0x20, 0x10, 0x20, 0x7F, // W
                         0x41, 0x22, 0x1C, 0x22, 0x41, // X
                         0x07, 0x08, 0x70, 0x08, 0x07, // Y
                         0x61, 0x51, 0x49, 0x45, 0x43, // Z
                         0x00, 0x7F, 0x41, 0x00, 0x00, // [
                         0x02, 0x04, 0x08, 0x10, 0x20, //
                         0x00, 0x00, 0x41, 0x7F, 0x00, // ]
                         0x04, 0x02, 0x01, 0x02, 0x04, // ^
                         0x40, 0x40, 0x40, 0x40, 0x40, // _
                         0x00, 0x01, 0x02, 0x04, 0x00, // `
                         0x20, 0x54, 0x54, 0x54, 0x78, // a
                         0x7F, 0x44, 0x44, 0x44, 0x38, // b
                         0x38, 0x44, 0x44, 0x44, 0x44, // c
                         0x38, 0x44, 0x44, 0x44, 0x7F, // d
                         0x38, 0x54, 0x54, 0x54, 0x18, // e
                         0x04, 0x04, 0x7E, 0x05, 0x05, // f
                         0x08, 0x54, 0x54, 0x54, 0x3C, // g
                         0x7F, 0x08, 0x04, 0x04, 0x78, // h
                         0x00, 0x44, 0x7D, 0x40, 0x00, // i
                         0x20, 0x40, 0x44, 0x3D, 0x00, // j
                         0x7F, 0x10, 0x28, 0x44, 0x00, // k
                         0x00, 0x41, 0x7F, 0x40, 0x00, // l
                         0x7C, 0x04, 0x78, 0x04, 0x78, // m
                         0x7C, 0x08, 0x04, 0x04, 0x78, // n
                         0x38, 0x44, 0x44, 0x44, 0x38, // o
                         0x7C, 0x14, 0x14, 0x14, 0x08, // p
                         0x08, 0x14, 0x14, 0x14, 0x7C, // q
                         0x00, 0x7C, 0x08, 0x04, 0x04, // r
                         0x48, 0x54, 0x54, 0x54, 0x20, // s
                         0x04, 0x04, 0x3F, 0x44, 0x44, // t
                         0x3C, 0x40, 0x40, 0x20, 0x7C, // u
                         0x1C, 0x20, 0x40, 0x20, 0x1C, // v
                         0x3C, 0x40, 0x30, 0x40, 0x3C, // w
                         0x44, 0x28, 0x10, 0x28, 0x44, // x
                         0x0C, 0x50, 0x50, 0x50, 0x3C, // y
                         0x44, 0x64, 0x54, 0x4C, 0x44, // z
                         0x00, 0x08, 0x36, 0x41, 0x41, // {
                         0x00, 0x00, 0x7F, 0x00, 0x00, // |
                         0x41, 0x41, 0x36, 0x08, 0x00, // }
                         0x02, 0x01, 0x02, 0x04, 0x02};// ~
void glcd_init(void)
{

   GLCD_RST(1);
   GLCD_EC(1);
   GLCD_CS1C(1);
   GLCD_CS2C(1);

   GLCD_DIC(1);                     
   glcd_writeByte(1, 0xC0);   
   glcd_writeByte(0, 0xC0);   
   glcd_writeByte(1, 0x40);   
   glcd_writeByte(0, 0x40);
   glcd_writeByte(1, 0xB8);
   glcd_writeByte(0, 0xB8);
   
   glcd_writeByte(1, 0x3F);
   glcd_writeByte(0, 0x3F);

   glcd_fillScreen(0);         
}

void glcd_pixel(int x, int y, int color)
{
   int data;
   int chip = 0;

   if(x > 63)
   {
      x -= 64;
      chip = 1;
   }

   GLCD_DIC(1);                               
   x= x&0x7F;                                         
   x= x|0x40;                                         
   glcd_writeByte(chip, x);                             
   glcd_writeByte(chip, (y/8 & 0xBF) | 0xB8);   
   GLCD_DI(1);
   glcd_readByte(chip);                                 
   data = glcd_readByte(chip);

   if(color == 1)
     data=data|(1<<(y%8));     
   else                     
      data= data&(~(1<<(y%8)));   
   GLCD_DIC(1);   
   glcd_writeByte(chip, x);     
   GLCD_DI(1);       
   glcd_writeByte(chip, data);
}

void glcd_line(int x1, int y1, int x2, int y2, int color)
{
   signed int  x, y, addx, addy, dx, dy;
   signed long P;
   int i;
   if(x2>x1)
     dx=x2-x1;
   else
      dx=x1-x2;
   if(y2>y1)
      dy=y2-y1;
   else
      dy=y1-y2;
   x = x1;
   y = y1;

   if(x1 > x2)
      addx = -1;
   else
      addx = 1;
   if(y1 > y2)
      addy = -1;
   else
      addy = 1;

   if(dx >= dy)
   {
      P = 2*dy - dx;
      for(i=0; i<=dx; ++i)
      {
         glcd_pixel(x, y, color);

         if(P < 0)
         {
            P += 2*dy;
            x += addx;
         }
         else
         {
            P += 2*dy - 2*dx;
            x += addx;
            y += addy;
         }
      }
   }
   else
   {
      P = 2*dx - dy;
      for(i=0; i<=dy; ++i)
      {
         glcd_pixel(x, y, color);

         if(P < 0)
         {
            P += 2*dx;
            y += addy;
         }
         else
         {
            P += 2*dx - 2*dy;
            x += addx;
            y += addy;
         }
      }
   }
}
void glcd_rect(int x1, int y1, int x2, int y2, int fill, int color)
{
   if(fill)
   {
      int ymin, ymax;
      int xmin,xmax,i,j;
      if(x1<x2)
      {
xmin=x1;
        xmax=x2;
      }                         
      else
      {
xmin=x2;
        xmax=x1;
      }
      if(y1 < y2)
      {
         ymin = y1;
         ymax = y2;
      }
      else
      {
         ymin = y2;
         ymax = y1;
      }
      for(j=xmin;j<=xmax;++j)
      {
      for(i=ymin;i<=ymax;++i)
         {             
         glcd_pixel(j,i,color);
         }
       }
    }
   else
   {
      glcd_line(x1, y1, x2, y1, color);   
      glcd_line(x1, y2, x2, y2, color);
      glcd_line(x1, y1, x1, y2, color);
      glcd_line(x2, y1, x2, y2, color);
   }
}

void glcd_bar(int x1, int y1, int x2, int y2, int width, int color)
{
   signed int  x, y, addx, addy, j;
   signed long P, dx, dy, c1, c2;
   int i;
   if(x2>x1)
   dx=x2-x1;
   else
   dx=x1-x2;
   if(y2>y1)
   dy=y2-y1;
   else
   dy=y1-y2;
   
   x = x1;
   y = y1;
   c1 = -dx*x1 - dy*y1;
   c2 = -dx*x2 - dy*y2;

   if(x1 > x2)
   {
      addx = -1;
      c1 = -dx*x2 - dy*y2;
      c2 = -dx*x1 - dy*y1;
   }
   else
      addx = 1;
   if(y1 > y2)
   {
      addy = -1;
      c1 = -dx*x2 - dy*y2;
      c2 = -dx*x1 - dy*y1;
   }
   else
      addy = 1;

   if(dx >= dy)
   {
      P = 2*dy - dx;

      for(i=0; i<=dx; ++i)
      {
         for(j=-(width/2); j<width/2+width%2; ++j)
         {
            if(dx*x+dy*(y+j)+c1 >= 0 && dx*x+dy*(y+j)+c2 <=0)
               glcd_pixel(x, y+j, color);
         }
         if(P < 0)
         {
            P += 2*dy;
            x += addx;
         }
         else
         {
            P += 2*dy - 2*dx;
            x += addx;
            y += addy;
         }
      }
   }
   else
   {
      P = 2*dx - dy;

      for(i=0; i<=dy; ++i)
      {
         if(P < 0)
         {
            P += 2*dx;
            y += addy;
         }
         else
         {
            P += 2*dx - 2*dy;
            x += addx;
            y += addy;
         }
         for(j=-(width/2); j<width/2+width%2; ++j)
         {
            if(dx*x+dy*(y+j)+c1 >= 0 && dx*x+dy*(y+j)+c2 <=0)
               glcd_pixel(x+j, y, color);
         }
      }
   }
}

void glcd_circle(int x, int y, int radius, int fill, int color)
{
   signed int a, b, P;
   a = 0;
   b = radius;
   P = 1 - radius;

   do
   {
      if(fill)
      {
         glcd_line(x-a, y+b, x+a, y+b, color);
         glcd_line(x-a, y-b, x+a, y-b, color);
         glcd_line(x-b, y+a, x+b, y+a, color);
         glcd_line(x-b, y-a, x+b, y-a, color);
      }
      else
      {
         glcd_pixel(a+x, b+y, color);
         glcd_pixel(b+x, a+y, color);
         glcd_pixel(x-a, b+y, color);
         glcd_pixel(x-b, a+y, color);
         glcd_pixel(b+x, y-a, color);
         glcd_pixel(a+x, y-b, color);
         glcd_pixel(x-a, y-b, color);
         glcd_pixel(x-b, y-a, color);
      }

      if(P < 0)
         P+= 3 + 2*a++;
      else
         P+= 5 + 2*(a++ - b--);
    } while(a <= b);
}

void glcd_fillScreen(unsigned char color)
{
   unsigned char i, j;
   for(i = 0; i < 8; i++)
   {
      GLCD_DIC(1);                   
      glcd_writeByte(1, 0x40);   
      glcd_writeByte(0, 0x40);
      glcd_writeByte(1, i | 0xB8);
      glcd_writeByte(0, i | 0xB8);
      GLCD_DI(1);                   
      for(j = 0; j < 64; j++)
      {
         glcd_writeByte(1, 0xFF*color);
         glcd_writeByte(0, 0xFF*color);
      }
   }
}
void glcd_text57(int x, int y, char* textptr, int size, int color)
{
   int i, j, k, l, m;                   
   unsigned char pixelData[5];             

   for(i=0; textptr[i] != '\0'; ++i, ++x)
   {
      if(textptr[i] < 'S')
         memcpy(pixelData, TEXT[textptr[i]-' '], 5);
      else if(textptr[i] <= '~')
         memcpy(pixelData, TEXT2[textptr[i]-'S'], 5);
      else
         memcpy(pixelData, TEXT[0], 5); 

      if(x+5*size >= GLCD_WIDTH)       
      {
         x = 0;                         
         y += 7*size + 1;               
      }
      for(j=0; j<5; ++j, x+=size)       
      {
         for(k=0; k<7*size; ++k)     
         {
            if((pixelData[j]&(1<<k))>>k==1)
            {
               for(l=0; l<size; ++l)     
               {                       
                  for(m=0; m<size; ++m)
                  {
                     glcd_pixel(x+m, y+k*size+l, color);
                  }
               }
            }
         }
      }
   }
}

void glcd_writeByte(int chip, unsigned char data)
{
   if(chip == 1)   
     {
      GLCD_CS1(1);
      GLCD_CS2C(1);
     }
   else
      {
      GLCD_CS2(1);
      GLCD_CS1C(1);
      }
   DelayUs(0,1);//****
   GLCD_RWC(1);
   DelayUs(0,1);//****   
   LPC_GPIO0->FIOCLR=0xFFFFFFFF;
   LPC_GPIO0->FIOSET=data<<15;         
   GLCD_E(1);     
   DelayUs(0,1);
   GLCD_EC(1);
   GLCD_CS1C(1);     
   GLCD_CS2C(1);
}
unsigned char glcd_readByte(int chip)
{
   unsigned char data;
   LPC_GPIO0->FIODIR=0x0000;
   DelayUs(0,1);
   GLCD_RW(1);
   if(chip == 1)       
     {
      GLCD_CS1(1);
      GLCD_CS2C(1);
     }
   else
      {
      GLCD_CS2(1);
      GLCD_CS1C(1);
      }
   DelayUs(0,1);
   GLCD_E(1);     
   DelayUs(0,1);
   data = ((LPC_GPIO0->FIOPIN>>15)&(0xFF));
   GLCD_EC(1);
   LPC_GPIO0->FIODIR=0xFFFFFFFF;
   GLCD_CS1C(1);     
   GLCD_CS2C(1);
   return (data);         
}



lpc_glcd.h:


#define GLCD_WIDTH  128 
#define GLCD_HEIGTH 64

#define ON  1
#define OFF 0

#define YES 1
#define NO  0

#define GLCD_CS1(a) (LPC_GPIO1->FIOSET=a<<19)   // Chip Selection 1
#define GLCD_CS1C(a) (LPC_GPIO1->FIOCLR=a<<19)

#define GLCD_CS2(a) (LPC_GPIO1->FIOSET=a<<20)   // Chip Selection 2
#define GLCD_CS2C(a) (LPC_GPIO1->FIOCLR=a<<20)

#define GLCD_DI(a)  (LPC_GPIO1->FIOSET=a<<21)   // Data or Instruction input
#define GLCD_DIC(a)  (LPC_GPIO1->FIOCLR=a<<21)

#define GLCD_RW(a)  (LPC_GPIO1->FIOSET=a<<24)  // Read/Write
#define GLCD_RWC(a)  (LPC_GPIO1->FIOCLR=a<<24)

#define GLCD_E(a)   (LPC_GPIO1->FIOSET=a<<23)   // Enable
#define GLCD_EC(a)   (LPC_GPIO1->FIOCLR=a<<23)

#define GLCD_RST(a) (LPC_GPIO1->FIOSET=a<<25)
#define GLCD_RSTC(a) (LPC_GPIO1->FIOCLR=a<<25)   // Reset*/

extern void glcd_init(void);
extern void glcd_pixel(int x,int y,int color);
extern void glcd_line(int x1,int y1,int x2,int y2,int color);
extern void glcd_rect(int x1,int y1,int x2,int y2,int fill,int color);
extern void glcd_bar(int x1,int y1,int x2,int y2,int width,int color);
extern void glcd_circle(int x,int y,int radius,int fill,int color);
extern void glcd_text57(int x,int y,char *textptr,int size,int color);
extern void glcd_fillScreen(unsigned char color);
extern void glcd_writeByte(int chip,unsigned char data);
unsigned char glcd_readByte(int chip);


Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: M_B - 19 Eylül 2011, 19:13:56
@yamak
Teşekkür ederim. Kolay gelsin.
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: buzkırıcı - 19 Kasım 2011, 20:14:14
Çok Teşekkürler. Çok güzel bir paylaşım..
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: Mujdat117 - 19 Kasım 2011, 22:16:27
hocam tebrik ederim çok güzel bir uygulama olmuş insanın iştahını kabartıyo  :D
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: -Hasan- - 19 Kasım 2011, 23:01:04
Hocam süper süper süper olmuş.  :D Tebrikler, ARM için çok güzel bir örnek.
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: Murat Mert - 20 Kasım 2011, 15:54:43
Hasan Arm sende iyice ısınmaya başladı :D
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: -Hasan- - 20 Kasım 2011, 17:30:00
Alıntı yapılan: mert07 - 20 Kasım 2011, 15:54:43
Hasan Arm sende iyice ısınmaya başladı :D

Aynen öyle hocam.  :) Bir ARM öğrenme çılgınlığı aldı başını gidiyor bende.  :D
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: yamak - 20 Kasım 2011, 17:57:48
Alıntı yapılan: -Hasan- - 20 Kasım 2011, 17:30:00
Aynen öyle hocam.  :) Bir ARM öğrenme çılgınlığı aldı başını gidiyor bende.  :D
Hangi mcu yu kullanıyosunuz?
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: -Hasan- - 20 Kasım 2011, 18:03:14
Hocam yanlış anladınız galiba. ARM öğrenme hevesi demek istemiştim. ARM ' lar bayağı ilgimi çekiyor da o yüzden öyle söyledim.  :) STM32 kitlerini bekliyorum başlamak için. Ama siz bu işi çözmüşsünüz hocam. Tebrik ederim.
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: yamak - 20 Kasım 2011, 18:06:09
Yok ya benim de kendimi eksik hissettiğim bayaa yerler var. Öğrenecek daha çok şey var.Hem sen niye dert ediyon yaşın daha küçük benim yaşıma kadar neler öğrenirsin neler :)
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: buzkırıcı - 25 Kasım 2011, 21:05:16
Bu çalışmayı yaptığınız kit ne kadar? nereden sipariş ettiniz?
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: yamak - 25 Kasım 2011, 22:55:37
Ben aldığımda 100$ dı. Ebaydan aldım.
http://www.ebay.com/itm/NXP-LPC1768-ARM-Development-Board-3-2-TFT-LCD-Module-/270653509451?pt=BI_Electrical_Equipment_Tools&hash=item3f0434cf4b#ht_2325wt_1110 (http://www.ebay.com/itm/NXP-LPC1768-ARM-Development-Board-3-2-TFT-LCD-Module-/270653509451?pt=BI_Electrical_Equipment_Tools&hash=item3f0434cf4b#ht_2325wt_1110)
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: Okan AKÇA - 25 Kasım 2011, 23:05:34
bende almak istemiştim fiyatı duyunca geri cekildim.
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: yamak - 25 Kasım 2011, 23:08:18
Şu an ucuz bence.
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: buzkırıcı - 25 Kasım 2011, 23:17:37
Banda ucuz geldi :) kaç günde geldi?
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: Okan AKÇA - 25 Kasım 2011, 23:31:08
toplamda ne kadara geliyor hocam
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: yamak - 25 Kasım 2011, 23:48:39
Kargo parası toplam 79$ a geliyo. Ben 180 lira ya getirtmiştim
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: MC_Skywalker - 26 Kasım 2011, 09:44:37
Alibaba expresten aldım kargo dahil $71.17 cık.
http://www.aliexpress.com/product-fm/505443087-NXP-ARM-Cortex-M3-LPC1768-Development-Board-3-2-TFT-Touch-Screen-Module-100MHz-wholesalers.html
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: buzkırıcı - 26 Kasım 2011, 15:52:48
Ali baba daha uygun gibi? hocam kaç günde geldi?
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: MC_Skywalker - 26 Kasım 2011, 17:21:08
daha gelmedi. NXP nin sitesindeki NXP Technical Academy için aldım. buradaki video derslerde bu kit üzerinde anlatım yapmışlar.

ST32F4 ile birlikte ikisini yürüte bilecekmiyim.

bu arda yüzüne bakamayacağımdan dolayı ARMv7 NXP LPC2138 li EXLPC64P kitmi satıyorum. Eskici dükkanında ilanım mevcut. -----> https://www.picproje.org/index.php/topic,36161.0.html



Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: Pir-O - 26 Kasım 2011, 20:00:41
Ben de bu kit ile ilgileniyorum alırken kartın V2.0 olmasına dikkat edin üretici firma biraz güncellemiş. Ayrıca bu kart Keil'in MCB1760 Development Board'ın bire bir aynısı aynı kodu atınca çalışır. Honk Kong'dan geleceği için 1 ay sürer gelmesi ama beklemeğe değer :)

http://www.aliexpress.com/product-fm/393415106-Free-Shipping-NXP-ARM-LPC1768-DevBoard-Cortex-M3-3-2-touchscreen-LCD-with-JLink-V8-On-wholesalers.html (http://www.aliexpress.com/product-fm/393415106-Free-Shipping-NXP-ARM-LPC1768-DevBoard-Cortex-M3-3-2-touchscreen-LCD-with-JLink-V8-On-wholesalers.html)
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: yamak - 26 Kasım 2011, 20:15:06
Ben sipariş ettiğimde 15 gün olmadan gelmişti.Ayrıca sd kart yuvası mcb1760 ile uyuşmuyo farklı spi pinleri kullanılmış.
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: cseb - 03 Mayıs 2012, 21:04:29
GLCD kütüphanesindeki data pinlerini hangi satırlardan değiştirebiliyoruz?
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: yamak - 03 Mayıs 2012, 23:25:43
lpc_glcd.h dosyasından değiştirebilirsin
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: cseb - 03 Mayıs 2012, 23:41:31
lpc_glcd.h dosyasında data pinlerini açıklayan satırlar hangileri?
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: yamak - 04 Mayıs 2012, 21:22:14
Kontrol pinleri buradan değiştirebiirsiniz:

#define GLCD_CS1(a) (LPC_GPIO1->FIOSET=a<<19)   // Chip Selection 1
#define GLCD_CS1C(a) (LPC_GPIO1->FIOCLR=a<<19)

#define GLCD_CS2(a) (LPC_GPIO1->FIOSET=a<<20)   // Chip Selection 2
#define GLCD_CS2C(a) (LPC_GPIO1->FIOCLR=a<<20)

#define GLCD_DI(a)  (LPC_GPIO1->FIOSET=a<<21)   // Data or Instruction input
#define GLCD_DIC(a)  (LPC_GPIO1->FIOCLR=a<<21)

#define GLCD_RW(a)  (LPC_GPIO1->FIOSET=a<<24)  // Read/Write
#define GLCD_RWC(a)  (LPC_GPIO1->FIOCLR=a<<24)

#define GLCD_E(a)   (LPC_GPIO1->FIOSET=a<<23)   // Enable
#define GLCD_EC(a)   (LPC_GPIO1->FIOCLR=a<<23)

#define GLCD_RST(a) (LPC_GPIO1->FIOSET=a<<25)
#define GLCD_RSTC(a) (LPC_GPIO1->FIOCLR=a<<25)   // Reset*/


Data pinleri de GPIO0<15,16,17,18,19,20,21,22>
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: zamzam23 - 19 Aralık 2012, 04:03:52
hocam ben biraz acemiyim. sizin bu projenizde yusuf_rtc.h da problem çıkıyor include edemedim projeye. projenin tamamını include edilmiş haliyle paylasmanız mumkun mu? *.uvproj dosyasıyla yani.

main.c(2): error:  #5: cannot open source input file "yusuf_rtc.h": No such file or directory

şeklinde bir hata alıyorum sürekli.
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: yamak - 19 Aralık 2012, 17:31:11
Hocam rtc.h ve rtc.c dosyalarının her ikisini de proje klasörünüze kopyalayın. Sonra Keilda sol taraftan Source Group 1 e sağ tıklayın ve Add Files to Group 'Source Group 1' e tıklayıp yusuf_rtc.c dosyasını seçip proje dahil edin.Sonra projeyi derleyin.Bi sorun çıkmaması lazım.
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: zamzam23 - 19 Aralık 2012, 17:43:51
olmuyor yapamadım.
yusuf_rtc.c ve rtc.c dosyaları ayrı ayrı dosyalar mıdır ve ikisininde olması gerekli midir? yoksa yazım hatası mı var 
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: sseedat - 19 Aralık 2012, 17:49:30
Alıntı yapılan: zamzam23 - 19 Aralık 2012, 04:03:52
hocam ben biraz acemiyim. sizin bu projenizde yusuf_rtc.h da problem çıkıyor include edemedim projeye. projenin tamamını include edilmiş haliyle paylasmanız mumkun mu? *.uvproj dosyasıyla yani.

main.c(2): error:  #5: cannot open source input file "yusuf_rtc.h": No such file or directory

şeklinde bir hata alıyorum sürekli.
yusuf_rtc.h dosya yolunu keil de belirterek deneyebilirsin
Başlık: Ynt: lpc1768 ile dijital-analog saat uygulaması
Gönderen: yamak - 19 Aralık 2012, 19:58:26
Hocam şu iki dosya:
yusuf_rtc.c:
#include <lpc17xx.h>
#include "yusuf_rtc.h"

void rtc_init(void)
{
    LPC_SC->PCONP |= (1 << 9);
    if(!(LPC_RTC->RTC_AUX)&(0x01<<4))
    {
       LPC_RTC->RTC_AUX|=0x01<<4;
    }
    LPC_RTC->AMR = 0;
  LPC_RTC->CIIR = 1;
  LPC_RTC->CCR = 0;
  return;
}

void rtc_start(void)
{
   
    LPC_RTC->CCR|=0x01;
    LPC_RTC->ILR |= 0x03;

}

void rtc_restart(void)
{

    LPC_RTC->CCR|=0x02;
}

void rtc_stop(void)
{
    LPC_RTC->CCR=0;

}
void RTCSetTime(RTC_TIME Time)
{
    LPC_RTC->SEC = Time.RTC_Sec;
    LPC_RTC->MIN = Time.RTC_Min;
  LPC_RTC->HOUR = Time.RTC_Hour;
  LPC_RTC->DOM = Time.RTC_Mday;
  LPC_RTC->DOW = Time.RTC_Wday;
  LPC_RTC->DOY = Time.RTC_Yday;
  LPC_RTC->MONTH = Time.RTC_Mon;
  LPC_RTC->YEAR = Time.RTC_Year;
}

RTC_TIME RTCGetTime(void)
{
    RTC_TIME LocalTime;
   
    LocalTime.RTC_Sec = LPC_RTC->SEC;
  LocalTime.RTC_Min = LPC_RTC->MIN;
  LocalTime.RTC_Hour = LPC_RTC->HOUR;
  LocalTime.RTC_Mday = LPC_RTC->DOM;
  LocalTime.RTC_Wday = LPC_RTC->DOW;
  LocalTime.RTC_Yday = LPC_RTC->DOY;
  LocalTime.RTC_Mon = LPC_RTC->MONTH;
  LocalTime.RTC_Year = LPC_RTC->YEAR;
  return ( LocalTime );   
}
void RTCSetAlarm(RTC_TIME Time)
{
    LPC_RTC->ALSEC = Time.RTC_Sec;
    LPC_RTC->ALMIN = Time.RTC_Min;
  LPC_RTC->ALHOUR = Time.RTC_Hour;
  LPC_RTC->ALDOM = Time.RTC_Mday;
  LPC_RTC->ALDOW = Time.RTC_Wday;
  LPC_RTC->ALDOY = Time.RTC_Yday;
  LPC_RTC->ALMON = Time.RTC_Mon;
  LPC_RTC->ALYEAR = Time.RTC_Year;
}
RTC_TIME RTCGetAlarmTime(void)
{
    RTC_TIME AlarmTime;
   
    AlarmTime.RTC_Sec = LPC_RTC->ALSEC;
  AlarmTime.RTC_Min = LPC_RTC->ALMIN;
  AlarmTime.RTC_Hour = LPC_RTC->ALHOUR;
  AlarmTime.RTC_Mday = LPC_RTC->ALDOM;
  AlarmTime.RTC_Wday = LPC_RTC->ALDOW;
  AlarmTime.RTC_Yday = LPC_RTC->ALDOY;
  AlarmTime.RTC_Mon = LPC_RTC->ALMON;
  AlarmTime.RTC_Year = LPC_RTC->ALYEAR;
  return ( AlarmTime );   
}
void RTCAlarmMask(uint32_t AlarmMask)
{
    LPC_RTC->AMR=AlarmMask;
}


yusuf_rtc.h:
typedef struct{
    int RTC_Sec;
    int RTC_Min;
    int RTC_Hour;
    int RTC_Mday;
    int RTC_Year;
    int RTC_Mon;
    int RTC_Wday;
    int RTC_Yday;
}RTC_TIME;

#define AMRSEC 0x01
#define AMRMIN 0x02
#define AMRHOUR 0x04
#define AMRDOM  0x08
#define AMRDOW  0x10
#define AMRDOY  0x20
#define AMRMON  0x40
#define AMRYEAR 0x80


extern void rtc_init(void);
extern void rtc_start(void);
extern void rtc_restart(void);
extern void rtc_stop(void);
extern void RTCSetTime(RTC_TIME time);
extern RTC_TIME RTCGetTime(void);
extern RTC_TIME RTCGetAlarmTime(void);


bu iki dosyanın proje klasöründe olması gerekiyo.