找回密码
 立即注册

QQ登录

只需一步,快速开始

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

1302高精度读写数据,读写时间 函数(不可调节时钟)

[复制链接]
跳转到指定楼层
楼主
ID:236307 发表于 2017-9-28 13:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
全部资料下载地址:
1302高精度不可调节时钟.zip (40.5 KB, 下载次数: 8)



  1. 2017年9月7日
  2. 21:07

  3. //DS1302写入数据
  4. void writebety_ds(uchar dat)
  5. {
  6.         uchar i;
  7.         SCLK=0;                                 //初始时钟线置为 0
  8.         delayus(2);
  9.         for(i=0;i<8;i++)                //开始传输8个字节的数据
  10.                 {
  11.                 SDA=dat&0x01;                // 取最低位,注意DS1302的数据和地址都是从最低位开始传输的
  12.                 delayus(2);
  13.                 SCLK=1;                         // 时钟线拉高,制造上升沿,SDA的数据被传输
  14.                 delayus(2);
  15.                 SCLK=0;                        // 时钟线拉低,为下一个上升沿做准备
  16.                 dat>>=1;                // 数据右移一位,准备传输下一位数据
  17.                 }

  18. }
  19. //DS1302读出数据
  20. uchar readbety_ds()
  21. {
  22.                 uchar i,dat;
  23.                 delayus(2);
  24.                 for(i=0;i<8;i++)
  25.                 {
  26.                 dat>>=1;                // 要返回的数据右移一位
  27.                 if(SDA==1)                // 当数据线为高时,证明该位数据为 1
  28.                 dat|=0x80;                // 要传输数据的当前值置为1
  29.                 SCLK=1;                        //拉高时钟线
  30.                 delayus(2);
  31.                 SCLK=0;                        // 制造下降沿
  32.                 delayus(2);
  33.                 }
  34.                 return dat;                // 返回读取出的数据
  35. }

  36. //DS1302写入单个时间

  37. void dswrite_data(uchar add,uchar dat)
  38.           {
  39.          
  40.                   RST=0;                         // 初始  CE  线置为 0
  41.                 SCLK=0;                        // 初始时钟线置为 0
  42.                 RST=1;                        // 初始  CE  置为 1  ,传输开始
  43.                 writebety_ds(add);  
  44.                 writebety_ds(dat);         // 写入要修改的时间,日期
  45.                 SCLK=1;            // 时钟线拉高
  46.                 RST=0;   //
  47.                 }

  48. //DS1302读出单个时间
  49. uchar        dsread_data(uchar add)
  50.       {

  51.                 uchar temp_date;
  52.                 RST=0;                // 初始  CE  线置为 0 0 0 0
  53.                 SCLK=0;                // 初始时钟线置为 0 0 0 0
  54.                 RST=1;                // 初始  CE  置为 1 1 1 1 ,传输开始
  55.                 writebety_ds(add);                // 传输命令字,要读取的时间 日历地址
  56.                 temp_date=readbety_ds();                // 读取要得到的时间/ / / / 日期
  57.                 SCLK=1;                // 时钟线拉高
  58.                 RST=0;                // 读取结束, CE 置为 0 0 0 0 ,结束数据的传输
  59.                 return temp_date;      //返回得到的时间/ / / /
  60.            
  61.          
  62.   }  
复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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