DS1302RAM无法写入超过79的数据?!

[复制链接]
2169|9
 楼主| xichandoujigu 发表于 2019-3-1 10:31 | 显示全部楼层 |阅读模式
在调试DS1302的时候发现一个奇怪的问题,不知道解决办法,发帖求助。
在操作DS1302的RAM时,如果输入的数值1-79能正常显示1-79,但是如果输入超过79就不能正常显示,显示结果为X-80,比如
写入80则输出为0,
写入81则输出为1,
写入82则输出为2,
....................
写入99则输出为19,
还请教是什么原因呢?
源代码如下

void main()
{      
    unsigned char x=99;
    Initial_096OLED();
    while(1)
    {
        Write1302 (WRITE_PROTECT,0X00);           //禁止写保护
        Write1302 (0xC2,((x/10)* 16 + x%10));           //将x转换为16进制写入RAM
                Write1302 (WRITE_PROTECT,0x80);          //允许写保护
                OLED_xianshi(Read1302 ( 0xc3)/10,Read1302 ( 0xc3)%10);  //显示
                /*如果x为1-79,能正常显示,但是如果x为80-99则显示结果为x-80,比如x为89,结果为9,x为99结果则为19*/
        }
}


mohanwei 发表于 2019-3-1 10:35 | 显示全部楼层
你琢磨一下你的写入读出两次转换。
 楼主| xichandoujigu 发表于 2019-3-1 11:38 | 显示全部楼层
mohanwei 发表于 2019-3-1 10:35
你琢磨一下你的写入读出两次转换。

转换应该没有问题,不然1-79也不会正常显示呢?
mohanwei 发表于 2019-3-1 12:24 | 显示全部楼层
xichandoujigu 发表于 2019-3-1 11:38
转换应该没有问题,不然1-79也不会正常显示呢?

80,写的时候是128,读出来也是128,但你显示的时候是OLED_xianshi(12,8);
不明白你为啥要这样设计

评论

一眼看出问题了,我还得看半天。。。差距。。  发表于 2019-3-6 10:18

评分

参与人数 1威望 +5 收起 理由
zhuls + 5 很给力!

查看全部评分

zhuls 发表于 2019-3-6 09:57 | 显示全部楼层
本帖最后由 zhuls 于 2019-3-6 10:17 编辑

Write1302 (0xC2,((x/10)* 16 + x%10));           //将x转换为16进制写入RAM//我总觉得的这里有猫腻呢?
按这个公式,你10进制写入后的数值,10进制的99就是(9*16+9)=153,变成了16进制的0x99
读出的16制0x99要变成10进制的99,应该 是0x99/16+0x99%16才对啊,按你的Read1302 ( 0xc3)/10,Read1302 ( 0xc3)%10公式,数据值是15,3
我没有算错吧?
你的OLED_xianshi(x,x)应该是只能显示2个数字,那么3个数字你该如何显示 出来呢?
OLED_xianshi(Read1302 ( 0xc3)/10,Read1302 ( 0xc3)%10);//这里是要读2次1302的感觉。



零三翟邢止胃 发表于 2019-3-14 12:49 | 显示全部楼层
不错的啊!!!!!
saodisenghezai 发表于 2019-12-13 15:18 来自手机 | 显示全部楼层
xichandoujigu 发表于 2019-3-1 11:38
转换应该没有问题,不然1-79也不会正常显示呢?

解决没我也遇到同样问题
saodisenghezai 发表于 2019-12-14 23:26 来自手机 | 显示全部楼层
1302读写程序有问题,换
li1874 发表于 2019-12-22 17:35 | 显示全部楼层

1302读写程序有问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

96

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部