⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcf8563.c

📁 PCF8563的读写程序 怎么应用时钟芯片 应用到MSP430F149单片机当中
💻 C
字号:
#include"PCF8563.h"
#include "Flash.h"
#include"array.h"
//Time  SysTime;//系统时间。
//Time  NewTime;//更新使用的缓冲区,在设置时间是使用
unsigned char g8563_store[7];
const uchar c8563_Store[7]={0x00,0x59,0x07,0x01};
void Init_Clk()
{
    CLKSCL_OUT; //CLK为输出状态
    CLKSDA_OUT;
    CLKSDA_1;
    CLKSCL_1;
}
void P8563_init()
{
   
   if((receive_CFGbyte(HOUR_ALARM)&0X3F)!=0x00) /*检查是否第一次启动,是则初始化时间*/
    {
        msDelay(5000);
        write_CFGbyte(0x00,0x00);
        write_CFGbyte(HOUR_ALARM ,0x00);  /*小时报警*/
        write_CFGbyte(MIN_ALARM ,0x05);   /*分钟报警*///(正式工作程序)
        //write_CFGbyte(MIN_ALARM ,0x81); //测试工作程序
        //write_CFGbyte(MIN_ALARM ,0x05);   //测试
        write_CFGbyte(0x01,0x12); /*报警有效*/
        write_CFGbyte(0x02,0x50);
        write_CFGbyte(0x03,0x30);
        write_CFGbyte(0x04,0x23);
        write_CFGbyte(0x05,0x01);
        write_CFGbyte(0x06,0x01);
        write_CFGbyte(0x07,0x01);
        write_CFGbyte(0x08,0x01);
        write_CFGbyte(0x0d,0x00);
        //write_CFGbyte(0x0d,0xf0);
        
    }
}
void P8563_Readtime()
{   
    unsigned char time[7];
    Read_buffclk(MIN,7,time);
    g8563_store[0]=time[0]&0x7f;  /*秒*/
    g8563_store[1]=time[1]&0x7f;  /*分*/
    g8563_store[2]=time[2]&0X3f;  /*小时*/
    g8563_store[3]=time[3]&0x3f; /*天*/
    g8563_store[4]=time[4]&0x07;  /*星期*/
    g8563_store[5]=time[5]&0x1f;  /*月*/
    g8563_store[6]=time[6];       /*年*/
}
void iic_start(void)
{  
    CLKSDA_OUT;
    CLKSDA_1;                     //将数据置1
    CLKSCL_1; 
    NOP10;
    CLKSDA_0;                     //启动
    NOP2;
    CLKSCL_0;                     //clk start 
    NOP8;
}
// 函数名称: iic_stop()
// 函数功能: 停止I2C总线数据传送子程序
void iic_stop(void)
{ 
    CLKSDA_OUT;
    CLKSCL_1;
    CLKSDA_0;
    NOP8;
    CLKSDA_1;
    
    
}
void iic_NoAcknowledge(void)
{ 
 CLKSDA_1;   
 CLKSCL_1;
 NOP10;
 CLKSDA_0;   
 CLKSCL_0;
}
void iic_Acknowledge(void)
{
  
  CLKSCL_0;
  NOP10;
  CLKSDA_OUT;  
  CLKSDA_0;  
  CLKSCL_1; 
  NOP10; 
  CLKSCL_0;
}

void iic_ReceiveAck(void)              //送回应脉冲
{
   uchar i = 0;
   CLKSDA_1; 
   CLKSDA_IN; 
   CLKSCL_1;
   NOP4;
   while (CLKSDA_VAL&& (i < 100))i++;
   CLKSCL_0;
   NOP8;
    
}

void IICSendByte( uchar writedata)
{ 
    uchar i;
    CLKSDA_OUT;
    NOP4;
    for(i=0; i<8; i++)
    {
        if (writedata & BIT7)
            {CLKSDA_1;}
        else
            {CLKSDA_0;};
        writedata <<= 1;
        CLKSCL_1;
        NOP10;
        CLKSCL_0;
        NOP10;
        
    }
 
}
//--------------------------------------------------------------------------------------------------
// 函数名称: IICreceiveByte
// 返回接收的数据
// 函数功能: 接收一字节子程序
//--------------------------------------------------------------------------------------------------
uchar IICreceiveByte(void)
{
   uchar i,tempdata=0;
   CLKSDA_1;
   CLKSDA_IN;                                      
   
   for (i=0; i<8; i++)
    {
        CLKSCL_1;
        NOP10;
        tempdata <<= 1;
        if (CLKSDA_VAL)
           tempdata |= 1;
        CLKSCL_0;
        NOP10;
    }
    return tempdata;
}
// 用户调用子程序
// 函数名称: write_CFGbyte
// 入口参数: CFG_add寄存器地址,CFG_data要写入寄存器的数值
// 函数功能: 发送n位数据子程序
//--------------------------------------------------------------------------------------------------
void write_CFGbyte(uchar addr,uchar data)
{    
    iic_start();
    IICSendByte(WRITE_ADD);                      //写地址
    iic_ReceiveAck();
    IICSendByte(addr);                         //写低地址
    iic_ReceiveAck();
    IICSendByte(data);
    iic_ReceiveAck();
    iic_stop();
    Delay(4800);      
 
}
//---------------------------------------------------                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ----------------------------------------------
// 用户调用子程序
// 函数名称: receiveNbyte
// 入口参数: CFG_add寄存器地址地址
// 出口参数: receive_da
// 函数功能: 接收某个寄存器数据子程序
//--------------------------------------------------------------------------------------------------
uchar receive_CFGbyte(uchar addr)
{ 
   uchar tempdata;
    iic_start();
    IICSendByte(WRITE_ADD);                      //写地址
    iic_ReceiveAck();
    IICSendByte(addr);                         //写低地址
    iic_ReceiveAck();
    iic_start();
    IICSendByte(READ_ADD);                      //读地址
    iic_ReceiveAck();
    tempdata = IICreceiveByte(); 
    iic_stop();
    Delay(4800);
    return tempdata;
}
//写一组数据到IIC中
/***
void Write_buffclk(uchar addr, uchar len,uchar * buff) 
{ 
   
    uchar idx;
    iic_start();
    IICSendByte(WRITE_ADD);                      //写地址
    iic_ReceiveAck();
    IICSendByte(addr);                         //写低地址
    iic_ReceiveAck();
    for (idx=0;idx< len;idx++)
    {
           IICSendByte(buff[idx]);
           iic_ReceiveAck();        
    }
    iic_stop();
    Delay(4800);
	

}
***/
//读一组数据到存储区
void Read_buffclk(uchar addr, uchar len,uchar * buff)
{ 
    uchar idx;
    for(idx=0;idx<len;idx++)
    {
     buff[idx]= receive_CFGbyte(addr++);
     Delay(100);
    }
  
}
//--------------------------------------------------------------------------------------------------
// 用户调用函数
// 函数名称: P8563_Readtime
// 函数功能: 读出时间信息
//--------------------------------------------------------------------------------------------------

/***设置时间的子程序*******/
/**
void P8563_settime()
{
     unsigned char i;
     for(i=2;i<=4;i++) { write_CFGbyte(i,g8563_store[i-2]); }
     write_CFGbyte(6,0X01);
     //write_CFGbyte(6,g8563_store[3]);
}
****/
//时间的格式为 44个字节
void ReadTimeDate(uchar *str)  //读取的时间格式 ,通过短信格式发送出去
{
  uchar i,nChar;
  uchar *buff;
  buff =str;
  P8563_Readtime();
  nChar =((g8563_store[5]>>4)&0x0f)*4;
  g8563_store[5]=(g8563_store[5]&0x0f)*4;
  for(i=0;i<4;i++)
  buff[i]=row43[nChar+i];
  for(i=0;i<4;i++)
  buff[i+4]=row43[g8563_store[5]+i];
  for(i=0;i<4;i++)
  buff[i+8]=row40[i];
  nChar =((g8563_store[3]>>4)&0x0f)*4;
  g8563_store[3]=(g8563_store[3]&0x0f)*4;
  for(i=0;i<4;i++)
  buff[i+12]=row43[nChar+i];
  for(i=0;i<4;i++)
  buff[i+16]=row43[g8563_store[3]+i];
  for(i=0;i<4;i++)
  buff[i+20]=row40[i];
  nChar =((g8563_store[2]>>4)&0x0f)*4;
  g8563_store[2]=(g8563_store[2]&0x0f)*4;
  for(i=0;i<4;i++)
  buff[i+24]=row43[nChar+i];
  for(i=0;i<4;i++)
  buff[i+28]=row43[g8563_store[2]+i];
  for(i=0;i<4;i++)
  buff[i+32]=row42[i];
  nChar =((g8563_store[1]>>4)&0x0f)*4;
  g8563_store[1]=(g8563_store[1]&0x0f)*4;
  for(i=0;i<4;i++)
  buff[i+36]=row43[nChar+i];
  for(i=0;i<4;i++)
  buff[i+40]=row43[g8563_store[1]+i];
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -