|
1、贴上全部程序让大家协助调试; 2、本站找类似的程序读通后修改; 你粘图片是让大家按图录入后猜电路然后再找问题 ? |
| 而且这个屏幕的第二行坏掉了显示不了任何东西 |
| DS1302_WriteByte,写入了2次command,没有写入data |
whwteng 发表于 2024-12-21 13:28 手边没有示波器 ![]() |
|
/***发送一个字节***/ void 1302Write(unsigned char dat) { unsigned char mask; for(mask= 0x01;mask!=0;mask <<= 1) //低位在前,逐位移出 { if((mask & dat) != 0) //首先输出该位数据 DS1302_IO = 1; else DS1302_IO = 0; DS1302_CK = 1; //然后拉高时钟 DS1302_CK = 0; //在拉低时钟,完成一个位的操作 } DS1302_IO = 1; //最后确保释放IO引脚 } /***读取一个字节***/ unsigned char 1302Read() { unsigned char mask; unsigned char dat = 0; for(mask = 0x01;mask != 0; mask <<= 1) //低位在前,逐位读取 { if(DS1302_IO != 0) //首先读取此时IO引脚,并设置dat中的对应位 { dat |= mask; } DS1302_CK = 1; //然后拉高时钟 DS1302_CK = 0; //再拉低时钟,完成一个位的操作 } return dat; //最后返回读到的字节数据 } 读出1302数据DATA,LCD1602 加个‘0’ , 数码管不用加‘0’ buf [0]=(DATA >> 4)+‘0’ ; 高 buf[1]=(DATA & 0X0F)+‘0’ ;低 |
| 先用示波器或者逻辑分析仪抓通信时序是否正常,再一步一步根据通信时序排查硬件和程序 |
|
试试把数据输出代码改为 if(Command & (0x01<<i)) DS1302_IO = 1; else DS1302_IO = 0; |