标题: 二手DS12C887使用时还要初始化吗?万年历代码中要删除的语句问题?请高手指点。 [打印本页]
作者: gxjhgxjh 时间: 2020-8-6 22:16
标题: 二手DS12C887使用时还要初始化吗?万年历代码中要删除的语句问题?请高手指点。
本人刚开始学习单片机,手里有一片使用过的DS12C887芯片,想学习制作一个万年历,下载了别人的代码在学习中了解到,首次操作12C887时,寄存器要初始化,初始化完成后相应的代码要删除。代码中有两段是关于12C887初始化,有一段起点和结束注解的很清楚,整段删除就可以,还有一段注解不是很清楚,不知道哪里是结束点。请高手给予指点一二。谢谢啦!
下面是标注清楚的一段:
/*
首次操作12C887时,寄存器初始化
配置12C887当前时间(20190716-10:54:07)
配置12C887闹钟
*/
void set_time(void)
{
write_ds(0,7);
write_ds(1,0);
write_ds(2,54);
write_ds(3,0);
write_ds(4,10);
write_ds(5,0);
write_ds(6,3);
write_ds(7,16);
write_ds(8,7);
write_ds(9,19);
}
/*首次上电设置DS12C887时使用,以后不必再调用*/
下面这一段注解不是很清楚,不知道删除到哪里结束:,还有就是初始化代码都删除了,后面还有一句“init();调用初始化函数”怎么办?
void set_time() //首次操作12c887时给寄存器初始化,完成后,要把这一段用给屏蔽起来
{
write_ds(0,0); //根据寄存器A,相当于 所有的位置,全部显示00。
write_ds(1,0);
write_ds(2,0);
write_ds(3,0);
write_ds(4,0);
write_ds(5,0);
write_ds(6,0);
write_ds(7,0);
write_ds(8,0);
write_ds(9,0);
}
void read_alarm() //读取闹钟值
{
amiao=read_ds(1); 根据寄存器A,分别把闹钟值读出来,并且赋值给时分秒
afen=read_ds(3);
ashi=read_ds(5);
}
void main() //主程序
{
init(); //调用初始化函数
while(1) //为真不断循环,等待闹钟中断
{
还有下面这一段是不是只删除打开振荡器这一句代码就可以了?
write_ds(0x0A,0x20); //首次使用ds12c887时使用,以后不必在写。打开振荡器
write_ds(0x0B,0x26); // 设置24小时模式,数据二进制格式,开启闹钟中断。
//0A,0B表示地址,20,26翻译成二进制是00100000,00100110对应着对着寄存器A和B从D7-D0
set_time(); //设置默认上电时间
作者: xianfajushi 时间: 2020-8-7 08:45
函数的第一对花括号就是函数的整个函数体了,void set_time() {。。。}也就是你所谓的开始和结束。
作者: gxjhgxjh 时间: 2020-8-7 10:22
谢谢楼上的回复。明白了“一对花括号就是函数的整个函数体”。
又下载了另外一个万年历代码,确认了就是一对花括号内的语句全部删除。还有就是 打开振荡器那个地方要删除三段语句。
现在就剩“调用初始化函数”这一个问题了,再仔细看一下代码是不是另有所指。
作者: yzwzfyz 时间: 2020-8-7 17:01
你需要读通DS12C887的手册,而后再写程序!!!
作者: 玉萌业余发展 时间: 2020-11-8 17:18
楼主,我试了下,是这样的,初始化完成后,仅需在大括号内屏蔽那10条语句,之后重新编译程序,拔出DS12887+,然后新编译程序仅下载到单片机就OK了,亲测有效。
作者: 玉萌业余发展 时间: 2020-11-8 17:19
/*初始化完成后,拔掉DS12C887+,
然后从大括号处屏蔽此10条语句,之后
重新仅下载到单片机,之后再插上
DS12C887+就可以断电运行时间了*/
作者: 小新· 时间: 2021-2-5 19:36
楼主。我和你用的参考程序是同一个人的,我这边删掉初始化代码,但是lcd显示的内容有乱码?请问你有遇到这种情况吗
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |