[应用方案]

NV32 和DS1302实时时钟

[复制链接]
814|1
手机看帖
扫描二维码
随时随地手机跟帖
tang87633187|  楼主 | 2018-7-27 13:51 | 显示全部楼层 |阅读模式
#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 );
         
}
/********************************************************************/

相关帖子

xujunyi3611| | 2018-8-26 17:26 | 显示全部楼层
没有照片吗?这个代码可以运行吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

78

帖子

0

粉丝