找回密码
 立即注册

QQ登录

只需一步,快速开始

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

ds1302时钟显示加按键可进行调整,为什么我加了以后不好使 求帮助

[复制链接]
跳转到指定楼层
楼主
ID:737450 发表于 2020-4-27 17:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include "reg51.h"
  2. #include "intrins.h"
  3. #define  uchar unsigned char
  4. #define  uint  unsigned int

  5. sbit LSA=P2^2;
  6. sbit LSB=P2^3;
  7. sbit LSC=P2^4;
  8. sbit k2=P1^1;
  9. sbit  sclk=P2^6;
  10. sbit  io=P2^7;
  11. sbit  ce=P2^5;
  12. int ts;
  13. uchar disp[6];
  14. uchar time_data[]={20,3,4,19,16,43,2};
  15. uchar wirte_add[]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};
  16. uchar read_add[]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};
  17. uchar code table_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77};
  18. void delay(uchar x)
  19. {   
  20.   uchar a,b;
  21.   for(a=x;a>0;a--)
  22.   for(b=200;b>0;b--);
  23. }
  24. void write_ds1302_byte(uchar add)  //д×Ö½Ú
  25. {
  26.   uchar i;
  27.   for(i=0;i<8;i++)
  28. {
  29.    sclk=0;
  30.    io=add&0x01;
  31.    add=add>>1;
  32.    sclk=1;  
  33. }
  34. }
  35. void write_ds1302(uchar add,dat)
  36. {
  37.   ce=0;
  38.   sclk=0;
  39.   ce=1;
  40.   _nop_();
  41.   write_ds1302_byte(add);
  42.   write_ds1302_byte(dat);
  43.   ce=0;
  44.   _nop_();
  45.   io=1;
  46.   sclk=1;
  47. }
  48. uchar read_ds1302(uchar add)
  49. {
  50.   uchar i,value;
  51.   ce=0;
  52.   sclk=0;
  53.   ce=1;
  54.   _nop_();
  55.   write_ds1302_byte(add);
  56.   for(i=0;i<8;i++)
  57. {
  58.    value=value>>1;
  59.    sclk=0;
  60.    if(io)
  61.    {
  62.     value=value|0x80;
  63.    }
  64.    sclk=1;
  65. }
  66.     ce=0;
  67.     _nop_();
  68.    sclk=0;
  69.     _nop_();
  70.    sclk=1;
  71.    io=1;
  72. return value;
  73. }
  74. void set_rtc()
  75. {
  76.   uchar i,j,k;
  77. for(i=0;i<7;i++)
  78. {
  79.   j=time_data[i]/10;
  80.   k=time_data[i]%10;
  81.   time_data[i]=k+j*16;
  82. }
  83. write_ds1302(0x8e,0x00);//È¥³ýд±£»¤
  84. for(i=0;i<7;i++)
  85. {
  86.    write_ds1302(wirte_add[i],time_data[i]);
  87. }
  88.     write_ds1302(0x8e,0x80);//д±£»¤
  89. }
  90. void read_rtc()
  91. {
  92.   uchar i;
  93.   for(i=0;i<7;i++)
  94. {
  95.    time_data[i]=read_ds1302(read_add[i]);
  96. }
  97. }
  98. void time_pros()
  99. {
  100.   disp[0]=time_data[4]/16;//ʱʮλ
  101.   disp[1]=time_data[4]%16;//ʱ¸öλ
  102.   disp[2]=time_data[5]/16;//·Öʮλ
  103.   disp[3]=time_data[5]%16;//·Ö¸öλ
  104.   disp[4]=time_data[6]/16;//Ãë
  105.   disp[5]=time_data[6]%16;//MIAO
  106. }
  107. void display()
  108. {
  109.   uchar i;
  110. for(i=0;i<6;i++)
  111. {
  112.   switch(i)  
  113.   {
  114.    case(0):
  115.     LSA=0;LSB=0;LSC=0; break;//
  116.    case(1):
  117.     LSA=1;LSB=0;LSC=0; break;//ÏÔʾµÚ1λ
  118.    case(2):
  119.     LSA=0;LSB=1;LSC=0; break;//ÏÔʾµÚ2λ
  120.    case(3):
  121.     LSA=1;LSB=1;LSC=0; break;//ÏÔʾµÚ3λ
  122.    case(4):
  123.     LSA=0;LSB=0;LSC=1; break;//
  124.    case(5):
  125.     LSA=1;LSB=0;LSC=1; break;//
  126.   if(i==1|i==3)
  127.   P0=table_du[disp[i]]|0x80;
  128.   else
  129.   P0=table_du[disp[i]];//
  130.   delay(3); //
  131.   P0=0x00;//ÏûÒþ
  132. }
  133. }
  134. void change()
  135. {
  136.   if(k2==0)
  137.      delay(100);
  138.   {
  139.     if(k2==0)
  140.     ts=read_ds1302(0x83);
  141.      ts=(ts>>4)*10+ts&0x0f;
  142.      ts++;
  143.    if(ts>59)
  144.    {
  145.      ts=0;
  146.    }
  147.      ts=(ts/10)<<4+(ts%10)&0x0f;
  148.      write_ds1302(0x8e,0x00);
  149.      write_ds1302(0x82,ts);
  150.      write_ds1302(0x8e,0x80);
  151.   }
  152. }
  153. void main()
  154. {
  155. while(1)
  156. {
  157.     change();
  158.    read_rtc();
  159.    time_pros();
  160.    display();
  161. }
  162. }
复制代码


时钟.zip

93.75 KB, 下载次数: 2, 下载积分: 黑币 -5

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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