#define Set_Dio( ) GPIO_PinSet(GPIO_PTB0) //DAT
#define Clr_Dio() GPIO_PinClear(GPIO_PTB0)
#define Set_Sclk( ) GPIO_PinSet(GPIO_PTB1)//CLK
#define Clr_Sclk( ) GPIO_PinClear(GPIO_PTB1)
#define Di_Ss( ) GPIO_PinClear(GPIO_PTB2) //RST
#define En_Ss( ) GPIO_PinSet(GPIO_PTB2)
#define Read_Dio( ) (GPIO_Read(GPIOA)&GPIO_PTB0_MASK)
void delay( int t )
{ int k,j;
for(k=0;k<t;k++)
for(j=0;j<10000;j++)
;
}
char Rtc_Init[8]={ 0x50, //Ãë 0
0x30, //·Ö 1
0x13, //Сʱ
0x19,//ÈÕ 3
0x10,//ÔÂ 4
0x02,//ÖÜ
0x16,//2016Äê
0x00,//дЧÐí
};
void Dio_In( )
{
GPIO_PinInit(GPIO_PTB0, GPIO_PinInput);
}
void DIO_Out( )
{
GPIO_PinInit(GPIO_PTB0, GPIO_PinOutput);
}
/******************************************************
Ãû³Æ:Write_Data( )
¹¦ÄÜ:дһ¸ö×Ö½Ú
˵Ã÷:1.µÍλÔÚÇ°,2ÏȵØÖ·ºóÊý¾Ý,3ÔÚдÆÚ¼äSSÓÐЧ
Èë¿Ú²ÎÊý Addr
Data
³ö¿Ú²ÎÊý
***********************************************************/
void Write_Data(char Addr ,char Data)
{ char i=0;
int Coda=0;
Coda=(Data<<8)|Addr;
En_Ss( );
for(i=0;i<16;i++)
{ if((Coda&0x01)!=0)
Set_Dio( );
else
Clr_Dio();
Set_Sclk( );
Coda=Coda>>1;
Clr_Sclk( );
}
Di_Ss( );
}
/*********************************************
Ãû³Æ:Set_Time( )
¹¦ÄÜ:ÉèÖÃʱ¼ä
˵Ã÷:1,ÏȵØÖ·,ºóÊý¾Ý,2Á¬Ðøд8¸ö
Èë¿Ú²ÎÊý Addr µØÖ·
Time[8] ʱ¼ä
³ö¿Ú²ÎÊý ÎÞ
***********************************************/
void Set_Timer(char Addr , unsigned char Time[8])
{char i=0,j=0;
int Coda=0;
Coda=Addr;
En_Ss( );
for(i=0;i<8;i++)
{ if((Coda&0x01)!=0)
Set_Dio( );
else
Clr_Dio( );
Set_Sclk();
Coda=Coda>>1;
Clr_Sclk( );
}
for(i=0;i<8;i++)
{ Coda=Time;
for(j=0;j<8;j++)
{ if((Coda&0x01)!=0)
Set_Dio( );
else
Clr_Dio( );
Set_Sclk( );
Coda=Coda>>1;
Clr_Sclk( );
}
}
Di_Ss( );
}
/**********************************************
Ãû³Æ:Read_Data( )
¹¦ÄÜ:¶ÁÊý¾Ý
˵Ã÷:ÏÈдµØÖ·,ÔÙ¶ÁÊý¾Ý
Èë¿Ú²ÎÊý Addr µØÖ·
³ö¿Ú²ÎÊý Coda
**********************************************/
char Read_Data(char Addr)
{char i,Coda;
Coda=Addr;
En_Ss( );
for(i=0;i<8;i++)
{ if((Coda&0x01)!=0)
Set_Dio( );
else
Clr_Dio( );
Set_Sclk( );
Coda=Coda>>1;
Clr_Sclk( );
}
/************************************/
Dio_In( ) ; //¶ÁÊý¾Ý
Coda=0;
for(i=0;i<8;i++ )
{ // if(( GPIOA->PDIR&(GPIO_PTB0_MASK))!=0)
if( Read_Dio()!=0)
Coda|=(1<<i);
Set_Sclk( );
Clr_Sclk( );
}
Di_Ss( );
DIO_Out( );
return Coda ;
}
/*********************************************************
Ãû³Æ:Read_Time( )
¹¦ÄÜ:¶Áʱ¼ä
˵Ã÷;
Èë¿Ú²ÎÊý Addr µØÖ·
Rt_Time[8]; ʱ¼ä
³ö¿Ú²ÎÊý
*********************************************************/
void Read_Timer(char Addr ,char Rt_Time[8] )
{ char i,j,Coda ;
Coda=Addr;
En_Ss( );
for(i=0;i<8;i++)
{ if((Coda&0x01)!=0)
Set_Dio( );
else
Clr_Dio( );
Set_Sclk( );
Coda=Coda>>1;
Clr_Sclk( );
}
Dio_In( ) ; //¶ÁÊý¾Ý
for(i=0;i<8;i++ )
{ Rt_Time=0;
for(j=0;j<8;j++ )
{ if( Read_Dio()!=0)
Rt_Time|=(1<<j);
Set_Sclk( );
Clr_Sclk( );
}
}
Di_Ss( );
DIO_Out( );
}
char led[10]={ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
int main (void);
void RTC_Task(void);
/******************************************************************************
* Global functions
******************************************************************************/
/********************************************************************/
int main (void)
{ char temp;
char i;
int j,k;
/*ϵͳ³õʼ*/
sysinit();
cpu_identify();
RTC_ConfigType sRTCConfig;
RTC_ConfigType *pRTCConfig = &sRTCConfig;
printf("\nRunning the GPIO_demo project.\n");
/*ÅäÖÃRTCµÄÖжÏƵÂÊΪ1Hz*/
pRTCConfig->u16ModuloValue = 9;
pRTCConfig->bInterruptEn = RTC_INTERRUPT_ENABLE; /*ʹÄÜÖжÏ*/
pRTCConfig->bClockSource = RTC_CLKSRC_1KHZ; /*ʱÖÓԴƵÂÊΪ1khz*/
pRTCConfig->bClockPresaler = RTC_CLK_PRESCALER_100; /*·ÖƵϵÊýΪ100*/
RTC_SetCallback(RTC_Task);
RTC_Init(pRTCConfig);
/* ·½·¨Ò»;ÐèÒª±»³õʼ»¯µÄGPIOÒý½ÅÑÚÂë³õʼ»¯Ö¸¶¨GPIO¶Ë¿Ú*/
// GPIO_Init(GPIOB, GPIO_PTE7_MASK, GPIO_PinOutput);
GPIO_PinInit(GPIO_PTB0, GPIO_PinOutput);
GPIO_PinInit(GPIO_PTB1, GPIO_PinOutput);
GPIO_PinInit(GPIO_PTB2, GPIO_PinOutput);
;
/* ·½·¨¶þ£»Í¨¹ýµ¥¸öÒý½ÅÃû×Ö³õʼ»¯GPIO¶Ë¿Ú */
GPIO_PinInit(GPIO_PTE7, GPIO_PinOutput);
Write_Data(0x8E ,0x00);
Write_Data(0x80 ,0x15);
Set_Timer(0xBE , Rtc_Init);
while(1)
{
//temp=Read_Data(0x81);
delay( 100);
}
}
char i=0;
/*****************************************************************************//*!
*
* @ TRCÈÎÎñ×Óº¯ÊýÉÁ˸LED1
*
* ÎÞ·µ·µ»Ø
*
*****************************************************************************/
void RTC_Task(void)
{ char temp=0;
char time[8];
Read_Timer(0xBF , time );
GPIOB->PDOR^=1<<7;
//temp=Read_Data(0x81);
printf("%d:%d:%d\r\n", time[2]/16*10+time[2]%16 , time[1]/16*10+time[1]%16, time[0]/16*10+time[0]%16 );
}
/********************************************************************/ |
|