/**————————————————————

2 〖说明〗I2C总线驱动程序(用两个普通IO模拟I2C总线)

3 包括100Khz(T=10us)的标准模式(慢速模式)选择,

4 和400Khz(T=2.5us)的快速模式选择,

5 默认11.0592Mhz的晶振。

9 〖版本〗V1.00A Build 0803

10 ————————————

/**/

#include     /* special function registers       */

#include

#define uchar unsigned char

#define uint unsigned int

#define Byte unsigned char

#define Word unsigned int

#define bool bit

#define true 1

#define false 0

uchar SystemError;

#define SomeNOP()  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

extern void delay(int n);

/**--------------------------------------------------------------------------------

30 调用方式:void I2CStart(void) ﹫2001/07/0 4

31 函数说明:私有函数,I2C专用

32 ---------------------------------------------------------------------------------*/

void I2CStart(void)

{

EA=0;

SDA=1; SCL=1; SomeNOP();//INI

SDA=0; SomeNOP(); //START

SCL=0;

}

/**--------------------------------------------------------------------------------

42 调用方式:void I2CStop(void) ﹫2001/07/0 4

43 函数说明:私有函数,I2C专用

44 ---------------------------------------------------------------------------------*/

void I2CStop(void)

{

SCL=0; SDA=0; SomeNOP(); //INI

SCL=1; SomeNOP(); SDA=1; //STOP

EA=1;

}

/**--------------------------------------------------------------------------------

53 调用方式:bit I2CAck(void) ﹫2001/07/0 4

54 函数说明:私有函数,I2C专用,等待从器件接收方的应答

55 ---------------------------------------------------------------------------------*/

bool WaitAck(void)

{

uchar errtime=255;//因故障接收方无ACK,超时值为255。

SDA=1;SomeNOP();

SCL=1;SomeNOP();

while(SDA) {errtime--; if (!errtime) {I2CStop();SystemError=0x11;return false;}}

SCL=0;

return true;

//第1 页

//文件: PCF8563T.C 2001-11-27, 18:39:20

}

/**--------------------------------------------------------------------------------

67 调用方式:void SendAck(void) ﹫2001/07/0 4

68 函数说明:私有函数,I2C专用,主器件为接收方,从器件为发送方时,应答信号。

69 ---------------------------------------------------------------------------------*/

void SendAck(void)

{

SDA=0; SomeNOP();

SCL=1; SomeNOP();

SCL=0;

}

/**--------------------------------------------------------------------------------

78 调用方式:void SendAck(void) ﹫2001/07/0 4

79 函数说明:私有函数,I2C专用,主器件为接收方,从器件为发送方时,非应答信号。

80 }**--------------------------------------------------------------------------------

*/

void SendNotAck(void)

{

SDA=1; SomeNOP();

SCL=1; SomeNOP();

SCL=0;

}

/**--------------------------------------------------------------------------------

89 调用方式:void I2CSend(uchar ch) ﹫2001/07/0 5

90 函数说明:私有函数,I2C专用

91 ---------------------------------------------------------------------------------*/

void I2CSendByte(Byte ch)

{

uchar i=8;

while (i--)

{

SCL=0;_nop_();

SDA=(bit)(ch&0x80); ch<<=1; SomeNOP();

SCL=1; SomeNOP();

}

SCL=0;

}

/**--------------------------------------------------------------------------------

105 调用方式:uchar I2CReceive(void) ﹫2001/07/0 5

106 函数说明:私有函数,I2C专用

107 ---------------------------------------------------------------------------------*/

Byte I2CReceiveByte(void)

{

uchar i=8;

Byte ddata=0;

SDA=1;

while (i--)

{

ddata<<=1;

SCL=0;SomeNOP();

SCL=1;SomeNOP();

ddata|=SDA;

}

SCL=0;

return ddata;

}

//---------------------------------------------------------------------------

//开始PCF8563T驱动程序

//第2 页

//文件: PCF8563T.C 2001-11-27, 18:39:20

/**--------------------------------------------------------------------------------

128 调用方式:void GetPCF8563(uchar firsttype,uchar count,uchar *buff) ﹫2001/08/0 7

129 函数说明:读取时钟芯片PCF8563的时间,设置要读的第一个时间类型firsttype,并设置读取

130 的字节数,则会一次把时间读取到buff中。顺序是:

131 0x02:秒/0x03:分/0x04:小时/0x05:日/0x06:星期/0x07:月(世纪)/0x08:年

132 ---------------------------------------------------------------------------------*/

void GetPCF8563(uchar firsttype,uchar count,uchar *buff)

{

uchar i;

I2CStart();

I2CSendByte(0xA2);

WaitAck();

I2CSendByte(firsttype);

WaitAck();

I2CStart();

I2CSendByte(0xA3);

WaitAck();

for (i=0;i

{

buff[i]=I2CReceiveByte();

if (i!=count-1) SendAck();//除最后一个字节外,其他都要从MASTER发应答。

}

SendNotAck();

I2CStop();

}

/**--------------------------------------------------------------------------------

158 调用方式:void SetPCF8563(uchar timetype,uchar value) ﹫2001/08/0 7

159 函数说明:调整时钟。timetype是要改的时间类型,value是新设置的时间值(BCD格式)。

160 0x02:秒/0x03:分/0x04:小时/0x05:日/0x06:星期/0x07:月(世纪)/0x08:年

161 ---------------------------------------------------------------------------------*/

void SetPCF8563(uchar timetype,uchar value)

{

I2CStart();

I2CSendByte(0xA2);

WaitAck();

I2CSendByte(timetype);

WaitAck();

I2CSendByte(value);

WaitAck();

I2CStop();

}

/**--------------------------------------------------------------------------------

175 调用方式:void SetAlarmHour(uchar count) ﹫2001/08/0 7

176 函数说明:设置报警闹钟在一天的第count点报警。例如:count=23,则在晚上11点报警。

177 ---------------------------------------------------------------------------------

void SetAlarm(uchar alarmtype,uchar count)

{

SetPCF8563(0x01,0x02);

SetPCF8563(alarmtype,count);

}

*/

/**--------------------------------------------------------------------------------

85 调用方式:void CleanAlarm(void) ﹫2001/08/0 7

186 函数说明:清除所有报警设置。

187 ---------------------------------------------------------------------------------

void CleanAlarm(void)

{

//第3 页

//文件: PCF8563T.C 2001-11-27, 18:39:20

SetPCF8563(0x01,0x00);

SetPCF8563(0x09,0x80);

SetPCF8563(0x0A,0x80);

SetPCF8563(0x0B,0x80);

SetPCF8563(0x0C,0x80);

// SetPCF8563(0x0D,0x00);

// SetPCF8563(0x0E,0x03);

}

*/

/*--------------------------------------------------------------------------------

201 调用方式:uchar read1380(uchar command )

202 函数说明:read1380()返回当前时间, command指要返回的时间类型。

203 秒:81H 分钟:83H 小时:85H 日期:87H 星期:89H 星期几:8BH 年:8D H

204 ---------------------------------------------------------------------------------*/

// uchar read1380 (uchar command)

// {

// uchar time;

// GetPCF8563(command,1,&time);

// return time;

// }

//---------------------------------------------------------------------------

//开始CAT1161驱动程序

//第2 页

//文件: CAT1161.C 2001-11-27, 18:39:20

/**--------------------------------------------------------------------------------

128 调用方式:void GetCAT1161(uchar catadd,uchar count,uchar *buff) ﹫2001/08/0 7

129 函数说明:读取时钟芯片PCF8563的时间,设置要读的第一个时间类型firsttype,并设置读取

130 的字节数,则会一次把时间读取到buff中。顺序是:

131 0x02:秒/0x03:分/0x04:小时/0x05:日/0x06:星期/0x07:月(世纪)/0x08:年

132 ---------------------------------------------------------------------------------

void GetCAT1161(uchar catadd,uchar *buff)

{

// uchar i;

I2CStart();

I2CSendByte(0xA0);

WaitAck();

I2CSendByte(catadd);

WaitAck();

I2CStart();

I2CSendByte(0xA1);

WaitAck();

I2CSendByte(catadd);

WaitAck();

// for (i=0;i

// {

*buff=I2CReceiveByte();

// if (i!=count-1) SendAck();//除最后一个字节外,其他都要从MASTER发应答。

// }

SendNotAck();

I2CStop();

}

/**--------------------------------------------------------------------------------

158 调用方式:void SetCAT1161(uchar timetype,uchar value) ﹫2001/08/0 7

159 函数说明:调整时钟。timetype是要改的时间类型,value是新设置的时间值(BCD格式)。

160 0x02:秒/0x03:分/0x04:小时/0x05:日/0x06:星期/0x07:月(世纪)/0x08:年

161 ---------------------------------------------------------------------------------

void SetCAT1161(uchar catadd,uchar value)

{

I2CStart();

I2CSendByte(0xA0);

WaitAck();

I2CSendByte(catadd);

WaitAck();

I2CSendByte(value);

WaitAck();

I2CStop();

}

*/

//---------------------------------------------------------------------------

//开始AT24C02驱动程序

/**--------------------------------------------------------------------------------

128 调用方式:void AT24C02(uchar firstadd,uchar count,uchar *buff) ﹫2001/08/0 7

129 函数说明:

132 ---------------------------------------------------------------------------------*/

void ReadAT24C02(uchar *buff)

{

unsigned char i=0;

unsigned char nLen=26;

I2CStart();

I2CSendByte(0xA0);

WaitAck();

I2CSendByte(0x00);  //ram的第一个地址

WaitAck();

I2CStart();

I2CSendByte(0xA1);

WaitAck();

while(--nLen)

{

buff[i]=I2CReceiveByte(); //读出内容

i++;   //指针加1

SendAck();   //发确认信号

}

buff[i]=I2CReceiveByte();   //读一字节

SendNotAck();   //没有确认信号

I2CStop();

}

/**--------------------------------------------------------------------------------

158 调用方式:void SetAT24C02(uchar firstadd,uchar count,uchar *buff) ﹫2005/12/28

159 函数说明:

161 ---------------------------------------------------------------------------------*/

void WriteAT24C02(uchar *buff)

{

unsigned char i,temp,Addr;

unsigned char k=0;

unsigned char nLen=26;

Addr=0x00;

I2CStart();

I2CSendByte(0xA0);

WaitAck();

I2CSendByte(Addr);

WaitAck();

for(i = 0;i < nLen;i++)

{

if(Addr%8==0)   //每页8字节  //换页

{

I2CStop();

delay(10000);

SomeNOP();

I2CStart();

I2CSendByte(0xA0);

WaitAck();

I2CSendByte(Addr);

WaitAck();

}

temp = buff[k];

I2CSendByte(temp);

WaitAck();

k++;

Addr++;

}

I2CStop();

}

pcf8563c语言程序,PCF8563T标准驱动源程序相关推荐

  1. c语言作业答案第四章,C语言程序的设计课件源程序及习题的答案第4章.ppt

    C语言程序的设计课件源程序及习题的答案第4章 第4章循环结构的流程及应用 学习目标 ? 使用循环处理需要反复执行的操作. ? 循环结构的流程图. ? 循环与条件的综合应用. 学一学 while语句的一 ...

  2. pcf8563c语言程序,PCF8563实时时钟C源程序

    PCF8563实时时钟C源程序 与单片机通信实现实时时钟的外围电路! 最佳答案 #include #include #define uchar unsigned char #define uint u ...

  3. C语言票价优惠程序,c语言车票管理标准系统源程序.docx

    #include #include #include include include #include #define N 80 void maipiao(int sjnt t)? float tim ...

  4. LED数码管静态显示 C语言程序,PIC单片机驱动LED数码管显示程序

    ;*****该程序用于驱动led数码管显示,在8个LED数码管上依次显示数字1.2.3.4.5.6.7.8******* ;****http://www.51hei.com 单片机学习网经典程序已测试 ...

  5. c语言程序只能有一个源程序文件,下列说法哪个正确?() A.一个程序可以包含多个源文件 B.一个源文件中只能有一个类 C.一个源文件中可以...

    下列说法哪个正确?() A.一个程序可以包含多个源文件 B.一个源文件中只能有一个类 C.一个源文件中可以 更多相关问题 [问答题,简答题] 古埃及服饰中时常看到"蛇"." ...

  6. 单片机显示屏c语言程序,51单片机驱动1602液晶显示器c程序

    51单片机驱动1602液晶显示器c程序 /* 程序效果:单片机控制液晶显示器1602显示字母数字,用户自行更改io 程序版权:http://www.51hei.com */ #include //头文 ...

  7. cc1101初始化c语言程序,STC89C52单片机驱动CC1101无线模块的接收C语言程序

    #include #include #defineINT8Uunsigned char #defineINT16Uunsigned int #define WRITE_BURST 0x40//连续写入 ...

  8. pcf8563c语言程序,IIC的PCF8563实用时钟程序(iccavr)

    /************************************* * PCF8563时钟程序 * * 文 件 名:1602_8563.c * * 版 本:V22.02 * * 主控芯片:M ...

  9. 收音机c语言程序,51单片机驱动TEA5767调频收音机芯片C程序

    /*-----------  TEA5767 驱动-----------*/ /*------   外部晶振为  12MHz-------*/ /*--------最后修改2011.02.26---- ...

最新文章

  1. 10个角度分析软件工程师应该知道的100件事
  2. linux中spawn远程执行,linux 远程登录执行命令
  3. Oracle入门(十四.13)之带参数的游标
  4. iOS 打包.framework(包括第三方、图片、xib、plist文件)详细步骤及需要注意的地方...
  5. Win8Metro(C#)数字图像处理--2.31灰度拉伸算法
  6. python cryptography key加密_python3利用cryptography 进行加密和解密
  7. 对于软件测试四大误区的认识
  8. 特征提取与检测(一)---Harris与Shi-Tomasi角点检测原理
  9. bzoj 1053: [HAOI2007]反素数ant 51nod-1060:最复杂的数(反素数与因数个数计算)
  10. 视频监控系统平台服务器维护,平安城市视频监控系统运维方案
  11. c语言函数文档,C语言函数手册DOC.doc
  12. curl: (51) Unable to communicate securely with peer: requested domain name does not match the server
  13. 你好,这是你要的五彩斑斓的黑
  14. pdf转wordpptexceljpg图片pdf编辑器转换修改
  15. Ignite Beijing 2019你参加了吗?多图,慎点!
  16. Linux应用编程-音频应用编程-语音转文字项目
  17. SIGCOMM13论文简要选读
  18. can和could的用法_情态动词can和could的用法及例句
  19. 曼尼托巴大学计算机科学硕士,曼尼托巴大学电气和计算机工程硕士解析
  20. Sklearn机器学习中的主要算法原理以及实现

热门文章

  1. 小米12和小米11pro的区别
  2. 【图像超分辨率重建】——HAN论文阅读笔记
  3. Aleo Wagyu钱包
  4. 柴胡加龙骨牡蛎汤去大黄合当归芍药散治顽固心悸案(李跃海)
  5. Linux服务器安装的anaconda下载库、包很慢
  6. 曲面着色器初试--地面轨迹模拟(部分细节不完善)
  7. 无爬虫团队,企业如何实现1000万级数据采集?
  8. 大数据面试重点之hive(五)
  9. matlab 一维数组 切片,三维体切片图 - MATLAB slice - MathWorks 中国
  10. 物理每日一题(hyq的1、2)