找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机开发板中如何用DS1302实现精准时钟

[复制链接]
跳转到指定楼层
楼主
ID:548414 发表于 2019-5-27 15:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit T_CLK=P1^3;
sbit T_IO=P1^4;
sbit T_RST=P1^2;
sbit RS=P1^7;
sbit RW=P1^6;
sbit EN=P1^5;
sbit ACC7=ACC^7;
sbit  ACC0=ACC^0;
uchar datechar[]={"DATA:"};
uchar timechar[]={"TIME:"};
uchar datebuffer[10]={0x32,0x30,0,0,0x2d,0,0,0x2d,0,0};
uchar timebuffer[8]={0,0,0x3a,0,0,0x3a,0,0};
uchar weekbuffer={0x3a};


void writeb(uchar ucda)
{
        uchar i;
        ACC=ucda;
        for(i=8;i>0;i--)
        {
            T_IO=ACC0;
                T_CLK=1;
                T_CLK=0;
                ACC>>1;
                }
}


uchar readb()
{
   uchar i;
   for(i=8;i>0;i--)
   {
      ACC=ACC>>1;
          ACC7=T_IO;T_CLK=1;T_CLK=0;
          }
          return(ACC);
}


void v_w1302(uchar ucaddr,uchar ucda)
{
   T_RST=0;
   T_CLK=0;
   _nop_();
   _nop_();
   T_RST=1;
   _nop_();
   _nop_();
   writeb(ucaddr);
   writeb(ucda);
   T_CLK=1;
   T_RST=0;
   }


uchar uc_r1302(uchar ucaddr)
{
   uchar ucda=0;
   T_RST=0;T_CLK=0;
   T_RST=1;
   writeb(ucaddr);
   ucda=readb();
   T_CLK=1;T_RST=0;
   return(ucda);
   }


void fbuzy()
{
   P2=0xff;
   RS=0;
   RW=1;
   EN=1;
   EN=0;
   while((P2&0x80))
   {
     EN=0;
         EN=1;
         }
}


void wc51r(uchar j)
{
   fbuzy();
   EN=0;
   RS=0;
   RW=0;
   EN=1;
   P2=j;
   EN=0;}


void wc51ddr(uchar j)
{
    fbuzy();
        EN=0;
        RS=1;
        RW=0;
        EN=1;
        P2=j;
        EN=0;
        }
       

void init()
{
    wc51r(0x01);
        wc51r(0x38);
        wc51r(0x0c);
        wc51r(0x06);
}


void delay(uint i)
{
    uint y,j;
        for(j=0;j<i;j++){
        for(y=0;y<0xff;y++){;}
        }
}
void main()
{

  uchar i;
  uchar data temp;
  SP=0x50;
  delay(10);
  init();
  wc51r(0x80);
  for(i=0;i<5;i++)
  wc51ddr(datechar[i]);
  wc51r(0xc0);
  for(i=0;i<5;i++)
  wc51ddr(timechar[i]);
  wc51r(0xc0);
  v_w1302(0x8e,0);
  v_w1302(0x8c,0x19);         
  v_w1302(0x8a,0x06);
  v_w1302(0x88,0x05);
  v_w1302(0x86,0x21);
  v_w1302(0x84,0x21);
  v_w1302(0x82,0x00);
  v_w1302(0x80,0x00);
  v_w1302(0x8e,0x00);
  while(1)
  {
     temp=uc_r1302(0x8d);
         datebuffer[2]=0x30+temp/16;
         datebuffer[3]=0x30+temp%16;
       
         
            temp=uc_r1302(0x89);
         datebuffer[5]=0x30+temp/16;
         datebuffer[6]=0x30+temp%16;
            temp=uc_r1302(0x87);
         datebuffer[8]=0x30+temp/16;
         datebuffer[9]=0x30+temp%16;
             temp=uc_r1302(0x85);
           temp=temp&0x7f;
           timebuffer[0]=0x30+temp/16;
           timebuffer[1]=0x30+temp%16;
           temp=uc_r1302(0x83);
          
           timebuffer[3]=0x30+temp/16;
           timebuffer[4]=0x30+temp%16;
       temp=uc_r1302(0x81);
           temp=temp&0x7f;
           timebuffer[6]=0x30+temp/16;
           timebuffer[7]=0x30+temp%16;
           wc51r(0x86);
           for(i=0;i<10;i++)
           wc51ddr(datebuffer[i]);
           wc51r(0xc6);
           for(i=0;i<8;i++)
           wc51ddr(timebuffer[i]);
           wc51r(0x20);         }
哪里出错了??
       


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

使用道具 举报

沙发
ID:155507 发表于 2019-5-27 23:53 | 只看该作者
给你改了,对比一下就知道哪里错了。


  1. #include<reg51.h>
  2. #include<absacc.h>
  3. #include<intrins.h>

  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. sbit T_CLK=P1^3;
  7. sbit T_IO=P1^4;
  8. sbit T_RST=P1^2;
  9. sbit RS=P1^7;
  10. sbit RW=P1^6;
  11. sbit EN=P1^5;
  12. sbit ACC7=ACC^7;
  13. sbit  ACC0=ACC^0;
  14. uchar datechar[]={"DATA:"};
  15. uchar timechar[]={"TIME:"};
  16. uchar datebuffer[10]={0x32,0x30,0,0,0x2d,0,0,0x2d,0,0};
  17. uchar timebuffer[8]={0,0,0x3a,0,0,0x3a,0,0};
  18. uchar weekbuffer={0x3a};


  19. void writeb(uchar ucda)
  20. {
  21.         uchar i;
  22.         ACC=ucda;
  23.         for(i=8;i>0;i--)
  24.         {
  25.                 T_IO=ACC0;
  26.                 T_CLK=1;
  27.                 T_CLK=0;
  28.                 ACC=ACC>>1;  //<--------出错
  29.         }
  30. }


  31. uchar readb()
  32. {
  33.         uchar i;
  34.         for(i=8;i>0;i--)
  35.         {
  36.                 ACC=ACC>>1;
  37.                 ACC7=T_IO;T_CLK=1;T_CLK=0;
  38.         }
  39.         return(ACC);
  40. }


  41. void v_w1302(uchar ucaddr,uchar ucda)
  42. {
  43.         T_RST=0;
  44.         T_CLK=0;
  45.         _nop_();
  46.         _nop_();
  47.         T_RST=1;
  48.         _nop_();
  49.         _nop_();
  50.         writeb(ucaddr);
  51.         writeb(ucda);
  52.         T_CLK=1;
  53.         T_RST=0;
  54. }


  55. uchar uc_r1302(uchar ucaddr)
  56. {
  57.         uchar ucda=0;
  58.         T_RST=0;T_CLK=0;
  59.         T_RST=1;
  60.         writeb(ucaddr);
  61.         ucda=readb();
  62.         T_CLK=1;T_RST=0;
  63.         return(ucda);
  64. }


  65. void fbuzy()
  66. {
  67.         //P2=0xff;
  68.         RS=0;
  69.         RW=1;
  70.         EN=1;
  71.         EN=0;
  72.         while((P2&0x80))
  73.         {
  74.                 EN=0;
  75.                 EN=1;
  76.         }
  77. }


  78. void wc51r(uchar j)
  79. {
  80.         fbuzy();
  81.         EN=0;
  82.         RS=0;
  83.         RW=0;
  84.         EN=1;
  85.         P2=j;
  86.         EN=0;
  87. }


  88. void wc51ddr(uchar j)
  89. {
  90.         fbuzy();
  91.         EN=0;
  92.         RS=1;
  93.         RW=0;
  94.         EN=1;
  95.         P2=j;
  96.         EN=0;
  97. }


  98. void init()
  99. {
  100.         wc51r(0x01);
  101.         wc51r(0x38);
  102.         wc51r(0x0c);
  103.         wc51r(0x06);
  104. }


  105. void delay(uint i)
  106. {
  107.         uint y,j;
  108.         for(j=0;j<i;j++){
  109.                 for(y=0;y<0xff;y++){;}
  110.         }
  111. }

  112. void main()
  113. {

  114.         uchar i;
  115.         uchar data temp;
  116.         SP=0x50;
  117.         delay(10);
  118.         init();
  119.         wc51r(0x80);
  120.         for(i=0;i<5;i++)
  121.         wc51ddr(datechar[i]);
  122.         wc51r(0xc0);
  123.         for(i=0;i<5;i++)
  124.         wc51ddr(timechar[i]);
  125.         wc51r(0xc0);
  126.         v_w1302(0x8e,0);
  127.         v_w1302(0x8c,0x19);         
  128.         v_w1302(0x8a,0x06);
  129.         v_w1302(0x88,0x05);
  130.         v_w1302(0x86,0x21);
  131.         v_w1302(0x84,0x21);
  132.         v_w1302(0x82,0x00);
  133.         v_w1302(0x80,0x00);
  134.         v_w1302(0x8e,0x00);
  135.         while(1)
  136.         {
  137.                 temp=uc_r1302(0x8d);
  138.                 datebuffer[2]=0x30+temp/16;
  139.                 datebuffer[3]=0x30+temp%16;
  140.                
  141.                
  142.                 temp=uc_r1302(0x89);
  143.                 datebuffer[5]=0x30+temp/16;
  144.                 datebuffer[6]=0x30+temp%16;
  145.                 temp=uc_r1302(0x87);
  146.                 datebuffer[8]=0x30+temp/16;
  147.                 datebuffer[9]=0x30+temp%16;
  148.                 temp=uc_r1302(0x85);
  149.                 temp=temp&0x7f;
  150.                 timebuffer[0]=0x30+temp/16;
  151.                 timebuffer[1]=0x30+temp%16;
  152.                 temp=uc_r1302(0x83);
  153.                
  154.                 timebuffer[3]=0x30+temp/16;
  155.                 timebuffer[4]=0x30+temp%16;
  156.                 temp=uc_r1302(0x81);
  157.                 temp=temp&0x7f;
  158.                 timebuffer[6]=0x30+temp/16;
  159.                 timebuffer[7]=0x30+temp%16;
  160.                 wc51r(0x86);
  161.                 for(i=0;i<10;i++)
  162.                 wc51ddr(datebuffer[i]);
  163.                 wc51r(0xc6);
  164.                 for(i=0;i<8;i++)
  165.                 wc51ddr(timebuffer[i]);
  166.                 //wc51r(0x20);   -----出错
  167.         }
  168. }
复制代码
回复

使用道具 举报

板凳
ID:548414 发表于 2019-5-28 08:57 | 只看该作者
angmall 发表于 2019-5-27 23:53
给你改了,对比一下就知道哪里错了。

感谢大佬
回复

使用道具 举报

地板
ID:241273 发表于 2019-5-28 09:55 | 只看该作者
主要看datasheet
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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