完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#include #define uchar unsigned char uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//后边加的又重新加的0-9是为了搞清楚到底显示什么数。。 ***it sck=P1^7; ***it io=P2^3; ***it rst=P1^3; ***it wr=P3^6; ***it p25=P2^5; ***it p26=P2^6; ***it p27=P2^7; uchar time_data[7]={12,12,01,01,01,01,01};//年周月日时分秒 uchar write_data[7]={0x8c,0x8a,0x88,0x86,0xd84,0x82,0x80}; uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81}; uchar disp[8]={0}; void write_ds1302_byte(uchar dat) { uchar i; for(i=0;i<8;i++) { dat=dat>>1; sck=0; // io=dat&0x01; io=CY; sck=1; } } /*uchar read_byte() { uchar i,k; scl=0; for(i=0;i<8;i++) { k=k>>1; if(io) k=k|0x80; scl=1; scl=0; } return k; }*/ void write_ds1302(uchar add,uchar byte) { rst=0; _nop_(); sck=0; _nop_(); rst=1; _nop_(); write_ds1302_byte(add); write_ds1302_byte(byte); rst=0; _nop_(); // io=1; // _nop_(); sck=1; _nop_(); } uchar read_ds1302(uchar add) { uchar i,value; rst=0; _nop_(); sck=0; _nop_(); rst=1; _nop_(); write_ds1302_byte(add); for(i=0;i<8;i++) { value=value>>1; if(io) value=value|0x80; sck=1; sck=0; } sck=1; _nop_(); rst=0; _nop_(); return value; } void time_pros() { disp[0]=time_data[6]&0x0f; time_data[6]=time_data[6]&0x70; time_data[6]=time_data[6]>>4; disp[1]=time_data[6]&0x0f; disp[2]=time_data[5]&0x0f; time_data[5]=time_data[5]&0x70; time_data[5]=time_data[5]>>4; disp[3]=time_data[5]&0x0f; disp[4]=time_data[4]&0x0f; time_data[4]=time_data[4]&0x70; time_data[4]=time_data[4]>>4; disp[5]=time_data[4]&0x0f; } void set_rtc() { uchar i,j; for(i=0;i<7;i++) { j=time_data[i]/10; time_data[i]=time_data[i]%10; time_data[i]=time_data[i]+j*16; } write_ds1302(0x8e,0x00);//去除写保护 for(i=0;i<7;i++) { write_ds1302(write_data[i],time_data[i]); } write_ds1302(0x8e,0x80);//家写保护 } void read_rtc() { uchar i; for(i=0;i<7;i++) { time_data[i]=read_ds1302(read_add[i]); } time_pros(); } void dellay(uchar x) { uchar i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); } void display() { // wr=0; /* P0=0xff; p25=0; p26=1; p27=1; P0=0x80; p25=1; p26=1; p27=1; P0=table[disp[0]]; dellay(12); */ P0=0xff; p25=0; p26=1; p27=1; P0=0x40; p25=1; p26=1; p27=1; P0=table[disp[1]]; dellay(12); /* P0=0xff; p25=0; p26=1; p27=1; P0=0x20; p25=1; p26=1; p27=1; P0=table[disp[2]]; dellay(12); P0=0xff; p25=0; p26=1; p27=1; P0=0x10; p25=1; p26=1; p27=1; P0=table[disp[3]]; dellay(12); P0=0xff; p25=0; p26=1; p27=1; P0=0x01; p25=1; p26=1; p27=1; P0=table[disp[4]]; dellay(12); P0=0xff; p25=0; p26=1; p27=1; P0=0x02; p25=1; p26=1; p27=1; P0=table[disp[5]]; // dellay(1); */ } void main() { uchar x=0; set_rtc(); while(1) { read_rtc(); dellay(200); dellay(200); // time_pros(); display(); /* disp[0]++; if(disp[0]>9) disp[0]=0; */ } } 为什么秒的个位总是在每显示显示正常数后回立刻显示5呢??秒的十位回在正常显示后立刻显示7? |
|
相关推荐
12个回答
|
|
把串口程序调通,直接把DS1302的时间通过串口送出,看是否有问题,排除到底是时钟芯片的问题,还是显示问题
|
|
|
|
不是现实的问题 我把那个disp[0]=0; 然后的就是零 肯定不是显示的问题,确实是从时钟芯片里读出的数理有5 我开始是按天狼星的程序写的 一模一样 可是我这里就出问题了 |
|
|
|
既然你确定不是显示的问题,那肯定就是读写时序的问题。自己对照着时序图看看。
|
|
|
|
嗯 找到了 sck的时序有些问题 谢谢指点 问题终于解决 |
|
|
|
解决的就好
|
|
|
|
|
|
|
|
|
|
突然发现 秒针会出现85 并且会停留一段时间 在回到0 开始走 并且一切正常一显示完59就立刻显示85并且有停留一段时间 在正常显示。。。请问这是怎么回事啊?? 刚发现的问题 |
|
|
|
突然发现 秒针会出现85 并且会停留一段时间 在回到0 开始走 并且一切正常一显示完59就立刻显示85并且有停留一段时间 在正常显示。。。请问这是怎么回事啊?? 刚发现的问题 |
|
|
|
|
|
这个可能是时间设置的不对,秒,分,时,月,日,年 都是不同的 秒是0-59 分 0-59 时 0-23 月 0- 11 年 就自己定了 再就是如果你是先存储的话 看看读的地址对不对 |
|
|
|
大家多交流,共同进步!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-开发板适配之电阻屏触摸
899 浏览 0 评论
1438 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-开发板适配之I2C-RTC
622 浏览 0 评论
ATK-DLRK3588开发板deepseek-r1-1.5b/7b部署指南
3183 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第五十章 WiFi热点实验
997 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12394 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-24 20:15 , Processed in 0.774026 second(s), Total 97, Slave 79 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191