完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
发下我的程序,大家 看看哪有错误
#define uchar unsigned char #define unit unsigned int #define write_second 0x80 #define write_minute 0x82 #define write_hour 0x84 #define read_second 0x83 #define read_minute 0x85 #define read_hour 0x8e ***it SCLK=P3^3; ***it SDA=P3^4; ***it RST=P3^5; uchar hour=23;minute=59;second=58; void delay1(uchar x) { uchar i; while(x--) for(i=0;i<110;i++); } void DS1302WriteByte(uchar dat) { uchar i; for(i=0;i<8;i++ { SDA=dat&0x01 delay1(2); SCLK=1 delay1(2); dat>>=1; SCLK=0; } } uchar DS1302ReadByte() { uchar i,dat; delay1(2); for(i=0;i<8;i++) { dat>>=1; if(SDA==1 dat|=0x80; delay1(2); SCLK=0; delay1(2); } return dat; } /*每次发起数据传输之前,要复位ds1302*/ void resetds1302(void) { RST=0; SCLK=0; RST=1; } /*写数据前清除写保护*/ void cleards1302wp(void) { resetds1302(); RST=1; DS1302WriteByte(0X8E); DS1302WriteByte(0); SDA=0; RST=0; } /*写完数据设置写保护*/ void setds1302wp(void) { resetds1302(); RST=1; DS1302WriteByte(0X8E); DS1302WriteByte(0X80); SDA=0; RST=0; } uchar DS1302Read(uchar addr) { uchar tmp=0; resetds1302(); RST=1; DS1302WriteByte(addr); tmp=DS1302ReadByte(); SDA=0; RST=0; return tmp; } void DS1302Write(uchar addr,uchar dat) { resetds1302; RST=1; DS1302WriteByte(addr); DS1302WriteByte(dat); SDA=0; RST=0; } void set_time(uchar addr,uchar time) { uchar tmp; tmp=time/10; time=time%10; time=time+tmp*16; cleards1302wp(); DS1302Write(addr,time); setds1302wp(); } void read_time(uchar addr,uchar time) { time=DS1302Read(addr); } void dispalytime(uchar addr,uchar time) { uchar shi,ge; shi=time/16; ge=time%16; com(addr); dat(0x30+shi); dat(0x30+ge); } void main() { set_time(write_hour,hour); set_time(write_minute,minute); set_time(write_second,second); while(1) { read_time(read_hour,hour); dispalytime(0x90,hour); read_time(read_minute,minute); dispalytime(0x92,minute); read_time(read_second,second); dispalytime(0x94,second); } } com(),dat() 是12864 显示所需子函数. 硬件上一开始显示初始值,完后马上显示17 : 3; : 3: 这算是乱码吗?且时间不变化, 硬件上没有在晶振处加电容 谁有能用的程序给一份 但是大多数都是这样的吧 |
|
相关推荐
24个回答
|
|
|
我弄了好几个小时都没有弄出来。还是提几点。
第一:直接将hour=0x23;minute=0x59;second=0x58;保存进ds1302就是时间23:59:58 读取出来的数值shi=time/16;ge=time%16;这样转换就行了。 第二:DS1302ReadByte()这个函数for里面是有SCLK=0;没有SCLK=1。不产生脉冲。 第三:刚才说的,你这个函数有问题
调用这个函数read_time(read_hour,hour);是不改变hour的值的。 例如下面这个函数
调用add(a,b)运行后b的值是不改变的依然是b=2,而不是b=4。 实参向形参的数据传递是“值传递”,只由实参传送给形参,而不能由形参传回给实参。 调用这个函数只是将a,b的值传给i,j。运算后的值是不能传回给a,b的。 同理read_time(read_hour,hour);调用这个函数,只是将read_hour,hour的值传给参数uchar addr,uchar time。程序运行后hour的值是不改变的。
最佳答案
|
|
|
|
|
|
您看看这个吧
|
|
|
|
|
|
12864显示程序,可以直接加载的
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
你程序问题多多。第一:uchar hour=23;minute=59;second=58;你这个定义错了。你这样定义hour是uchar,minute和second都是int,应该是uchar hour=23,minute=59,second=58;
第二;你的C语言有点不过关。
这个函数有点问题。例如read_time(read_hour,hour);这个语句,他运行的结果是不改变hour的值的。 楼主再去看看形参和实参的关系。实参向形参的数据传递是“值传递”,只由实参传送给形参,而不能由形参传回给实参。可以不要这个函数,主函数读取小时改为hour=DS1302Read(read_hour)。 第三:我猜楼主的数据处理也有问题。17 : 3; : 3:显示这个并不是没有规律的他就是23:59:58的十六进制显示。就是17:3B:3A写进去LCD1602就显示为17 : 3; : 3: |
|
|
|
|
依然落叶飘零 发表于 2014-5-1 16:06 我用定时搞定了时间,但有点别的问题,能看看我这个帖子里的问题吗?谢谢 https://bbs.elecfans.com/jishu_430158_1_1.html |
|
|
|
|
依然落叶飘零 发表于 2014-5-1 16:06 就算数值转化有问题,但是显示出来,不走是什么原因? 还有往ds1302里写入数据需要把十进制转化为bcd码,我已经转了,可是往出读的时候就不用再转了吗? 我觉得还是ds1302没有工作,不然就不会把初始值转为16进制显示了,因为从ds1302里面读取的bcd值肯定需要 void dispalytime(uchar addr,uchar time) { uchar shi,ge; shi=time/16; ge=time%16; com(addr); dat(0x30+shi); dat(0x30+ge); } 处理才能显示吧? 好多说ds1302不工作需要在dat 接上拉电阻,还有说秒寄存器清ch位? 不懂啊 ds1302怎么这么难搞 |
|
|
|
|
依然落叶飘零 发表于 2014-5-1 21:28 不管怎么说都要谢谢你 你以前用过ds1302吗? 为什么我看的别人给的程序 有的连bcd码转换都没有也能显示. 难道这款芯片还分型号? 如果你以前用过ds1302 能给个程序吗 |
|
|
|
|
|
给你参考下………………
|
|
|
|
|
|
再请教你一个问题,我的按键要按下1秒多后松手才起作用,怎么办,用的就是简单延时消抖的 该怎么改才能速度快点. |
|
|
|
|
|
抖动延时多久?一般延时10ms. |
|
|
|
|
|
谢谢各位,小弟碰巧也遇到问题
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
楼主威武;楼主威武
|
|
|
|
|
|
赚积分下个文件哈哈
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【瑞萨RA6E2】瑞萨E2S软件安装过程,等待过程玩下97_e2 studio_ZGZZ
140 浏览 0 评论
483 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
815 浏览 0 评论
1346 浏览 2 评论
804 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16903 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 15:47 , Processed in 1.237745 second(s), Total 79, Slave 70 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3009