pcf8563c语言程序,PCF8563T标准驱动源程序
/**————————————————————
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标准驱动源程序相关推荐
- c语言作业答案第四章,C语言程序的设计课件源程序及习题的答案第4章.ppt
C语言程序的设计课件源程序及习题的答案第4章 第4章循环结构的流程及应用 学习目标 ? 使用循环处理需要反复执行的操作. ? 循环结构的流程图. ? 循环与条件的综合应用. 学一学 while语句的一 ...
- pcf8563c语言程序,PCF8563实时时钟C源程序
PCF8563实时时钟C源程序 与单片机通信实现实时时钟的外围电路! 最佳答案 #include #include #define uchar unsigned char #define uint u ...
- C语言票价优惠程序,c语言车票管理标准系统源程序.docx
#include #include #include include include #include #define N 80 void maipiao(int sjnt t)? float tim ...
- LED数码管静态显示 C语言程序,PIC单片机驱动LED数码管显示程序
;*****该程序用于驱动led数码管显示,在8个LED数码管上依次显示数字1.2.3.4.5.6.7.8******* ;****http://www.51hei.com 单片机学习网经典程序已测试 ...
- c语言程序只能有一个源程序文件,下列说法哪个正确?() A.一个程序可以包含多个源文件 B.一个源文件中只能有一个类 C.一个源文件中可以...
下列说法哪个正确?() A.一个程序可以包含多个源文件 B.一个源文件中只能有一个类 C.一个源文件中可以 更多相关问题 [问答题,简答题] 古埃及服饰中时常看到"蛇"." ...
- 单片机显示屏c语言程序,51单片机驱动1602液晶显示器c程序
51单片机驱动1602液晶显示器c程序 /* 程序效果:单片机控制液晶显示器1602显示字母数字,用户自行更改io 程序版权:http://www.51hei.com */ #include //头文 ...
- cc1101初始化c语言程序,STC89C52单片机驱动CC1101无线模块的接收C语言程序
#include #include #defineINT8Uunsigned char #defineINT16Uunsigned int #define WRITE_BURST 0x40//连续写入 ...
- pcf8563c语言程序,IIC的PCF8563实用时钟程序(iccavr)
/************************************* * PCF8563时钟程序 * * 文 件 名:1602_8563.c * * 版 本:V22.02 * * 主控芯片:M ...
- 收音机c语言程序,51单片机驱动TEA5767调频收音机芯片C程序
/*----------- TEA5767 驱动-----------*/ /*------ 外部晶振为 12MHz-------*/ /*--------最后修改2011.02.26---- ...
最新文章
- 10个角度分析软件工程师应该知道的100件事
- linux中spawn远程执行,linux 远程登录执行命令
- Oracle入门(十四.13)之带参数的游标
- iOS 打包.framework(包括第三方、图片、xib、plist文件)详细步骤及需要注意的地方...
- Win8Metro(C#)数字图像处理--2.31灰度拉伸算法
- python cryptography key加密_python3利用cryptography 进行加密和解密
- 对于软件测试四大误区的认识
- 特征提取与检测(一)---Harris与Shi-Tomasi角点检测原理
- bzoj 1053: [HAOI2007]反素数ant 51nod-1060:最复杂的数(反素数与因数个数计算)
- 视频监控系统平台服务器维护,平安城市视频监控系统运维方案
- c语言函数文档,C语言函数手册DOC.doc
- curl: (51) Unable to communicate securely with peer: requested domain name does not match the server
- 你好,这是你要的五彩斑斓的黑
- pdf转wordpptexceljpg图片pdf编辑器转换修改
- Ignite Beijing 2019你参加了吗?多图,慎点!
- Linux应用编程-音频应用编程-语音转文字项目
- SIGCOMM13论文简要选读
- can和could的用法_情态动词can和could的用法及例句
- 曼尼托巴大学计算机科学硕士,曼尼托巴大学电气和计算机工程硕士解析
- Sklearn机器学习中的主要算法原理以及实现