通过群聊添加的微信怎么添加群聊号如何看他的以前图片

查看: 10377|回复: 71
升级PCF8563芯片驱动代码,欢迎各位大大们拍砖指导
主题帖子精华
在线时间222 小时
之前和大家分享了一下几个时钟芯片的驱动代码还有原理图什么的“”
最近因为一个项目原因,全部更新了PCF8563这个芯片的驱动代码,主要是直接在函数设置BCD格式和BIN格式的转换输出,全部操作利用结构体的思路,更加清晰明了。
底层IIC驱动用“”这个帖子3楼附件,或者在文件开头位置的几个函数稍微修改一下即可,具体如下
[C] 纯文本查看 复制代码/**
*****************************************************************************
: PCF8563某寄存器写入一个字节数据
: REG_ADD:要操作寄存器地址
要写入的数据
* @Output : none
* @Return : none
*****************************************************************************
void PCF8563_Write_Byte(unsigned char REG_ADD, unsigned char dat)
IIC_Start();
if(!(IIC_Write_Byte(PCF8563_Write)))
//发送写命令并检查应答位
IIC_Write_Byte(REG_ADD);
IIC_Write_Byte(dat);
//发送数据
IIC_Stop();
*****************************************************************************
: PCF8563某寄存器读取一个字节数据
: REG_ADD:要操作寄存器地址
* @Output : none
* @Return : 读取得到的寄存器的值
*****************************************************************************
unsigned char PCF8563_Read_Byte(unsigned char REG_ADD)
unsigned char ReD
IIC_Start();
if(!(IIC_Write_Byte(PCF8563_Write)))
//发送写命令并检查应答位
IIC_Write_Byte(REG_ADD);
//确定要操作的寄存器
IIC_Start();
//重启总线
IIC_Write_Byte(PCF8563_Read);
//发送读取命令
ReData = IIC_Read_Byte();
//读取数据
IIC_Ack(1);
//发送非应答信号结束数据传送
IIC_Stop();
return ReD
*****************************************************************************
: PCF8563写入多组数据
: REG_ADD:要操作寄存器起始地址
写入数据数量
*WBuff: 写入数据缓存
* @Output : none
* @Return : none
*****************************************************************************
void PCF8563_Write_nByte(unsigned char REG_ADD, unsigned char num, unsigned char *pBuff)
unsigned char i = 0;
IIC_Start();
if(!(IIC_Write_Byte(PCF8563_Write)))
//发送写命令并检查应答位
IIC_Write_Byte(REG_ADD);
//定位起始寄存器地址
for(i = 0;i &i++)
IIC_Write_Byte(*pBuff);
//写入数据
IIC_Stop();
*****************************************************************************
: PCF8563读取多组数据
: REG_ADD:要操作寄存器起始地址
读取数据数量
* @Output : *WBuff: 读取数据缓存
* @Return : none
*****************************************************************************
void PCF8563_Read_nByte(unsigned char REG_ADD, unsigned char num, unsigned char *pBuff)
unsigned char i = 0;
IIC_Start();
if(!(IIC_Write_Byte(PCF8563_Write)))
//发送写命令并检查应答位
IIC_Write_Byte(REG_ADD);
//定位起始寄存器地址
IIC_Start();
//重启总线
IIC_Write_Byte(PCF8563_Read);
//发送读取命令
for(i = 0;i &i++)
*pBuff = IIC_Read_Byte();
//读取数据
if(i == (num - 1)) IIC_Ack(1);
//发送非应答信号
else IIC_Ack(0);
//发送应答信号
IIC_Stop();
上面几个函数只要对应移植就可以了。
提供对外的函数有以下几个
[C] 纯文本查看 复制代码void
PCF8563_Write_Byte
(unsigned char REG_ADD, unsigned char dat);
//PCF8563某寄存器写入一个字节数据
unsigned char PCF8563_Read_Byte
(unsigned char REG_ADD);
//PCF8563某寄存器读取一个字节数据
PCF8563_Write_nByte
(unsigned char REG_ADD, unsigned char num, unsigned char *pBuff);
//PCF8563写入多组数据
PCF8563_Read_nByte
(unsigned char REG_ADD, unsigned char num, unsigned char *pBuff);
//PCF8563读取多组数据
unsigned char PCF8563_Check
//PCF8563检测是否存在
PCF8563_Start
//PCF8563启动
PCF8563_Stop
//PCF8563停止
PCF8563_SetMode
(unsigned char Mode);
//PCF8563设置运行模式
PCF8563_SetPowerReset
(unsigned char NewState);
//PCF8563设置电源复位功能开启与关闭
PCF8563_SetCLKOUT
(_PCF8563_CLKOUT_Typedef* PCF_CLKOUTStruct);
//PCF8563设置输出频率
PCF8563_SetTimer
(_PCF8563_Timer_Typedef* PCF_TimerStruct);
//PCF8563设置定时器
PCF8563_Set_Times
(unsigned char PCF_Format,\
unsigned char PCF_Century,\
unsigned char Year, unsigned char Month, unsigned char Date, unsigned char Week,\
unsigned char Hour, unsigned char Minute);
//设置时间,主要用于后台调用,或者初始化时间用
PCF8563_SetRegister
(unsigned char PCF_Format, unsigned char PCF_Century, _PCF8563_Register_Typedef* PCF_DataStruct);
//PCF8563写入寄存器
PCF8563_GetRegister
(unsigned char PCF_Format, unsigned char *PCF_Century, _PCF8563_Register_Typedef* PCF_DataStruct);
//PCF8563读取寄存器
PCF8563_SetTime
(unsigned char PCF_Format, _PCF8563_Time_Typedef* PCF_DataStruct);
//PCF8563写入时间信息
PCF8563_GetTime
(unsigned char PCF_Format, _PCF8563_Time_Typedef* PCF_DataStruct);
//PCF8563读取时间信息
PCF8563_SetDate
(unsigned char PCF_Format, unsigned char PCF_Century, _PCF8563_Date_Typedef* PCF_DataStruct);
//PCF8563写入日期信息
PCF8563_GetDate
(unsigned char PCF_Format, unsigned char *PCF_Century, _PCF8563_Date_Typedef* PCF_DataStruct);
//PCF8563读取日期信息
PCF8563_SetAlarm
(unsigned char PCF_Format, _PCF8563_Alarm_Typedef* PCF_DataStruct);
//PCF8563写入闹铃信息
PCF8563_GetAlarm
(unsigned char PCF_Format, _PCF8563_Alarm_Typedef* PCF_DataStruct);
//PCF8563读取闹铃信息
详细代码请看附件,同时欢迎各路高人指点一二
23:08 上传
点击文件名下载附件
9.12 KB, 下载次数: 1986
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
金钱107941
在线时间716 小时
cool,八度老师又出好作品了。
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
在线时间222 小时
回复【2楼】正点原子:
---------------------------------
军哥,你这速度令人惊叹啊,我才刚发完你就来了,实在是感动啊
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
金钱107941
在线时间716 小时
回复【3楼】八度空间:
---------------------------------
必须的
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
在线时间879 小时
我在UCOS视频教程里面提了你的帖子!哈哈~~
开往春天的手扶拖拉机
主题帖子精华
在线时间222 小时
回复【5楼】zuozhongkai:
---------------------------------
好吧,还是你牛
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
初级会员, 积分 77, 距离下一级还需 123 积分
在线时间12 小时
回复【6楼】八度空间:
---------------------------------
麻烦问下:我用的你的代码,IIC_Write_Byte()返回&结果都是没有应答信号,我用示波器看了还是没有SDA拉低,我用示波器看的输出信号都是对的,就是没有应答
主题帖子精华
高级会员, 积分 880, 距离下一级还需 120 积分
在线时间143 小时
谢谢,八度老师
知识是你最好的财富
主题帖子精华
在线时间222 小时
回复【7楼】rush9838465:
---------------------------------
说明你的8563没有响应,看下硬件接对了没?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
在线时间222 小时
回复【8楼】默默莱:
---------------------------------
谢谢!
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
初级会员, 积分 77, 距离下一级还需 123 积分
在线时间12 小时
回复【9楼】八度空间:
---------------------------------
谢谢&八度老师,&是晶振问题&晶振没有工作。
主题帖子精华
在线时间222 小时
回复【11楼】rush9838465:
---------------------------------
恭喜恭喜!!!
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
中级会员, 积分 246, 距离下一级还需 254 积分
在线时间25 小时
八度大神,我对您的敬仰如滔滔江水,绵绵不绝!如黄河泛滥,一发不可收拾!如泰山压顶,。。。。。好了,言归正传,大神,这几次弄pcf8563,正好用到了您的程序,开始一直用&nbspCF8563检测是否存在&&这个函数,一直检测不到,害我检查了半天,又重新焊了块板,还是检测不到,我就试试其他函数,试了设置日期和读取日期,竟然可以耶,所以大神,你这个PCF8563检测存在的函数,是不是不行啊~~
主题帖子精华
在线时间222 小时
回复【13楼】chenyh85:
---------------------------------
我的可以啊,每次都成功,你仿真看下到哪步就不行了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
中级会员, 积分 246, 距离下一级还需 254 积分
在线时间25 小时
回复【14楼】八度空间:
---------------------------------
这个没法仿真啊&,反正就是调用&nbspCF8563检测是否存在&函数,返回的一直是1,所以就是不存在咯,但是可以正常设置,读取时间日期。
主题帖子精华
在线时间222 小时
回复【15楼】chenyh85:
---------------------------------
这样啊,我测试一下看下,谢谢啊!!!
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
中级会员, 积分 246, 距离下一级还需 254 积分
在线时间25 小时
回复【16楼】八度空间:
---------------------------------
大神,您不用测试了,是我这边问题!
主题帖子精华
在线时间222 小时
回复【17楼】chenyh85:
---------------------------------
怎么说我每次测试都过,怎么你就不过呢,呵呵
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
高级会员, 积分 574, 距离下一级还需 426 积分
在线时间37 小时
1,帮忙看看,这样调用,行吗?
IIC_GPIO_Init();
void&nbspCF8563_SetFunc(void)
{
_PCF8563_Date_Typedef& Date_InitS
_PCF8563_Time_Typedef& Timer_InitS
Date_InitStructure.RTC_Years&&&&=&15;
Date_InitStructure.RTC_Months&&&=&05;
Date_InitStructure.RTC_Days&&&&&=&28;
Date_InitStructure.RTC_WeekDays&=&4;
Timer_InitStruct.RTC_Hours=14;
Timer_InitStruct.RTC_Minutes=23;
Timer_InitStruct.RTC_Seconds=55;
PCF8563_SetMode(PCF_Mode_Normal);
PCF8563_Stop();
PCF8563_SetTime(PCF_Format_BIN,&&Timer_InitStruct);
&nbspCF8563_SetDate(PCF_Format_BIN,&0,&Date_InitStructure);
&nbspCF8563_Start();
void&nbspCF8563_GetFunc(&_PCF8563_Time_Typedef*&nbspCF_TimeStruct,&_PCF8563_Date_Typedef*&nbspCF_DateStruct)
{
PCF8563_GetTime(PCF_Format_BIN,&nbspCF_TimeStruct);
&nbspCF8563_GetDate(PCF_Format_BIN,0,&nbspCF_DateStruct);
主题帖子精华
中级会员, 积分 246, 距离下一级还需 254 积分
在线时间25 小时
回复【19楼】无名氏:
---------------------------------
你自己测试下,你定义那里少了个指针符号吧,还有如果不能通过,看看是不是和我一样,死机了,我遇到了,后来分配内存给变量,才解决。
主题帖子精华
在线时间222 小时
回复【20楼】chenyh85:
---------------------------------
哪里少了指针???我测试直接调用的,都通过的啊,你用的IIC驱动自己写的么?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
高级会员, 积分 574, 距离下一级还需 426 积分
在线时间37 小时
回复【20楼】chenyh85:
---------------------------------
可以了。。。
谢谢。。
主题帖子精华
中级会员, 积分 243, 距离下一级还需 257 积分
在线时间51 小时
学习下,感谢分享!
主题帖子精华
初级会员, 积分 52, 距离下一级还需 148 积分
在线时间0 小时
崇拜啊,真要用,希望顺利,帖子收藏了两遍都!
主题帖子精华
在线时间222 小时
回复【24楼】:
---------------------------------
谢谢!欢迎坛友反馈,指导。。。
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
中级会员, 积分 298, 距离下一级还需 202 积分
在线时间20 小时
MARK...............
主题帖子精华
在线时间222 小时
回复【26楼】yangzi6000:
---------------------------------
欢迎提出宝贵意见
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
初级会员, 积分 52, 距离下一级还需 148 积分
在线时间0 小时
回复【25楼】八度空间:
---------------------------------
遇到问题了,我就想在某年某月某日某时某分某秒产生中断,能实现吗?新手啊望解答!
主题帖子精华
初级会员, 积分 52, 距离下一级还需 148 积分
在线时间0 小时
发现晶振不启振啊,写时间,读时间均正常,就是时间不走?八度老师指点指点迷津啊,晶振是好的?start也加了,启动那一位显示为0,是运行的设置啊?
主题帖子精华
在线时间222 小时
回复【28楼】:
---------------------------------
设置一下相关寄存器就可以了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
在线时间222 小时
回复【29楼】:
---------------------------------
你的电路怎么画的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
初级会员, 积分 52, 距离下一级还需 148 积分
在线时间0 小时
这是我的电路!
(23.78 KB, 下载次数: 31)
10:32 上传
主题帖子精华
在线时间222 小时
回复【32楼】:
---------------------------------
你的int管脚怎么直接和单片机相连啊
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
初级会员, 积分 52, 距离下一级还需 148 积分
在线时间0 小时
回复【31楼】八度空间:
---------------------------------
&time.RTC_Hours=16;&&//小时
&time.RTC_Minutes=20;&&//分钟
&time.RTC_Seconds=48;&&//秒钟
&nbspCF8563_SetTime(PCF_Format_BCD,&time);
&nbspCF8563_Start();
&delay_ms(3000);
&nbspCF8563_GetTime(PCF_Format_BCD,&newtime);
程序就写这些有问题吗,是不是要把年月日,设置全了才能走。
主题帖子精华
初级会员, 积分 52, 距离下一级还需 148 积分
在线时间0 小时
回复【33楼】八度空间:
---------------------------------
我要用这个中断唤醒单片机的stop模式,并且有上拉电阻啊
主题帖子精华
初级会员, 积分 52, 距离下一级还需 148 积分
在线时间0 小时
回复【33楼】八度空间:
---------------------------------
这个也不影响我的晶振走不走啊?
主题帖子精华
初级会员, 积分 52, 距离下一级还需 148 积分
在线时间0 小时
回复【33楼】八度空间:
---------------------------------
我把int脚断开就启振了!不解,那我中断怎么连啊?非常感谢老师的指点,我再研究研究
主题帖子精华
初级会员, 积分 89, 距离下一级还需 111 积分
在线时间5 小时
感谢分享!!
主题帖子精华
在线时间222 小时
回复【34楼】:
---------------------------------
不用全部都设置的,时间和日期可以分开来设置的,不影响
INT管脚和单片机管脚之间用三极管隔离试下
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
新手上路, 积分 7, 距离下一级还需 43 积分
在线时间0 小时
alarm&&启用标志位在未启用时,没有在对应的标志清除,建议在设置前初始化以下标志:
PCF_DataStruct-&RTC_AlarmDays& &&&|= PCF_Alarm_DaysC&&//日期闹铃
& & & & PCF_DataStruct-&RTC_AlarmHours& & |= PCF_Alarm_HoursC&&//小时闹铃
& & & & PCF_DataStruct-&RTC_AlarmMinutes&&|= PCF_Alarm_MinutesC&&//分钟闹铃
& & & & PCF_DataStruct-&RTC_AlarmWeekDays |= PCF_Alarm_WeekDaysC
& & & & if (Alarm_State == 1 || Alarm_State == 2)&&//打开闹铃
& && && & if (PCF_DataStruct-&RTC_AlarmType & RTC_AlarmType_Days) {
& && && && &PCF_DataStruct-&RTC_AlarmDays& &&&&= PCF_Alarm_DaysO&&//日期闹铃
& && && & }
& && && & else {
& && && & }
& & & & & & & & if (PCF_DataStruct-&RTC_AlarmType & RTC_AlarmType_Hours)& &&&PCF_DataStruct-&RTC_AlarmHours& & &= PCF_Alarm_HoursO&&//小时闹铃
& & & & & & & & if (PCF_DataStruct-&RTC_AlarmType & RTC_AlarmType_Minutes)& &PCF_DataStruct-&RTC_AlarmMinutes&&&= PCF_Alarm_MinutesO&&//分钟闹铃
& & & & & & & & if (PCF_DataStruct-&RTC_AlarmType & RTC_AlarmType_WeekDays)&&PCF_DataStruct-&RTC_AlarmWeekDays &= PCF_Alarm_WeekDaysO&&//分钟闹铃
& & & & if (Alarm_State == 3)&&//关闭
& & & & & & & & if (PCF_DataStruct-&RTC_AlarmType & RTC_AlarmType_Days)& && &PCF_DataStruct-&RTC_AlarmDays& &&&|= PCF_Alarm_DaysC&&//日期闹铃
& & & & & & & & if (PCF_DataStruct-&RTC_AlarmType & RTC_AlarmType_Hours)& &&&PCF_DataStruct-&RTC_AlarmHours& & |= PCF_Alarm_HoursC&&//小时闹铃
& & & & & & & & if (PCF_DataStruct-&RTC_AlarmType & RTC_AlarmType_Minutes)& &PCF_DataStruct-&RTC_AlarmMinutes&&|= PCF_Alarm_MinutesC&&//分钟闹铃
& & & & & & & & if (PCF_DataStruct-&RTC_AlarmType & RTC_AlarmType_WeekDays)&&PCF_DataStruct-&RTC_AlarmWeekDays |= PCF_Alarm_WeekDaysC&&//分钟闹铃
主题帖子精华
在线时间222 小时
alarm&&启用标志位在未启用时,没有在对应的标志清除,建议在设置前初始化以下标志:
PCF_DataStruct-&RTC ...
这部分功能暂时没用到,没仔细研究
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
新手上路, 积分 4, 距离下一级还需 46 积分
在线时间2 小时
楼主,想问下时间和日期设置完后,时间也能跑起来,但当时间到达23:59后,下一分钟应该是日期改为下一天,但获取的日期和周都是错的,难道日期没有自增功能吗??求解啊。。。。
主题帖子精华
初级会员, 积分 65, 距离下一级还需 135 积分
在线时间4 小时
楼主,想问下时间和日期设置完后,时间也能跑起来,但当时间到达23:59后,下一分钟应该是日期改为下一天, ...
配置初始化了寄存器,是会自动增加的
主题帖子精华
新手上路, 积分 4, 距离下一级还需 46 积分
在线时间2 小时
本来是想找为什么时间自增到23:59后,日期怎么不变的问题,结果新问题出现了,现在连时间都不走了,但能够设置时间和日期,读取也正确,但sends(02H)寄存器读出一直为0,之前还会自动增加,什么情况,你们遇到过吗?????
主题帖子精华
初级会员, 积分 128, 距离下一级还需 72 积分
在线时间6 小时
设置闹钟时间到,INT脚输出低电平,这个功能,搞了好几天始终实现不了,定时器倒是可以产生中断,这是怎么回事?PCF8563_SetAlarm有问题吗?
主题帖子精华
新手上路, 积分 7, 距离下一级还需 43 积分
在线时间0 小时
多谢,已下载,正在研究。
不过坦率地说,某些编程习惯可能不符合C语言的惯例。
C语言中,常量定义一般全部用大写,变量或者函数则大小写混杂,这样一看就知道。
另外C语言在函数中传递缓冲区时,一般是排列顺序是先指针,然后大小。
主题帖子精华
在线时间222 小时
多谢,已下载,正在研究。
不过坦率地说,某些编程习惯可能不符合C语言的惯例。
C语言中,常量定义一般全 ...
个人习惯,呵呵
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
初级会员, 积分 73, 距离下一级还需 127 积分
在线时间0 小时
主题帖子精华
初级会员, 积分 195, 距离下一级还需 5 积分
在线时间32 小时
cool,八度老师又出好作品了。
原子哥这么个头像,不怕老板找你事么
主题帖子精华
在线时间222 小时
原子哥这么个头像,不怕老板找你事么
原子哥就是老板,害怕找事?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
Powered by

我要回帖

更多关于 微信对方通过群聊添加 的文章

 

随机推荐