蓝桥杯单片机DS1302芯片代码底层兼使用
·
本作者严肃声明,所有内容均来自网络自学,仅是为了分享,若有侵权,请联系删除,本作者不承担任何法律责任!
一,DS1302芯片(时钟芯片)
(一).c文件
void Set_Rtc(unsigned char *ucRtc)//定义一个void函数,用来上电显示
{
unsigned char i;
Write_Ds1302_Byte(0x8e, 0x00); // 禁止写保护
Write_Ds1302_Byte(0x80, 0x80); // 停止时钟芯片
for (i = 0; i < 3; i++)
Write_Ds1302_Byte(0x84 - 2 * i, ucRtc[i] / 10 % 10 << 4 | ucRtc[i] % 10); //写进去的时候进行十进制转化为BCD码形式
Write_Ds1302_Byte(0x8e, 0x80);// 打开写保护
}
void Read_Rtc(unsigned char *ucRtc)//定义一个void函数用来读取当前时间
{
unsigned char i;
unsigned temp;
EA = 0; // 关闭总中断,防止时序错误
for (i = 0; i < 3; i++)
{
temp = Read_Ds1302_Byte(0x85 - 2 * i);
ucRtc[i] = temp / 16 * 10 + temp % 16;//读出来时将BCD码转化为十进制
}
EA = 1;// 开启总中断
}
这里的形式参数是个指针,指代的是实参的地址。实参是数组,所以数组名作为实参传递。数组名代表数组的首地址,当它作为实参传递给形参为指针的函数时,实际上传递的是数组的起始地址。这样,函数内部可以通过该指针来访问和操作数组元素。
(二).h文件
#ifndef __DS1302_H
#define __DS1302_H
void Set_Rtc(unsigned char *ucRtc);//别忘记分号
void Read_Rtc(unsigned char *ucRtc);//别忘记分号
#endif
在底层.h文件中,千万别忘记声明的整个函数(包括他的类型在里面),还有别忘了加分号。
(三)考察形式和使用
1.显示时间
回到main函数中,首先在定义变量区中定义一个数组,用来存放时分秒(格式是十进制数),上电的时候在main函数内,while循环外,1.首先设置一下默认设定的时间,2.然后在数码管函数中一直读一直显示。
/* 变量申明区 */
unsigned char ucRtc[3]={23,59,36};//23时 59分 36秒
/* 数码管函数 */
void Seg_Proc()
{
if(Seg_Slow<500)return;
Seg_Slow=0;
/* 时间数据采集*/
Read_Rtc(ucRtc);//让一直读
/* 数据显示*/
Seg_buf[0]=ucRtc[0]/10;
Seg_buf[1]=ucRtc[0]%10;
/*
....(省略)
*/
}
/* 主函数 */
void main()
{
init();
Timer0_Init();
Set_Rtc(ucRtc);//上电设置一次时间
while(1)
{
Key_Proc();
Seg_Proc();
Led_Proc();
}
}
2.获取时间
蓝桥杯最喜欢考满足某某条件切换到某个回显界面显示触发的时间,那我们该怎么做呢?很简单,定义一个数组(下面介绍一维和二维数组)
/* 变量申明区 */
unsigned char ucRtc[3]={23,59,36};//23时 59分 36秒
unsigned char Time[3]={0};
unsigned char Time_1[3][3]={0};
/* 数码管函数 */
void Seg_Proc()
{
if(Seg_Slow<500)return;
Seg_Slow=0;
/* 时间数据采集*/
Read_Rtc(ucRtc);//让一直读
if(满足某个条件)
{
Read_Rtc(Time);
Read_Rtc(Time_1[0]);
}
}
首先,我们要了解这个Read_Rtc()这个函数的意思,他是把1302芯片里面的时间按照我们底层那样写的,把时分秒更新后再给我们的ucRtc数组,所以这也是我们为什么要一直读这个数组的值,然后显示上去,这个数组的值是不断变化的。其次,我们上面写到,满足某一瞬间条件,我们一维数组(必须有三位)接受到1302芯片的某一刻的时间,二维数组同理,把获得的时分秒放在第一行。
例如十六届模拟赛二(这里“写到后面”注释不用管哈)

感兴趣的小伙伴可以去试试看!
本文有任何错误还请见谅,感谢指导。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)