久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: RX8010SJ驅動的關鍵代碼,自己編寫資源,與君共享 [打印本頁]

作者: shumivan    時間: 2021-4-30 11:51
標題: RX8010SJ驅動的關鍵代碼,自己編寫資源,與君共享
本帖最后由 shumivan 于 2021-4-30 13:37 編輯

RX8010SJ.c的關鍵代碼如下:

CLK_Time calendar;

/**************時鐘芯片初始化************/
void RX8010_Init(void)
{        
    CLK_IIC_Init();
}
/**************向時鐘寫入時間************/
void RX8010_Write_Time(CLK_Time SetRtc)
{
        u8 buf[7];
        buf[0] = SetRtc.second;
        RX8010_Write_Bytes(0x10,buf,1);
        buf[0] = SetRtc.minute;
        RX8010_Write_Bytes(0x11,buf,1);
        buf[0] = SetRtc.hour;
        RX8010_Write_Bytes(0x12,buf,1);
        buf[0] = RX8010_Week_Translate(WriteWeek ,CLK_Get_Week(2000 + BCD_To_Dec(SetRtc.year) ,BCD_To_Dec(SetRtc.month) ,BCD_To_Dec(SetRtc.day)));
        
        printf("W:%d\r\n",RX8010_Week_Translate(WriteWeek ,CLK_Get_Week(2000 + BCD_To_Dec(SetRtc.year) ,BCD_To_Dec(SetRtc.month) ,BCD_To_Dec(SetRtc.day))));
        RX8010_Write_Bytes(0x13,buf,1);
        buf[0] = SetRtc.day;
        RX8010_Write_Bytes(0x14,buf,1);
        buf[0] = SetRtc.month;
        RX8010_Write_Bytes(0x15,buf,1);
        buf[0] = SetRtc.year;
        RX8010_Write_Bytes(0x16,buf,1);
        
        buf[0] = 0x00;
        RX8010_Write_Bytes(0x1F,buf,1);
}
/**************從時鐘讀出時間************/
void RX8010_Read_Time (CLK_Time *GetRtc)
{
  u8 i;
        u8 buf[7];
        RX8010_Read_Bytes(0x10,buf,7);//讀出溫度值(器件地址,子地址,數據儲存器,字節數)
        GetRtc->second = buf[0]&0x7f; //秒,低七位有效
        GetRtc->minute = buf[1]&0x7f; //分,低七位有效
        GetRtc->hour   = buf[2]&0x3f; //時,低六位有效
        GetRtc->week   = RX8010_Week_Translate(ReadWeek,buf[3]&0x7f); //周,低七位有效
        GetRtc->day    = buf[4]&0x3f; //日,低六位有效
        GetRtc->month  = buf[5]&0x1f; //月,低五位有效
        GetRtc->year   = buf[6]&0xff; //年,低八位有效
}

/**************向RAM指定地址寫入數據************/
//slv_addr  器件地址
//sub_addr  內部寄存器地址
void RX8010_Read_Bytes(unsigned int sub_addr,unsigned char *s,unsigned char no)
{
        u8 i;
        
        CLK_IIC_Start(); //*發送啟動信號*/
  if(CLK_IIC_Send_Byte(RX8010_WRITE) == 1)//*發送SLA+W*///0x64
          {
                  CLK_IIC_Stop();
                        return;
                }
        if(CLK_IIC_Send_Byte(sub_addr) == 1)//*發送SLA+W*///0x64
          {
                  CLK_IIC_Stop();
                        return;
                }
               
        CLK_IIC_Start();
        if(CLK_IIC_Send_Byte(RX8010_READ) == 1)
          {
                  CLK_IIC_Stop();
                        return;
                }
        for(i=0;i<no-1;i++)
                {
                  *(s + i) = CLK_IIC_Read_Byte(1);
                }
        *(s + no-1) = CLK_IIC_Read_Byte(0);
        CLK_IIC_Stop();
}

/**************從RAM指定地址讀出數據************/
//slv_addr  器件地址
//sub_addr  內部寄存器地址
void RX8010_Write_Bytes(unsigned int sub_addr,unsigned char *s,unsigned char no)
{
        u8 i;

        CLK_IIC_Start();
        if(CLK_IIC_Send_Byte(RX8010_WRITE) == 1)
          {
                  CLK_IIC_Stop();
                        return;
                }
               
  if(CLK_IIC_Send_Byte(sub_addr) == 1)
          {
                  CLK_IIC_Stop();
                  return;
                }
        for(i=0;i<no;i++)
    {
      if(CLK_IIC_Send_Byte(*(s + i)) == 1)
                          {
                                  CLK_IIC_Stop();
                                        return;
                                }
                        *s=CLK_IIC_Read_Byte(1);
      s++;
    }
}
/**************獲得現在是星期幾************/
//設置時鐘
//把輸入的時鐘轉換為秒鐘
//以1970年1月1日為基準
//1970~2099年為合法年份
//返回值:0,成功;其他:錯誤代碼.
//月份數據表                                                                                         
u8 const Table_Week[12]={0,3,3,6,1,4,6,2,5,0,3,5}; //月修正數據表        
//獲得現在是星期幾
//功能描述:輸入公歷日期得到星期(只允許1901-2099年)
//輸入參數:公歷年月日
//返回值:星期號                                                                                                                                                                                 
u8 CLK_Get_Week(u16 year,u8 month,u8 day)
{        
        u16 temp2;
        u8 yearH,yearL;
        
        yearH=year/100;        yearL=year%100;
        // 如果為21世紀,年份數加100  
        if (yearH>19)yearL+=100;
        // 所過閏年數只算1900年之后的  
        temp2=yearL+yearL/4;
        temp2=temp2%7;
        temp2=temp2+day+Table_Week[month-1];
        if (yearL%4==0&&month<3)temp2--;
        return(temp2%7);
}

RX8010SJ.h的關鍵代碼如下:


#define RX8010_READ   0x65
#define RX8010_WRITE  0x64


// register address , for RX-8010SJ
#define RX8010_ADDR_SECOND      ( 0x10 )
#define RX8010_ADDR_MINUTE      ( 0x11 )
#define RX8010_ADDR_HOUR        ( 0x12 )
#define RX8010_ADDR_WEEK        ( 0x13 )
#define RX8010_ADDR_DATE        ( 0x14 )
#define RX8010_ADDR_MONTH       ( 0x15 )
#define RX8010_ADDR_YEAR        ( 0x16 )
#define RX8010_ADDR_RSV17       ( 0x17 )
#define RX8010_ADDR_ALM_MINUTE  ( 0x18 )
#define RX8010_ADDR_ALM_HOUR    ( 0x19 )
#define RX8010_ADDR_ALM_WEEK    ( 0x1A )
#define RX8010_ADDR_ALM_DATE    ( 0x1A )
#define RX8010_ADDR_TMR_CNT0    ( 0x1B )
#define RX8010_ADDR_TMR_CNT1    ( 0x1C )
#define RX8010_ADDR_EXT_REG     ( 0x1D )
#define RX8010_ADDR_FLAG_REG    ( 0x1E )
#define RX8010_ADDR_CTRL_REG    ( 0x1F )










歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 成人性生活免费视频 | 中国a一片一级一片 | 亚洲精品在线免费 | 午夜成人在线视频 | 五月天毛片 | 欧美香蕉视频 | 天堂视频在线免费观看 | 在线观看视频国产 | 亚洲一区中文 | 欧美国产在线视频 | 精品无人国产偷自产在线 | 午夜视频在线看 | 婷婷午夜天 | 成人做爰9片免费视频 | 国产精品亚洲精品 | 99这里只有精品 | 日韩精品视频在线免费观看 | 免费成人小视频 | 高清视频一区二区 | 色资源在线 | 国产一区高清 | 国产黄a三级三级三级看三级男男 | www.jiujiu | 欧美日韩亚洲一区二区三区 | 国产一二 | 人人干人人草 | 手机看片日韩 | 精品免费 | 欧洲一区二区 | 国产日韩欧美亚洲 | 成人精品在线视频 | 成人永久免费视频 | 精品一二三 | 国产一级特黄aaa大片 | 亚洲午夜18毛片在线看 | 玖玖精品视频 | 久久久久综合 | 欧美一区二区三区四区五区 | 亚洲国产激情 | 最新国产精品视频 | 国产va在线 |