搜索
bottom↓
回复: 35

51驱动DS1302_自己写的代码_献丑了

[复制链接]

出0入0汤圆

发表于 2014-3-8 21:21:23 | 显示全部楼层 |阅读模式
我上大四了,现在在北京某公司实习,硬件工程,
代码拖拖拉拉写了两个月的时间,年前考试之前就开始写了,由于考试和找工作的事,耽搁了 ,年后,实习,发现,软件搞好很有必要,所以我以后一码一字都要自己写,以后才能成长
所以又把它拿起来了。今天终于成功了。
亲测能用。里面内嵌了串口调试程序,也就是说时间不仅通过数码管显示,还会把读取出的时分秒发到PC上去,方便调试!
测试时有一个小插曲:就是DS1302运行起来后,走时不准,不像网上说的那个走时不准还比较靠谱的,一分钟差几秒,我这个是实际走十多秒,它才走一秒。用开发板带的例程烧进去也是很不准。大概实际走五秒才走一秒
最后我把纽扣电池卸下了,重新安装回去就好了。解决问题!


献丑了,献给后来人







  1. /*
  2. DS1302时钟芯片数码管显示
  3. zhanglei
  4. 2014年1月28日7:40:14







  5. */
  6. #include <reg52.h>
  7. #include <intrins.h>

  8. #define  SECR  0x81 //对秒寄存器进行读操作
  9. #define  SECW  0x80 //对秒寄存器进行写操作
  10. #define  MINW  0x82 //对分寄存器进行写操作
  11. #define  MINR  0x83 //对分寄存器进行读操作
  12. #define  HOUW  0x84 //对小时寄存器进行写操作
  13. #define  HOUR  0x85 //对小时寄存器进行读操作



  14. unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
  15. //数码管显示0~9的段码表
  16. unsigned char code sheet[1]={0x00};
  17. unsigned char h,m,s;
  18. sbit SCLK=P1^0;
  19. sbit IO=P1^1;
  20. sbit RST=P1^2;
  21. sbit ACC7=ACC^7;
  22. //显示延时函数
  23. void delayms(unsigned char i)
  24. {
  25.     unsigned char j;
  26.     for(;i>0;i--)
  27.         {
  28.           for(j=0;j<200;j++);
  29.         }




  30. }
  31. //函数功能:通过串口中断测试读取出来的时,分,秒
  32. //入口参数:读取出来的数据m,h,s
  33. //返回值:无
  34. void Com_Init()
  35. {
  36.    SCON= 0x40;                //串口方式1
  37.    PCON=0;                     //SMOD=0
  38.    REN=1;                     //允许接收
  39.    TMOD= 0x20;                //定时器1定时方式2
  40.    TH1= 0xfd;                //11.0592M 9600波特率
  41.    TL1= 0xfd;
  42.    TR1= 1;                  //启动定时器   
  43. }


  44. //函数功能:SPI总线字节写函数
  45. //入口参数:寄存器地址addr,写入寄存器的数据dat
  46. //返回值:无

  47. void writedata(unsigned char addr,unsigned char dat)
  48. {
  49.    unsigned char i;
  50.    unsigned char j;
  51.      RST=0;
  52.          SCLK=0;
  53.          RST=1;
  54.          for(i=0;i<8;i++)
  55.          {
  56.                 SCLK=0;
  57.         IO=(bit)(addr&0x01);
  58.                 addr>>=1;
  59.                 SCLK=1;
  60.                 _nop_();
  61.                 _nop_();
  62.           }
  63.           for(j=0;j<8;j++)
  64.           {
  65.             SCLK=0;
  66.                 IO=(bit)(dat&0x01);
  67.                 dat>>=1;
  68.                 SCLK=1;
  69.                 _nop_();
  70.                 _nop_();
  71.           }
  72.           RST=0;
  73.           SCLK=1;
  74. }

  75. //SPI总线读取数据函数
  76. //入口参数:addr 存储数据的地址
  77. //返回值:返回SPI总线上的数据

  78. unsigned char readdata(unsigned char addr)
  79. {
  80.    unsigned char i;
  81.    unsigned char date;
  82.    RST=0;
  83.    SCLK=0;
  84.    IO=0;
  85.    RST=1;
  86.          for(i=0;i<8;i++)
  87.          {
  88.             SCLK=0;
  89.                 IO=(bit)(addr&0x01);
  90.                 addr>>=1;
  91.                 SCLK=1;
  92.                 _nop_();
  93.                 _nop_();
  94.           }

  95.    for(i=0;i<8;i++)
  96.    {
  97.     ACC7=IO;//数据是从低位开始读取的
  98.     SCLK=1;       
  99.         SCLK=0;
  100.     ACC>>=1;
  101.    }
  102.    SCLK=1;
  103.    RST=0;
  104.    date=ACC;
  105.    return date;
  106. }



  107. //函数功能:读取小时,分,秒数据并显示
  108. //入口参数:无
  109. //返回值:无
  110. void ledshow()
  111. {
  112.    
  113.    h=readdata(HOUR);//读取小时  
  114.    m=readdata(MINR);//读取分钟
  115.    s=readdata(SECR);//读取秒
  116.    //打印时,分,秒
  117.    SBUF=h;
  118.    while(TI==0);
  119.    TI=0;
  120.    SBUF=m;
  121.    while(TI==0);
  122.    TI=0;
  123.    SBUF=s;
  124.    while(TI==0);
  125.    TI=0;
  126.    SBUF=sheet[0];
  127.    while(TI==0);
  128.    TI=0;


  129. /***

  130. *******zhanglei  test ledshow
  131. //   h=0x20;
  132. //   m=0x24;
  133. //   s=0x22;
  134. ******/
  135.    P2=0xfd;
  136.    P0=tab[(h&0x0f)];
  137.    delayms(5);
  138.    P2=0xfe;
  139.    P0=tab[((h>>4)&0x07)];
  140.    delayms(5);
  141.    P2=0xf7;
  142.    P0=tab[(m&0x0f)];
  143.    delayms(5);
  144.    P2=0xfb;
  145.    P0=tab[((m>>4)&0x07)];
  146.    delayms(5);
  147.    P2=0xdf;
  148.    P0=tab[(s&0x0f)];
  149.    delayms(5);
  150.    P2=0xef;
  151.    P0=tab[((s>>4)&0x07)];
  152.    delayms(5);
  153.    
  154. }



  155. void main(void)
  156. {
  157.      Com_Init();
  158.          writedata(0x8e,0x00);//对0x8e寄存器操作,去掉写保护,对最高位WP写0        ·
  159.          //对DS1302写入时间 20:24:22
  160.          writedata(HOUW,0x20);//设置小时,模式24h制,
  161.          writedata(MINW,0x58);//设置分钟
  162.          writedata(SECW,0x22);//设置秒并且使DS1302开始走时
  163.          writedata(0x8e,0x80);//进行写保护
  164.          while(1)
  165.          {
  166.            delayms(3);
  167.            ledshow();
  168.          }

  169. }






复制代码

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2014-3-8 22:07:57 | 显示全部楼层
写的不错啊!楼主什么专业啊!工作怎么样

出0入0汤圆

发表于 2014-3-8 22:12:42 | 显示全部楼层
赞一个                       

出0入0汤圆

发表于 2014-3-8 22:18:28 | 显示全部楼层
挺不错的 顶一个

出0入0汤圆

发表于 2014-3-8 22:35:22 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2014-3-8 22:36:02 | 显示全部楼层
不知为什么,我写的DS1302驱动,读写函数,写没有问题,但读就有点问题,读到日期和时间。但读不到RAM的数据,奇怪!

出0入0汤圆

发表于 2014-3-8 22:38:38 | 显示全部楼层
楼主代码写的很工整呀

出0入0汤圆

发表于 2014-3-8 22:58:34 | 显示全部楼层
楼主考虑把程序写成模块分成.c.h吗?

出0入0汤圆

发表于 2014-3-8 23:59:05 | 显示全部楼层
写得很工整,收下了,研究研究

出0入0汤圆

 楼主| 发表于 2014-3-9 08:33:17 | 显示全部楼层
eva015401 发表于 2014-3-8 22:58
楼主考虑把程序写成模块分成.c.h吗?

就一个模块就不封库了

出0入0汤圆

 楼主| 发表于 2014-3-9 08:41:49 | 显示全部楼层
downtoearth 发表于 2014-3-8 22:36
不知为什么,我写的DS1302驱动,读写函数,写没有问题,但读就有点问题,读到日期和时间。但读不到RAM的数 ...

没研究过啊   没读过RAM  相当于eeprom了  

出0入0汤圆

 楼主| 发表于 2014-3-9 08:42:52 | 显示全部楼层
曾家0762 发表于 2014-3-8 22:07
写的不错啊!楼主什么专业啊!工作怎么样

电子信息工程     今天还要去加班  唉

出0入0汤圆

发表于 2014-3-10 15:17:01 | 显示全部楼层
写得不错,不过谁告诉你DS1302是SPI接口的?

出0入0汤圆

 楼主| 发表于 2014-3-10 19:35:07 | 显示全部楼层
prince2010 发表于 2014-3-10 15:17
写得不错,不过谁告诉你DS1302是SPI接口的?

是啊   是SPI的  只能说是类spi

出0入0汤圆

发表于 2014-3-10 20:42:08 | 显示全部楼层
多谢楼主分享、

出0入0汤圆

 楼主| 发表于 2014-3-10 22:23:17 | 显示全部楼层
ciximg 发表于 2014-3-10 20:42
多谢楼主分享、

我这个是32768的晶振不行,有点脱焊了

出0入0汤圆

发表于 2014-3-11 14:12:25 | 显示全部楼层
感谢楼主亲情奉献,后来人表示受益了

出0入0汤圆

发表于 2014-11-28 14:30:38 | 显示全部楼层
谢谢楼主正在学习中!

出0入0汤圆

发表于 2014-11-28 14:39:37 | 显示全部楼层
感谢分享!

出0入0汤圆

发表于 2014-11-29 11:21:16 | 显示全部楼层
感觉1302这个芯片不怎么好,不同的有时差别好大,之前用过一个半坏不坏的

出0入0汤圆

 楼主| 发表于 2014-11-29 14:32:45 | 显示全部楼层
Ray______ 发表于 2014-11-29 11:21
感觉1302这个芯片不怎么好,不同的有时差别好大,之前用过一个半坏不坏的

是你买的那写不好,不要那局部否定全部

出0入0汤圆

发表于 2014-11-29 18:28:13 | 显示全部楼层
磊磊映画 发表于 2014-11-29 14:32
是你买的那写不好,不要那局部否定全部

嗯,应该买的便宜货~~~

出0入0汤圆

发表于 2014-11-29 22:22:14 | 显示全部楼层
记录,以后有用

出0入0汤圆

发表于 2014-12-8 14:26:40 | 显示全部楼层
还是写的很好的

出0入0汤圆

 楼主| 发表于 2014-12-8 14:38:50 | 显示全部楼层

谢谢,我现在看感觉已经很简单了

出0入0汤圆

发表于 2014-12-8 14:53:50 | 显示全部楼层
1302  BCD码值转换我不知道怎么写?请指教,想按照自己的思路写

出0入0汤圆

发表于 2014-12-8 15:16:46 | 显示全部楼层
楼主代码写的很工整呀

出0入0汤圆

 楼主| 发表于 2014-12-8 15:57:27 | 显示全部楼层
酷爱diy 发表于 2014-12-8 14:53
1302  BCD码值转换我不知道怎么写?请指教,想按照自己的思路写

我记得是不用转换,你好好看下芯片的手册  

出0入0汤圆

发表于 2014-12-9 11:24:17 | 显示全部楼层
磊磊映画 发表于 2014-12-8 14:38
谢谢,我现在看感觉已经很简单了

搞懂了芯片之后 再来看 是简单很多了

出0入0汤圆

发表于 2015-2-5 20:19:05 | 显示全部楼层
不错,就是DS1302对晶振的要高了。想准确的话。

出0入0汤圆

发表于 2015-2-5 22:18:41 | 显示全部楼层
写的不错,向你学习.

出0入0汤圆

发表于 2015-9-15 14:31:12 | 显示全部楼层
正在学习,制作中...  谢谢

出0入0汤圆

 楼主| 发表于 2015-9-15 14:44:17 | 显示全部楼层
weimas 发表于 2015-9-15 14:31
正在学习,制作中...  谢谢

最近在用时钟芯片RX-8025   IIC接口的要比DS1302精度高很多,一片8块

出0入0汤圆

发表于 2015-9-15 14:49:09 | 显示全部楼层
磊磊映画 发表于 2015-9-15 14:44
最近在用时钟芯片RX-8025   IIC接口的要比DS1302精度高很多,一片8块

有c51 驱动的 RX-8025 例程么。。。最近发现个 R 9824 和8025很像,却怎么也找不到资料,估计是变种定制型号。。。

出0入0汤圆

 楼主| 发表于 2015-9-15 16:40:05 | 显示全部楼层
wkman 发表于 2015-9-15 14:49
有c51 驱动的 RX-8025 例程么。。。最近发现个 R 9824 和8025很像,却怎么也找不到资料,估计是变种定制 ...

stm32的   网上能搜到的

出0入0汤圆

发表于 2015-9-15 17:21:13 | 显示全部楼层
磊磊映画 发表于 2015-9-15 14:44
最近在用时钟芯片RX-8025   IIC接口的要比DS1302精度高很多,一片8块

我是手头上刚好有这个芯片,然后就顺便拿了用了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-6 19:08

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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