STM8 PCF8563时钟芯片子程序

来自丢石头百科
<tbody></tbody>
软件设计

/********************************************************************* 微 雪 电 子 WaveShare <a class="Blue_2_12px_" href="https://wiki.diustou.com/" style="color: rgb(7, 66, 184);">http://www.waveShare.net   目 的: 建立PCF8563操作库 目标系统: 基于STM8单片机  应用软件: Cosmic CxSTM8  说 明: 若用于商业用途,请保留此段文字或注明代码来源 深 圳 市 微 雪 电 子 有 限 公 司 保 留 所 有 的 版 权 

                                                                                                                                          • /
  1. include <ws_i2c.h>

//器件地址:

  1. ifndef WD_DADR 

      #define WD_DADR 0xA2 //write device-address 

  1. endif
  2. ifndef RD_DADR 

      #define RD_DADR 0xA3 //read device-address

  1. endif
  1. define CTRL_BUF1 0x00
  2. define CTRL_BUF2 0x01
  1. define SECOND_DATA_BUF 0x02
  2. define MINUTE_DATA_BUF 0x03
  3. define HOUR_DATA_BUF 0x04
  1. define DAY_DATA_BUF 0x05
  2. define WEEK_DATA_BUF 0x06
  3. define MONTH_DATA_BUF 0x07
  4. define YEAR_DATA_BUF 0x08
  1. define MINUTE_AE_BUF 0x09
  2. define HOUR_AE_BUF 0x0A
  3. define DAY_AE_BUF 0x0B
  4. define WEEK_AE_BUF 0x0C
  1. define CLK_FRQ_BUF 0x0D
  2. define TIMER_CTRL_BUF 0x0E
  3. define COUNT_VAL_BUF 0x0F

//changeIntToHex(33),return 0x33 //传参必须为 unsigned 类型

  1. define changeIntToHex(dec) ( ( ((dec)/10) <<4 ) + ((dec)%10) )

//调用changeHexToInt(0x33),return 33 //传参必须为 unsigned 类型

  1. define changeHexToInt(hex) ( ( ((hex)>>4) *10 ) + ((hex)%16) )

void WriteAByte(u8 wordAdr,u8 dat) {       I2C_Start();       I2C_SendDAdr(WD_DADR);       I2C_SendDat(wordAdr);       I2C_SendDat(dat);       I2C_stop(); }

void PCF8563_getTime(u8 *buf) {        u8 i;       I2C_Start();       I2C_SendDAdr(WD_DADR);       I2C_SendDat(SECOND_DATA_BUF);       I2C_Start();       I2C_SendDAdr(RD_DADR);       for(i=0;i<2;i++)       {              buf[i]=I2C_RcvDat();       }       I2C_NAck();       buf[i]=I2C_RcvDat();       I2C_stop();       I2C_Ack();

      buf[0]=buf[0]&0x7f; //get second data       buf[1]=buf[1]&0x7f; //get minute data       buf[2]=buf[2]&0x3f; //get hour data

      buf[0]=changeHexToInt(buf[0]);       buf[1]=changeHexToInt(buf[1]);       buf[2]=changeHexToInt(buf[2]); }

void PCF8563_setTime(u8 hour,u8 minute,u8 second) {       hour=changeIntToHex(hour); //将数据的Dex格式转换为Hex格式       minute=changeIntToHex(minute);       second=changeIntToHex(second);

      WriteAByte(HOUR_DATA_BUF,hour);       WriteAByte(MINUTE_DATA_BUF,minute);       WriteAByte(SECOND_DATA_BUF,second); }

void PCF8563_init(u8 hour,u8 mintue,u8 second) {       I2C_Init();       WriteAByte(CTRL_BUF1,0x00); //basic setting       WriteAByte(CTRL_BUF2,0x00);       PCF8563_setTime(hour,mintue,second); }