找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 995|回复: 0
打印 上一主题 下一主题
收起左侧

求大神指点,帮忙看下那里出错了,为什么1302读回的数据不对

[复制链接]
跳转到指定楼层
楼主
/*******************DS1302功能区****************/
void DS1302_write_byte(uchar byte)                                          //DS1302写入字节
{          uchar i;
          for(i=0;i<8;i++)
          {         DS1302_SCLK = 0;
                 DS1302_DATA=byte&0x01;                                                      //按位与
                 DS1302_SCLK = 1;
                 delay_us(2);
                 byte>>=1;                                                                              //右移1位
          }
}

void DS1302_write_data(uchar command,uchar DATA)                  //DS1302写入指令和数据
{          DS1302_REST = 0;
      DS1302_SCLK = 0;
          delay_us(2);
          DS1302_REST = 1;
          DS1302_write_byte(command);
          DS1302_write_byte(DATA);
          DS1302_REST = 0;
}

uchar DS1302_read(uchar command)                                                 //DS1302读数据
{          uchar i,dat;
      DS1302_REST = 0;
      DS1302_SCLK = 0;
          delay_us(2);
          DS1302_REST = 1;
          DS1302_write_byte(command);

          for(i=0;i<8;i++)
          {         dat>>=1;                                                                                 //右移必需放在最前面,否则会在数据接收完成后多移一次
             if(DS1302_DATA==1)         dat|=0x80;
                 DS1302_SCLK = 0;                                          
                 delay_us(2);
                 DS1302_SCLK = 1;
                 delay_us(2);
          }
          DS1302_REST = 0;
          DS1302_SCLK = 1;
          return dat;
}                                            

void DS1302_read_second(void)                                                        //读回的数据转10进制
{         uchar temp;
         temp=DS1302_read(0x81);
         second=(temp/16*10)+(temp%16);                                 //second 定义的全局变量
}

void LCD1602_time_display(void)                                                          //开启计时器后时间显示
{            
          LCD1602_write_word(13,1,shuzi[second/10]);                  //更新秒
          LCD1602_write_word(14,1,shuzi[second%10]);
          LCD1602_write_word(10,1,shuzi[minute/10]);                  //更新分钟
          LCD1602_write_word(11,1,shuzi[minute%10]);
          LCD1602_write_word(7,1,shuzi[hour/10]);                          //更新小时
          LCD1602_write_word(8,1,shuzi[hour%10]);                  
}

void main(void)
{//         DS1302_stop_work();
     LCD1602_init();
     delay_ms(5);
         LCD1602_kaiji_display();

         DS1302_read_second();                                             //读秒

         while(1)
         {        
            LCD1602_time_display();                                      //显示回读的时间
                LCD1602_date_display();
                Key_manual();         
         }
}





1302.png (55.84 KB, 下载次数: 64)

1302.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表