[KungFu32位 MCU] KF32A150 硬件IIC 访问PCF563样例

[复制链接]
 楼主| ghetto 发表于 2022-7-1 09:04 | 显示全部楼层 |阅读模式
本帖最后由 ghetto 于 2022-7-1 09:07 编辑
  1. /*
  2. * bsp_iic.c
  3. *
  4. *  Created on: 2022-6-28
  5. *      Author: pc
  6. */

  7. #include "bsp_iic.h"
  8. #include "Usart.h"
  9. #include "stdio.h"
  10. I2C_SFRmap* I2C_Choose;




  11. void I2C_GPIO_init(void)
  12. {

  13.         GPIO_InitTypeDef I2C_GPIO_Init;
  14.         PCLK_CTL0_Peripheral_Clock_Enable(PCLK_CTL0_GPIOBCLKEN,TRUE);
  15.         I2C_GPIO_Init.m_Mode = GPIO_MODE_RMP;
  16.         I2C_GPIO_Init.m_OpenDrain = GPIO_POD_OD;
  17.         I2C_GPIO_Init.m_Pin = GPIO_PIN_MASK_4|GPIO_PIN_MASK_5;
  18.         I2C_GPIO_Init.m_PullUp = GPIO_PULLUP;
  19.         I2C_GPIO_Init.m_PullDown = GPIO_NOPULL;
  20.         I2C_GPIO_Init.m_Speed = GPIO_HIGH_SPEED;

  21.         GPIO_Configuration(GPIOB_SFR,&I2C_GPIO_Init);
  22. //        GPIOB_SFR->RMP[0] = 0x880000;
  23.         GPIO_Pin_RMP_Config(GPIOB_SFR,GPIO_Pin_Num_4,GPIO_RMP_AF8_I2C0);
  24.         GPIO_Pin_RMP_Config(GPIOB_SFR,GPIO_Pin_Num_5,GPIO_RMP_AF8_I2C0);



  25. }



  26. #define  IIC_100K

  27. void I2C_init_Master(I2C_SFRmap* I2Cx)
  28. {

  29.         I2C_Reset(I2Cx);
  30.         I2C_InitTypeDef newStruct_I2C;
  31.         newStruct_I2C.m_Mode = I2C_MODE_I2C;
  32.         newStruct_I2C.m_ClockSource = I2C_CLK_HFCLK;

  33.         newStruct_I2C.m_BADR10 = I2C_BUFRADDRESS_7BIT;

  34.         newStruct_I2C.m_MasterSlave = I2C_MODE_SMBUSHOST;     //

  35. #ifdef IIC_100K
  36.         newStruct_I2C.m_BaudRateL = 80;
  37.         newStruct_I2C.m_BaudRateH = 80;
  38. #elif defined IIC_400K
  39.         newStruct_I2C.m_BaudRateL = 115;                       //I2C锟斤拷锟斤拷锟绞低碉拷平时锟斤拷锟斤拷锟斤拷   锟斤拷锟街�锟斤拷锟斤拷小锟斤拷3
  40.         newStruct_I2C.m_BaudRateH = 115;                       //I2C锟斤拷锟斤拷锟绞高碉拷平时锟斤拷锟斤拷锟斤拷   锟斤拷锟街�锟斤拷锟斤拷小锟斤拷3
  41. #elif defined IIC_1M
  42.         newStruct_I2C.m_BaudRateL = 20;                       //I2C锟斤拷锟斤拷锟绞低碉拷平时锟斤拷锟斤拷锟斤拷   锟斤拷锟街�锟斤拷锟斤拷小锟斤拷3
  43.         newStruct_I2C.m_BaudRateH = 20;                       //I2C锟斤拷锟斤拷锟绞高碉拷平时锟斤拷锟斤拷锟斤拷   锟斤拷锟街�锟斤拷锟斤拷小锟斤拷3
  44. #endif
  45.         newStruct_I2C.m_AckEn = TRUE;
  46.         newStruct_I2C.m_AckData = I2C_ACKDATA_ACK;
  47.         I2C_Configuration(I2Cx, &newStruct_I2C);



  48.         //I2C_Cmd(I2Cx,TRUE);
  49.         I2C_Clear_INTERRUPT_Flag(I2Cx);

  50.         //I2C_MATCH_ADDRESS_Config(I2Cx,TRUE);
  51.         //I2C_ISIE_INT_Enable(I2Cx, TRUE);
  52.         //I2C_SCL_Enable(I2Cx,TRUE);
  53.         I2C_Cmd(I2Cx,TRUE);


  54. }



  55. void I2C_Byte_Write(uint16_t slave_addr,uint16_t reg_Addr,uint32_t I2C_data, FunctionalState NewState )
  56. {
  57.         I2C_Choose=I2C0_SFR;

  58.         static uint8_t I2C_SLAVE_ADDRESS10BH=0;
  59.         static uint8_t I2C_SLAVE_ADDRESS10BL=0;



  60.         I2C_Generate_START(I2C_Choose,TRUE);
  61.         while(!I2C_Get_INTERRUPT_Flag(I2C_Choose));



  62.         I2C_SendData8(I2C_Choose,slave_addr);
  63.         I2C_Clear_INTERRUPT_Flag(I2C_Choose);
  64.         while(!I2C_Get_INTERRUPT_Flag(I2C_Choose));
  65.         while(I2C_Get_Ack_Fail_Flag(I2C_Choose));



  66.         I2C_SendData(I2C_Choose,reg_Addr);
  67.         I2C_Clear_INTERRUPT_Flag(I2C_Choose);
  68.         while(!I2C_Get_INTERRUPT_Flag(I2C_Choose));


  69.         if(NewState)
  70.         {

  71.         I2C_SendData(I2C_Choose,I2C_data);
  72.         I2C_Clear_INTERRUPT_Flag(I2C_Choose);
  73.         while(!I2C_Get_INTERRUPT_Flag(I2C_Choose));

  74.         }
  75.         /*停止位*/
  76.         I2C_Generate_STOP(I2C_Choose,TRUE);

  77.         I2C_Clear_INTERRUPT_Flag(I2C_Choose);
  78.         while(!I2C_Get_INTERRUPT_Flag(I2C_Choose));

  79.         I2C_Clear_INTERRUPT_Flag(I2C_Choose);
  80.         I2C_Clear_Stop_Flag(I2C_Choose);


  81. }



  82. void I2C_Byte_read(uint16_t slave_addr,uint8_t *I2C_data )
  83. {
  84.         I2C_Choose=I2C0_SFR;
  85.         static uint8_t I2C_SLAVE_ADDRESS10BH=0;
  86.         static uint8_t I2C_SLAVE_ADDRESS10BL=0;


  87.         I2C_Generate_START(I2C_Choose,TRUE);
  88.         while(!I2C_Get_Start_Flag(I2C_Choose));



  89.         I2C_SendData8(I2C_Choose,slave_addr|0x01);
  90.         I2C_Clear_INTERRUPT_Flag(I2C_Choose);
  91.         while(!I2C_Get_INTERRUPT_Flag(I2C_Choose));
  92.         while(I2C_Get_Ack_Fail_Flag(I2C_Choose));
  93.          I2C_Clear_INTERRUPT_Flag(I2C_Choose);


  94.         while((I2C_Choose->SR &I2C_SR_RCBF)== 0);
  95.         *I2C_data = I2C_ReceiveData(I2C_Choose);
  96. //        I2C_Clear_INTERRUPT_Flag(I2C_Choose);
  97.         //while(!I2C_Get_INTERRUPT_Flag(I2C_Choose));



  98.         I2C_Ack_DATA_Config(I2C_Choose,I2C_ACKDATA_NO_ACK);


  99.     /* Stop bit */
  100.     I2C_Generate_STOP(I2C_Choose, TRUE);
  101.     /* Clear the ISIF bit of the I2C interrupt flag */
  102.     I2C_Clear_INTERRUPT_Flag(I2C_Choose);
  103.     /* Wait for the stop to complete */
  104.     while (!I2C_Get_INTERRUPT_Flag(I2C_Choose)) ;
  105.     /* Clear the ISIF bit of the I2C interrupt flag */
  106.     I2C_Clear_INTERRUPT_Flag(I2C_Choose);
  107.     /* Clear the I2C stop flag PIF bit */
  108.     I2C_Clear_Stop_Flag(I2C_Choose);



  109. }





  1. /*
  2. * bsp_iic.h
  3. *
  4. *  Created on: 2022-6-28
  5. *      Author: pc
  6. */

  7. #ifndef I2C_Master_Slave_H_
  8. #define I2C_Master_Slave_H_


  9. #include "system_init.h"

  10. #define        MODE_Master        1
  11. #define        MODE_Slave        0
  12. #define        IIC_MODE        MODE_Master

  13. #define        IIC_10BIT_Address                0



  14. //#define IIC_100K        100000
  15. #define IIC_400K        400000
  16. //#define IIC_1M        1000000

  17. #define I2C_OK                 1
  18. #define I2C_FAIL               0



  19. void I2C_GPIO_init(void);
  20. void I2C_init_Slave(I2C_SFRmap* I2Cx,uint16_t I2C_ADDRESS);
  21. void I2C_init_Master(I2C_SFRmap* I2Cx);
  22. void I2C_Byte_Write(uint16_t slave_addr,uint16_t reg_Addr,uint32_t I2C_data, FunctionalState NewState );

  23. void I2C_Byte_read(uint16_t slave_addr,uint8_t *I2C_data);










  24. #endif

  1. /*
  2. * PCF8563.c
  3. *
  4. *  Created on: 2022-6-29
  5. *      Author: pc
  6. */
  7. #include "system_init.h"
  8. #include "PCF8563.h"
  9. #include "bsp_iic.h"
  10. #include "stdio.h"
  11. unsigned char PCF8563_WriteByte(uint16_t Write_i2c_Addr,uint32_t I2C_data)
  12. {

  13.         I2C_Byte_Write(0xA2,Write_i2c_Addr, I2C_data,TRUE);


  14. }

  15. unsigned char PCF8563_ReadByte(uint16_t Write_i2c_Addr )
  16. {

  17.         uint8_t temp = 0;
  18.         I2C_Byte_Write(0xA2,Write_i2c_Addr, 0,FALSE);
  19.         systick_delay_us(10);
  20.         I2C_Byte_read(0xA2,&temp);
  21.         return temp;

  22. }
  23. void PCF8563_Timer_Disable(void)
  24. {
  25.         PCF8563_WriteByte(PCF8563_Address_Control_Status_2, (PCF8563_ReadByte(PCF8563_Address_Control_Status_2)&0xfe));
  26.         PCF8563_WriteByte(TIMER_CTRL_BUF, PCF8563_ReadByte(TIMER_CTRL_BUF)&0x7f);
  27. }
  28. void PCF8563_Alarm_Disable(void)
  29. {
  30.         PCF8563_WriteByte(0x01, (PCF8563_ReadByte(0x01)&0xfd));
  31.         PCF8563_WriteByte(PCF8563_Alarm_Minutes, PCF8563_ReadByte(PCF8563_Alarm_Minutes)|0x80);
  32.         PCF8563_WriteByte(PCF8563_Alarm_Hours, PCF8563_ReadByte(PCF8563_Alarm_Hours)|0x80);
  33.         PCF8563_WriteByte(PCF8563_Alarm_Days,0x80);
  34.         PCF8563_WriteByte(PCF8563_Alarm_WeekDays,0x80);
  35. }



  36. char PCF8563_Init(void)
  37. {
  38.         PCF8563_WriteByte(PCF8563_Address_Control_Status_1,0x00);
  39.         PCF8563_WriteByte(PCF8563_Address_Control_Status_2,0x00);
  40.         PCF8563_Timer_Disable();
  41.         PCF8563_Alarm_Disable();

  42. }


  43. void PCF8563_Set_Time(int hour, int minute, int second)
  44. {
  45.     if(hour>=0){
  46.         hour = changeIntToHex(hour%60);
  47.         PCF8563_WriteByte(HOUR_DATA_BUF, hour);
  48.     }
  49.     if(minute>=0){
  50.         minute = changeIntToHex(minute%60);
  51.         PCF8563_WriteByte(MINUTE_DATA_BUF, minute);
  52.     }
  53.     if(second>=0){
  54.         second = changeIntToHex(second%60);
  55.         PCF8563_WriteByte(SECOND_DATA_BUF, second);
  56.     }
  57. }
  58. void PCF8563_Set_Alarm(int hour, int minute)
  59. {
  60.     if(minute >= 0){
  61.         minute = changeIntToHex(minute);
  62.         PCF8563_WriteByte(MINUTE_AE_BUF, minute);
  63.     }

  64.     if(hour >= 0){
  65.         hour = changeIntToHex(hour);
  66.         PCF8563_WriteByte(HOUR_AE_BUF, hour);
  67.     }

  68. }
  69. void PCF8563_Set_Days(int year, int months, int days)
  70. {

  71.     if(days >= 0 && days <= 31){
  72.         days = changeIntToHex(days);
  73.         PCF8563_WriteByte(DAY_DATA_BUF, days);
  74.     }
  75.     if(months>=0 && months <= 12 ){
  76.         months = changeIntToHex(months);
  77.         PCF8563_WriteByte(MONTH_DATA_BUF, (PCF8563_ReadByte(MONTH_DATA_BUF)&0x80)| months);
  78.     }

  79.     if(year>=1900 && year<2000){

  80.             PCF8563_WriteByte(MONTH_DATA_BUF, PCF8563_ReadByte(MONTH_DATA_BUF) | 0x80);
  81.             PCF8563_WriteByte(YEAR_DATA_BUF, year%100);

  82.     }else if(year>= 2000 && year < 3000){
  83.             PCF8563_WriteByte(MONTH_DATA_BUF, PCF8563_ReadByte(MONTH_DATA_BUF) & 0x7F);
  84.             PCF8563_WriteByte(YEAR_DATA_BUF, year%100);
  85.     }
  86. }


  87. unsigned char PCF8563_Check(void)
  88. {
  89.         uint8_t temp = 0;
  90.         unsigned char Time_Count = 0;
  91.         if(PCF8563_ReadByte(PCF8563_Address_Timer) & 0x80)
  92.         {
  93.                 PCF8563_WriteByte(PCF8563_Address_Timer,PCF_Timer_Close);
  94.                 Time_Count = PCF8563_ReadByte(PCF8563_Address_Timer_VAL);

  95.         }

  96.         PCF8563_WriteByte(PCF8563_Address_Timer_VAL,0xAA);

  97.         temp = PCF8563_ReadByte(PCF8563_Address_Timer_VAL);

  98.         if(0xAA != temp)
  99.         {
  100.                 temp = 0;
  101.                 fprintf(USART0_STREAM,"PCF8563 Check Error\r\n");
  102.         }else{
  103.                 temp = 1;
  104.                 fprintf(USART0_STREAM,"PCF8563 Check Success\r\n");
  105.         }


  106.         if(Time_Count != 0)
  107.         {
  108.                 PCF8563_WriteByte(PCF8563_Address_Timer_VAL, Time_Count);
  109.                 PCF8563_WriteByte(PCF8563_Address_Timer, PCF_Timer_Open);
  110.         }

  111.         return temp;



  112. }
  113. void PCF8563_Set_Timer(int Timer_Frequency ,unsigned char Value)
  114. {
  115.     // PCF8563_WriteByte(TIMER_CTRL_BUF, PCF8563_ReadByte(TIMER_CTRL_BUF)&0x7f);
  116.     PCF8563_WriteByte(COUNT_VAL_BUF, Value);
  117.     if(Timer_Frequency == 4096){
  118.             PCF8563_WriteByte(TIMER_CTRL_BUF, ((PCF8563_ReadByte(TIMER_CTRL_BUF))&0xfc)|TIMER_FREQUENCY_4096);
  119.     }else if(Timer_Frequency == 64){
  120.         PCF8563_WriteByte(TIMER_CTRL_BUF, ((PCF8563_ReadByte(TIMER_CTRL_BUF))&0xfc)|TIMER_FREQUENCY_64);
  121.     }else if(Timer_Frequency == 1){
  122.         PCF8563_WriteByte(TIMER_CTRL_BUF, ((PCF8563_ReadByte(TIMER_CTRL_BUF))&0xfc)|TIMER_FREQUENCY_1);
  123.     }else if(Timer_Frequency == 0){// 1/60
  124.         PCF8563_WriteByte(TIMER_CTRL_BUF, ((PCF8563_ReadByte(TIMER_CTRL_BUF))&0xfc)|TIMER_FREQUENCY_1_60);
  125.     }else{
  126.         printf("Set Timer Error\r\n");
  127.     }
  128. }
  129. void PCF8563_CLKOUT_FrequencyHZ(unsigned char Frequency)
  130. {
  131.     if(Frequency == 32768){
  132.         PCF8563_WriteByte(CLK_FRQ_BUF, (PCF8563_ReadByte(CLK_FRQ_BUF)&0xfC)|0x00);
  133.     }else if(Frequency == 1024){
  134.         PCF8563_WriteByte(CLK_FRQ_BUF, (PCF8563_ReadByte(CLK_FRQ_BUF)&0xfC)|0x01);
  135.     }else if(Frequency == 32){
  136.         PCF8563_WriteByte(CLK_FRQ_BUF, (PCF8563_ReadByte(CLK_FRQ_BUF)&0xfC)|0x02);
  137.     }else if(Frequency == 1){
  138.         PCF8563_WriteByte(CLK_FRQ_BUF, (PCF8563_ReadByte(CLK_FRQ_BUF)&0xfC)|0x03);
  139.     }else {
  140.         printf("Set CLKOUT requency Selection Error\r\n");
  141.     }
  142. }
  143. void PCF8563_Alarm_Enable(void)
  144. {

  145.     PCF8563_WriteByte(0x01, (PCF8563_ReadByte(0x01)|0x02));
  146.     PCF8563_WriteByte(MINUTE_AE_BUF, PCF8563_ReadByte(MINUTE_AE_BUF)&0x7f);
  147.     PCF8563_WriteByte(HOUR_AE_BUF, PCF8563_ReadByte(HOUR_AE_BUF)&0x7f);
  148.     PCF8563_WriteByte(DAY_AE_BUF,0x80);//鍏抽棴
  149.     PCF8563_WriteByte(WEEK_AE_BUF,0x80);//鍏抽棴
  150. }
  151. void PCF8563_Timer_Enable(void)
  152. {
  153.     PCF8563_WriteByte(0x01, (PCF8563_ReadByte(0x01)|0x01));
  154.     PCF8563_WriteByte(TIMER_CTRL_BUF, PCF8563_ReadByte(TIMER_CTRL_BUF)|0x80);
  155. }

  156. void PCF8563_CLKOUT_Enable(void)
  157. {
  158.     PCF8563_WriteByte(CLK_FRQ_BUF, PCF8563_ReadByte(CLK_FRQ_BUF)|0x80);
  159. }

  160. void PCF8563_Get_Time(unsigned char *buf)
  161. {
  162.     buf[0] = PCF8563_ReadByte(SECOND_DATA_BUF) & 0x7f; //get second data
  163.     buf[1] = PCF8563_ReadByte(MINUTE_DATA_BUF) & 0x7f; //get minute data
  164.     buf[2] = PCF8563_ReadByte(HOUR_DATA_BUF) & 0x3f; //get hour data

  165.     buf[0] = changeHexToInt(buf[0]);
  166.     buf[1] = changeHexToInt(buf[1]);
  167.     buf[2] = changeHexToInt(buf[2]);
  168. }
  169. unsigned char PCF8563_Get_Flag(void)
  170. {
  171.         unsigned char temp=0;
  172.     if(PCF8563_ReadByte(0x01)&0x08){
  173.         temp  =  temp|0x01;
  174.     }
  175.     if(PCF8563_ReadByte(0x01)&0x04){
  176.         temp  =  temp|0x02;
  177.     }
  178.     return temp;

  179. }
  180. void PCF8563_Get_Days(unsigned char *buf)
  181. {
  182.     buf[0] = PCF8563_ReadByte(DAY_DATA_BUF)&0x3f;
  183.     buf[1] = PCF8563_ReadByte(MONTH_DATA_BUF) & 0x1f;
  184.     buf[2] = PCF8563_ReadByte(YEAR_DATA_BUF)&0xff;

  185.                 buf[0] = changeHexToInt(buf[0]);
  186.     buf[1] = changeHexToInt(buf[1]);

  187.     if(PCF8563_ReadByte(MONTH_DATA_BUF) & 0x80){
  188.         buf[3] = 19;
  189.     }else{
  190.         buf[3] = 20;
  191.     }
  192. }

  193. void PCF8563_Cleare_AF_Flag(void)
  194. {
  195.         PCF8563_WriteByte(0x01, PCF8563_ReadByte(0x01)&0xf7);
  196. }

  197. void PCF8563_Cleare_TF_Flag(void)
  198. {
  199.         PCF8563_WriteByte(0x01, PCF8563_ReadByte(0x01)&0xfB);
  200. }

  1. /*
  2. * PCF8563.h
  3. *
  4. *  Created on: 2022-6-29
  5. *      Author: pc
  6. */

  7. #ifndef PCF8563_H_
  8. #define PCF8563_H_


  9. #define CLK_FRQ_BUF     0x0D
  10. #define TIMER_CTRL_BUF  0x0E
  11. #define COUNT_VAL_BUF   0x0F

  12. #define PCF_Timer_Open                           (unsigned char)(1<<7)     //定时器有效
  13. #define PCF_Timer_Close                          (unsigned char)(~(1<<7))  //定时器无效

  14. #define PCF_Timer_F4096                          (unsigned char)0x00  //定时器时钟频率为4096Hz
  15. #define PCF_Timer_F64                            (unsigned char)0x01  //定时器时钟频率为64Hz
  16. #define PCF_Timer_F1                             (unsigned char)0x02  //定时器时钟频率为1Hz
  17. #define PCF_Timer_F160                           (unsigned char)0x03  //定时器时钟频率为1/60Hz

  18. #define PCF_Time_INT_Open                        (unsigned char)(1<<0)     //定时器中断有效
  19. #define PCF_Time_INT_Close                       (unsigned char)(~(1<<0))  //定时器中断无效

  20. #define PCF_Control_Status_NormalMode            (unsigned char)(~(1<<7))  //普通模式
  21. #define PCF_Control_Status_EXT_CLKMode           (unsigned char)(1<<7)     //EXT_CLK测试模式
  22. #define PCF_Control_ChipRuns                     (unsigned char)(~(1<<5))  //芯片运行
  23. #define PCF_Control_ChipStop                     (unsigned char)(1<<5)     //芯片停止运行,所有芯片分频器异步置逻辑0
  24. #define PCF_Control_TestcClose                   (unsigned char)(~(1<<3))  //电源复位功能失效(普通模式时置逻辑0)
  25. #define PCF_Control_TestcOpen                    (unsigned char)(1<<3)     //电源复位功能有效


  26. #define PCF8563_Address_Control_Status_1         (unsigned char)0x00  //控制/状态寄存器1
  27. #define PCF8563_Address_Control_Status_2         (unsigned char)0x01  //控制/状态寄存器2

  28. #define PCF8563_Address_CLKOUT                   (unsigned char)0x0d  //CLKOUT频率寄存器
  29. #define PCF8563_Address_Timer                    (unsigned char)0x0e  //定时器控制寄存器
  30. #define PCF8563_Address_Timer_VAL                (unsigned char)0x0f  //定时器倒计数寄存器

  31. #define PCF8563_Address_Years                    (unsigned char)0x08  //年
  32. #define PCF8563_Address_Months                   (unsigned char)0x07  //月
  33. #define PCF8563_Address_Days                     (unsigned char)0x05  //日
  34. #define PCF8563_Address_WeekDays                 (unsigned char)0x06  //星期
  35. #define PCF8563_Address_Hours                    (unsigned char)0x04  //小时
  36. #define PCF8563_Address_Minutes                  (unsigned char)0x03  //分钟
  37. #define PCF8563_Address_Seconds                  (unsigned char)0x02  //秒

  38. #define SECOND_DATA_BUF 0x02
  39. #define MINUTE_DATA_BUF 0x03
  40. #define HOUR_DATA_BUF   0x04

  41. #define DAY_DATA_BUF    0x05
  42. #define WEEK_DATA_BUF   0x06
  43. #define MONTH_DATA_BUF  0x07
  44. #define YEAR_DATA_BUF   0x08

  45. #define MINUTE_AE_BUF   0x09
  46. #define HOUR_AE_BUF     0x0A
  47. #define DAY_AE_BUF      0x0B
  48. #define WEEK_AE_BUF     0x0C

  49. #define CLK_FRQ_BUF     0x0D
  50. #define TIMER_CTRL_BUF  0x0E
  51. #define COUNT_VAL_BUF   0x0F

  52. #define PCF8563_Alarm_Minutes                    (unsigned char)0x09  //分钟报警
  53. #define PCF8563_Alarm_Hours                      (unsigned char)0x0a  //小时报警
  54. #define PCF8563_Alarm_Days                       (unsigned char)0x0b  //日报警
  55. #define PCF8563_Alarm_WeekDays                   (unsigned char)0x0c  //星期报警


  56. #define TIMER_FREQUENCY_4096    0 // 4096HZ
  57. #define TIMER_FREQUENCY_64      1 // 64HZ
  58. #define TIMER_FREQUENCY_1       2 // 1HZ
  59. #define TIMER_FREQUENCY_1_60    3 // 1/60Hz

  60. #define changeIntToHex(dec)     ((((dec)/10) <<4) + ((dec)%10) )
  61. #define converseIntToHex(dec)   ((((dec)>>4) *10) + ((dec)%16) )

  62. #define changeHexToInt(hex)     ((((hex)>>4) *10 ) + ((hex)%16) )
  63. #define converseHexToInt(hex)   ((((hex)/10) <<4 ) + ((hex)%10) )



  64. char PCF8563_Init(void);
  65. unsigned char PCF8563_Check(void);

  66. void PCF8563_Set_Time(int hour, int minute, int second);
  67. void PCF8563_Get_Time(unsigned char *buf);

  68. void PCF8563_Set_Days(int year, int months, int days);
  69. void PCF8563_Get_Days(unsigned char *buf);

  70. void PCF8563_Set_WeekData(int WeekData);

  71. void PCF8563_Set_Alarm(int hour, int minute);
  72. void PCF8563_Set_Timer(int Timer_frequency ,unsigned char value);

  73. void PCF8563_Alarm_Enable(void);
  74. void PCF8563_Alarm_Disable(void);
  75. void PCF8563_Timer_Enable(void);
  76. void PCF8563_Timer_Disable(void);

  77. void PCF8563_Cleare_AF_Flag(void);//Alarm
  78. void PCF8563_Cleare_TF_Flag(void);//Timer

  79. unsigned char  PCF8563_Get_Flag(void);

  80. void PCF8563_CLKOUT_FrequencyHZ(unsigned char Frequency);

  81. void PCF8563_CLKOUT_Disable(void);
  82. void PCF8563_CLKOUT_Enable(void);



  83. #endif /* PCF8563_H_ */

lvben5d 发表于 2022-7-1 09:15 | 显示全部楼层
不能搞出 .h .C 附件吗?   帖子内容主要做一些描述。
wengh2016 发表于 2022-7-8 09:36 | 显示全部楼层
硬件iic不好移植的。   
232321122 发表于 2022-7-8 16:10 | 显示全部楼层
网上有程序可以参考。   
yujielun 发表于 2022-7-8 16:43 | 显示全部楼层
模拟读取不行吗  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝
快速回复 返回顶部 返回列表