找回密码
 立即注册

QQ登录

只需一步,快速开始

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

ds1302使用 单片机加八位数码管显示

[复制链接]
跳转到指定楼层
楼主


  1. //主函数
  2. #include <ds1302.h>
  3. u8 code smg[10]=
  4. {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  5. u8 dat2[8];
  6. void delay(u16 aaa)
  7. {
  8.          while(aaa--);
  9. }
  10. void dat2fp();
  11. void xs();
  12. void main()
  13. {        
  14.          writetime();
  15.          while(1)
  16.          { readtime();
  17.            delay(50);
  18.            dat2fp();
  19.            xs();
  20.          }
  21. }
  22. void dat2fp()
  23. {
  24.          
  25.          dat2[0]=smg[time[2]/16];
  26.          dat2[1]=smg[time[2]&0x0f];
  27.          dat2[2]=0x40;
  28.          dat2[3]=smg[time[1]/16];
  29.          dat2[4]=smg[time[1]&0x0f];
  30.          dat2[5]=0x40;
  31.          dat2[6]=smg[time[0]/16];
  32.          dat2[7]=smg[time[0]&0x0f];
  33. }
  34. void xs()
  35. {
  36.         u8 ii;
  37.         for(ii=0;ii<8;ii++)
  38.         {
  39.                 P0=dat2[ii];
  40.                 P1=ii;
  41.                 delay(100);
  42.                 P0=0x00;
  43.         }
  44. }

  45. //ds1302.h
  46. #ifndef _DS1302_H_
  47. #define _DS1302_H_

  48. #include<reg52.h>
  49. #include<intrins.h>

  50. #ifndef u8
  51. #define u8 unsigned char
  52. #endif

  53. #ifndef u16
  54. #define u16 unsigned int
  55. #endif
  56. sbit sclk=P3^6;
  57. sbit dsio=P3^4;
  58. sbit ce=P3^5;

  59. void readtime();
  60. void writetime();
  61. u8 read(u8 dzz);
  62. void write(u8 dz,u8 sj);

  63. extern u8 time[7];
  64. #endif
  65. //ds1302.c
  66. #include<ds1302.h>

  67. u8 code writedz[7]=
  68. {0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};                                        //秒 分 时 日 月 星期 年

  69. u8 code readdz[7]=
  70. {0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
  71. u8 time[7]=
  72. {0x50,0x59,0x92,0x07,0x05,0x05,0x17};                                  //秒 分 时 日 月 星期 年
  73. void write(u8 dz,u8 sj)
  74. {
  75.          u8 a;
  76.          ce=0;
  77.          _nop_();                          //
  78.          sclk=0;
  79.          _nop_();
  80.          ce=1;
  81.          _nop_();
  82.          for(a=0;a<8;a++)
  83.          {
  84.                    dsio=dz&0x01;           //放入最低位
  85.                   dz>>=1;
  86.                   sclk=1;
  87.                   _nop_();
  88.                   sclk=0;
  89.                   _nop_();

  90.          }
  91.           for(a=0;a<8;a++)
  92.          {
  93.                    dsio=sj&0x01;           //放入最低位
  94.                   sj>>=1;
  95.                   sclk=1;
  96.                   _nop_();
  97.                   sclk=0;
  98.                   _nop_();

  99.          }
  100.          ce=0;
  101.          _nop_();
  102. }

  103. u8 read(u8 dzz)
  104. {
  105.          u8  aa,dd,dat1;
  106.          ce=0;
  107.          _nop_();                   //
  108.          sclk=0;
  109.          _nop_();
  110.          ce=1;
  111.          _nop_();
  112.          for(aa=0;aa<8;aa++)
  113.          {
  114.                    dsio=dzz&0x01;           //放入最低位
  115.                   dzz>>=1;
  116.                   sclk=1;
  117.                   _nop_();
  118.                   sclk=0;                          //ds1302输出数据
  119.                   _nop_();

  120.          }
  121.          _nop_();
  122.          for(aa=0;aa<8;aa++)
  123.          {
  124.                    dd=dsio;
  125.                   dat1>>=1;
  126.                   dat1|=dd<<7;
  127.                   sclk=1;
  128.                   _nop_();
  129.                   sclk=0;
  130.                   _nop_();  
  131.          }
  132.         
  133.          ce=1;
  134.          _nop_();
  135.          sclk=1;
  136.          _nop_();
  137.          dsio=0;
  138.          _nop_();
  139.          dsio=1;
  140.          _nop_();
  141.          return dat1;
  142. }

  143. void writetime()
  144. {
  145.         u8 i;
  146.         write(0x8e,0x00);                 //                关闭写保护
  147.         for(i=0;i<7;i++)
  148.         {
  149.                 write(writedz[i],time[i]);
  150.         }
  151.         write(0x8e,0x80);
  152. }

  153. void readtime()
  154. {
  155.         u8 g,aa;
  156.         for(g=0;g<7;g++)
  157.         {
  158.                 time[g]=read(readdz[g]);
  159.         }
  160.                 aa=time[2]<<3;
  161.                 time[2]=aa>>3;
  162. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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