打印

时钟芯片DS1302年参数调整遇到的问题

[复制链接]
2412|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
appleye|  楼主 | 2009-4-2 21:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
appleye|  楼主 | 2009-4-2 21:48 | 只看该作者

时钟芯片DS1302年参数调整遇到的问题

请大伙帮忙看下,下面的这段程序问题出现在哪,程序要实现DS1302时间参数的修改功能,但在年参数调整时就不正确了
现象如下:
在加一功能时,从初始年逐渐加到80,再加一就是1了,接着又是逐渐加到80,如此循环
在减一功能时,从初始年逐渐减到0,再减一就是99了,再减一是18,然后是逐渐减到0,如此循环
现在该对其中几个变量是用unsigned char 定义或是signed char 定义,我还不太明白,望各位走过、路过的指点下

谢谢先

void Set_time(unsigned char set,unsigned char updown)

    unsigned char address;
    signed char item_e,item,max,mini;    

    if(set==1)  {address=0x8c; max=99;mini=0;}   //年1
    if(set==2)  {address=0x88; max=12;mini=1;}    //月2
    if(set==3)  {address=0x86; max=31;mini=1;}    //日3
    if(set==4)  {address=0x84; max=23;mini=0;}    //小时4
    if(set==5)  {address=0x82; max=59;mini=0;}    //分钟5
    if(set==6)  {address=0x80; max=59;mini=0;}    //秒6
    if(set==7)  {address=0x8a; max=7; mini=1;}     //星期7
          
    item_e=(Read_1302(address+1));                //读取1302某地址上的数值转换成10进制赋给item 
    item=((item_e&0x70)>>4)*10 + (item_e&0x0F);     
    if(updown==1)  
    {
        item++;
        if(item>max)
        item=mini;
    }
        
    if(updown==0)  
    {
        item--;
        if(item<mini)
        item=max;
    }    
     
    item_e=(item/10)*16+item%10 ;     //10进制 to 16进制       
    Write_1302(0x8e,0x00);        //允许写操作
    Write_1302(address,item_e);    //写修改后的数据到1302
    Write_1302(0x8e,0x80);        //写保护,禁止写操作  
}

使用特权

评论回复
板凳
songbangyan| | 2009-4-3 10:39 | 只看该作者

向1302写入的是bcd码

使用特权

评论回复
地板
appleye|  楼主 | 2009-4-3 13:10 | 只看该作者

时钟芯片DS1302年参数调整遇到的问题

楼上这位仁兄,你说的是我现在的item_e是BCD码,是吗?
是不是在这个基础上把item_e转换到16进制再写入就行了呢?

使用特权

评论回复
5
leolle| | 2009-4-3 16:52 | 只看该作者

如果想写18点,你得写入0X18

使用特权

评论回复
6
appleye|  楼主 | 2009-4-3 19:53 | 只看该作者

时钟芯片DS1302年参数调整遇到的问题

谢谢5楼,leolle说的这点我知道,写入1302的数要16进制的,但我这现在是除了年参数不正确修改外,其它的都可以正常修改的啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

27

帖子

1

粉丝