找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1991|回复: 2
收起左侧

清翔DS1302开发板实验,位移显示时钟程序

[复制链接]
ID:301186 发表于 2018-9-30 17:04 | 显示全部楼层 |阅读模式
实物图如下:
DS1302实验动态图片.jpg

单片机源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit sclk = P1^0;
  6. sbit dio = P1^1;
  7. sbit ce = P1^2;
  8. sbit wela = P2^7;
  9. sbit dula = P2^6;
  10. void delay(uint z)
  11. {
  12.         uint x,y;
  13.         for(x=z;x>0;x--)
  14.                 for(y=120;y>0;y--);
  15. }
  16. uchar code table[]={

  17.                 0x3F,  //"0"
  18.                 0x06,  //"1"
  19.                 0x5B,  //"2"
  20.                 0x4F,  //"3"
  21.                 0x66,  //"4"
  22.                 0x6D,  //"5"
  23.                 0x7D,  //"6"
  24.                 0x07,  //"7"
  25.                 0x7F,  //"8"
  26.                 0x6F,  //"9"
  27.                 0x77,  //"A"
  28.                 0x7C,  //"B"
  29.                 0x39,  //"C"
  30.                 0x5E,  //"D"
  31.                 0x79,  //"E"
  32.                 0x71,  //"F"
  33.                 0x76,  //"H"
  34.                 0x38,  //"L"
  35.                 0x37,  //"n"
  36.                 0x3E,  //"u"
  37.                 0x73,  //"P"
  38.                 0x5C,  //"o"
  39.                 0x40,  //"-"
  40.                 0x00,  //熄灭
  41.                 0x00  //自定义

  42.                          };
  43. void display(uchar hour10,hour,minute10,minute,second10,second)
  44. {
  45.         dula=1;
  46.         P0=table[hour10];
  47.         dula=0;
  48.         P0=0xff;
  49.         wela=1;
  50.         P0=0xfe;
  51.         wela=0;
  52.         delay(1);

  53.         dula=1;
  54.         P0=table[hour]|0x80;
  55.         dula=0;
  56.         P0=0xff;
  57.         wela=1;
  58.         P0=0xfd;
  59.         wela=0;
  60.         delay(1);

  61.         dula=1;
  62.         P0=table[minute10];
  63.         dula=0;
  64.         P0=0xff;
  65.         wela=1;
  66.         P0=0xfb;
  67.         wela=0;
  68.         delay(1);

  69.         dula=1;
  70.         P0=table[minute]|0x80;
  71.         dula=0;
  72.         P0=0xff;
  73.         wela=1;
  74.         P0=0xf7;
  75.         wela=0;
  76.         delay(1);

  77.         dula=1;
  78.         P0=table[second10];
  79.         dula=0;
  80.         P0=0xff;
  81.         wela=1;
  82.         P0=0xef;
  83.         wela=0;
  84.         delay(1);

  85.         dula=1;
  86.         P0=table[second];
  87.         dula=0;
  88.         P0=0xff;
  89.         wela=1;
  90.         P0=0xdf;
  91.         wela=0;
  92.         delay(1);
  93. }
  94. void write_1302(uchar add,dat)
  95. {
  96.         uchar i,temp;
  97.         temp=add;
  98.         ce=0;
  99.         _nop_();
  100.         sclk=0;
  101.         _nop_();
  102.         ce=1;
  103.         _nop_();
  104.         for(i=0;i<8;i++)
  105.         {
  106.                 sclk=0;
  107.                 _nop_();
  108.                 if((temp&0x01)==0x01)
  109.                         dio=1;
  110.                         else
  111.                         dio=0;
  112.                 temp>>=1;
  113.                 sclk=1;
  114.                 _nop_();
  115.         }
  116.         temp=dat;
  117.         for(i=0;i<8;i++)
  118.         {
  119.                 sclk=0;
  120.                 _nop_();
  121.                 if((temp&0x01)==0x01)
  122.                         dio=1;
  123.                         else
  124.                         dio=0;
  125.                 temp>>=1;
  126.                 sclk=1;
  127.                 _nop_();
  128.         }
  129.         ce=0;
  130.         sclk=0;
  131. }
  132. uchar read_1302(uchar add)
  133. {
  134.         uchar dat,dat1,i,temp;
  135.         temp=add;
  136.         ce=0;
  137.         _nop_();
  138.         sclk=0;
  139.         _nop_();
  140.         ce=1;
  141.         for(i=0;i<8;i++)
  142.         {
  143.                 sclk=0;
  144.                 _nop_();
  145.                 if((temp&0x01)==0x01)
  146.                         dio=1;
  147.                         else
  148.                         dio=0;
  149.                 temp>>=1;
  150.                 sclk=1;
  151.                 _nop_();
  152.         }
  153.         for(i=0;i<8;i++)
  154.         {
  155.                 sclk=0;
  156.                 _nop_();
  157.                 if(dio)
  158.                     dat|=0x80;
  159.                 if(i<7)
  160.                         dat>>=1;
  161.                 sclk=1;
  162.         }
  163.         dat1=dat/16;
  164.         dat=dat%16;
  165.         dat=dat1*10+dat;  
  166.         ce=0;
  167.         sclk=0;
  168.         return dat;
  169. }
  170. void main()
  171. {
  172.         uchar hour,minute,second;       
  173.         write_1302(0x8e,0x00);

  174.         write_1302(0xc0,0xfe);
  175.         write_1302(0xc2,0xff);
  176.        
  177.         write_1302(0x80,0x30);

  178.         write_1302(0x82,0x10);
  179.        
  180.         write_1302(0x84,0x15);
  181.        
  182.         write_1302(0x8e,0x80);       
  183.         while(1)
  184.         {
  185.                 write_1302(0x8e,0x00);
  186.                 hour=read_1302(0x85);
  187.                
  188.                 minute=read_1302(0x83);
  189.                
  190.                 second=read_1302(0x81);       

  191.                 //r=read_1302(0xc1);
  192.         //        r1=read_1302(0xc3);
  193.                 write_1302(0x8e,0x80);
  194.                 display(hour/10,hour%10,minute/10,minute%10,second/10,second%10);
  195.                 //display(r/100,r%100/10,r%100%10,r1/100,r1%100/10,r1%100%10);               
  196.         }
  197. }
复制代码

所有资料51hei提供下载:
DS1302.zip (628.42 KB, 下载次数: 6)


回复

使用道具 举报

ID:301186 发表于 2018-9-30 17:04 | 显示全部楼层
咋上传代码,我试试
回复

使用道具 举报

ID:1 发表于 2018-10-1 02:46 | 显示全部楼层
位移显示?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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