lkc8210 发表于 2023-2-23 09:11 ![]() 添加Send_Nack()后,读取正常了,数码管位码顺序也对了 void Send_Nack() // { sda=1; delay_5us();//5us延时 scl=1; delay_5us();//5us延时 scl=0; delay_5us();//5us延时 } uchar read_1307(uchar slave_write_address,uchar byte_address,uchar slave_read_address)//读一个数据 { uchar temp,temp1,i,ii,x,data_data; star_1307();//开始 for(ii=0;ii<3;ii++)//根据 24CXX文档资料,和时序图,按顺序送:器件写地址,字节地址,器件读地址 { if(ii==0) { temp=slave_write_address;//送 器件写地址 temp1=slave_write_address; } else if(ii==1) { temp=byte_address;//送 字节地址 temp1=byte_address; } else if(ii==2) { star_1307();//开始 temp=slave_read_address;//送 器件读地址 temp1=slave_read_address; } for(i=0;i<8;i++)//开始读数据 { scl=0; delay_5us();//5us延时 temp=temp1; temp=temp&0x80;// 相 与 后,把不相关的位清零 if(temp==0x80)//根据前面 相 与 后,判断 temp是否等于0x80,是则该位为 1 sda=1; else sda=0; delay_5us();//5us延时 scl=1; delay_5us();//5us延时 scl=0; delay_5us();//5us延时 temp1=temp1<<1;//向左移出1位 } sda=1; delay_5us();//5us延时 scl=1; delay_5us();//5us延时 ack_1307();//应答 } for(x=0;x<8;x++) { data_data=data_data<<1;//向左移入1位 sda=1; delay_5us();//5us延时 scl=0; delay_5us();//5us延时 scl=1; delay_5us();//5us延时 if(sda==1)//判断 数据线是否是高电平 data_data|=0x01;//把读到的数据 或 0X01 } ack_1307();//应答 Send_Nack(); stop_1307();//停止 return data_data;//返回读到的数据 } |
怎么这不按顺序?![]() 读完没有NACK ![]() ![]() |
把 读日月年星期都屏蔽掉显示是正常的,这我知道的,但为什么读日月年后,小时位就被被其他的占了,我想知道是什么原因,大师们有知道的吗? |
这样改就可以 |
51hei截图20230222112705.png (36.9 KB, 下载次数: 101)
![]() ![]() |
实测注释或删除void read_time_1307()里这两句就正常,原因不明。 Date=read_1307(0xd0,0x04,0xd1); //读日 Date=BCD_to_Decimal(Date);//BCD码转换成十进制 |
lkc8210 发表于 2023-2-21 18:20 先不管消影,小时位显示异常是什么原因呢?请大师指点一下 |
消影消了个寂 正确的消影顺序
|