找回密码
 立即注册

QQ登录

只需一步,快速开始

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

六数码管DS1302时钟

  [复制链接]
跳转到指定楼层
楼主
手上有几个别的机器拆下来的数码管,闲时没事做了个数码钟。现发网上大家共同学习。数码管共阳,用扫描方式,段码用的74LS47,位码用138。秒闪独立控制。

DSC05440.JPG (829.16 KB, 下载次数: 292)

DSC05440.JPG

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的积分奖励!

查看全部评分

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

使用道具 举报

沙发
ID:86421 发表于 2015-11-20 07:57 | 只看该作者
  1. /*-----------------------------------------------
  2.   名称:DS1302时钟数码管显示可调
  3.   编写:LI
  4.   日期:2015.11
  5.   修改:无
  6.   内容:DS1302实时时钟数码管显示,时间和日期切换显示 三按键控制
  7.         时间格式xx-xx-xx
  8.                 日期格式xx-xx-xx
  9.                 周秒格式-x-   xx
  10. ------------------------------------------------*/
  11. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  12. #include "ds1302.h"
  13. #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换

  14. #define uchar unsigned char
  15. #define uint unsigned int
  16. sbit BEEP=P1^0;
  17. sbit led=P0^7;
  18. sbit SET=P3^5;
  19. sbit UP=P3^6;
  20. sbit DOWN=P3^7;
  21. unsigned char id=0,re_disp=0;  //定义用到的变量,id为调整模式用,不为0时表示调整模式,调整哪个量由id值确定
  22.            //时间到取反flag标志位,re_disp记数200次共10s,调整状态下按键无操作10s自动返回正常显示状态
  23. bit hour,minute,second,flag,year,month,date,day;    //定义位变量,hour,minute,second分别为调整时闪烁标志位,flag 500ms取反一次,调整位闪烁及冒号闪烁用


  24. bit ReadTimeFlag;//定义读时间标志

  25. unsigned char code dofly_DuanMa[10]={0xf0,0xf8,0xf1,0xf9,0xf2,0xfa,0xf3,0xfb,0xf4,0xfc};// 显示段码值0~9
  26. unsigned char code dofly_WeiMa[]={0xef,0xdf,0xcf,0xbf,0xaf,0x9f};//分别对应相应的数码管点亮,即位码
  27. unsigned char TempData[8]; //存储显示值的全局变量


  28. void Display(unsigned char FirstBit,unsigned char Num);//数码管显示函数
  29. void Scan_Key(void);//按键
  30. void Init_Timer0(void);//定时器0初始化
  31. void Init_Timer1(void);        //定时器1初始化
  32. void display8(void);//显示方式
  33. void id_case1_key(void);//键值处理
  34. void Set_id(unsigned char ,unsigned char);        //加减变量函数
  35. unsigned char displaynum; //显示方式标志
  36. /*------------------------------------------------
  37.                     主函数
  38. ------------------------------------------------*/
  39. void main ()
  40. {
  41.        
  42.         Init_Timer0();
  43.         Init_Timer1();
  44.         if(!UP&!DOWN)Ds1302_Init();   //如果同时按下UP和DOWN键则初始化1302,该语句在while(1)前,只执行一次,需要复位,防止误操作
  45.         Ds1302_Write_Time();

  46.         while (1)         //主循环
  47.           {
  48.       id_case1_key();
  49.       Scan_Key();

  50.           }

  51. }


  52. ------------------------------------------------*/
  53. /*------------------------------------------------
  54. 显示函数,用于动态扫描数码管
  55. 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
  56. 如输入0表示从第一个显示。
  57. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
  58. ------------------------------------------------*/
  59. void Display(unsigned char FirstBit,unsigned char Num)
  60. {
  61.       static unsigned char i=0;
  62.           

  63.            DataPort=0;   //清空数据,防止有交替重影

  64.       DataPort=dofly_WeiMa[i+FirstBit]&TempData[i];

  65.       
  66.            i++;
  67.        if(i==Num)
  68.               i=0;


  69. }
  70. /*------------------------------------------------
  71.                     定时器0初始化子程序
  72. ------------------------------------------------*/
  73. void Init_Timer0(void)
  74. {
  75. TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     
  76. //TH0=0x00;              //给定初值
  77. //TL0=0x00;
  78. EA=1;            //总中断打开
  79. ET0=1;           //定时器中断打开
  80. TR0=1;           //定时器开关打开
  81. }
  82. /*------------------------------------------------
  83.                     定时器1初始化子程序
  84. ------------------------------------------------*/
  85. void Init_Timer1(void)
  86. {
  87. TMOD |= 0x10;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
  88. //TH1=0x00;              //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
  89. // TL1=0x00;
  90. EA=1;            //总中断打开
  91. ET1=1;           //定时器中断打开
  92. TR1=1;           //定时器开关打开
  93. }
  94. /*------------------------------------------------
  95.                  定时器0中断子程序
  96. ------------------------------------------------*/
  97. void Timer0_isr(void) interrupt 1
  98. {
  99. static unsigned int num,a;
  100. TH0=(65536-2000)/256;                  //重新赋值 2ms
  101. TL0=(65536-2000)%256;

  102. Display(0,6);       // 调用数码管扫描
  103. num++;
  104. if(num==50)        //大致100ms
  105.    {
  106.     num=0;
  107.     ReadTimeFlag=1; //读标志位置1
  108.         }

  109.            a++;                                  //秒闪
  110.    if(a<=250)led=1;
  111.    if(a>250)led=0;
  112.    if(a==500)a=0;

  113. }
  114. /*------------------------------------------------
  115.                  定时器1中断子程序
  116. ------------------------------------------------*/
  117. void Timer1_isr(void) interrupt 3 using 1   //中断处理程序,主要用于取反标志位,返回正常显示状态
  118. {
  119.    unsigned char timecount;
  120.    TH1=(65535-50000)/256; //50ms定时
  121.    TL1=(65535-50000)%256;  
  122.    timecount++;re_disp++;
  123.           
  124.            if(timecount>9)
  125.              {
  126.            timecount=0;
  127.               flag=~flag;
  128.              }

  129.    if(re_disp>150){re_disp=0;if(id)id=0;}

  130. }
  131. /*---------------------------------------------------------
  132.           显示方式
  133. ---------------------------------------------------------*/
  134. void display8(void)
  135. {
  136.   if(ReadTimeFlag==1)
  137.   {
  138.    ReadTimeFlag=0;
  139.    Ds1302_Read_Time();
  140.   }


  141.    if(displaynum==0) //显示时间
  142.     {
  143.         if(flag&hour)       //如hour为1表示调整时,flag为1时不显示
  144.           {
  145.            TempData[0]=0;   //这句中的0xff是数码管的灭码
  146.            TempData[1]=0;  
  147.           }
  148.           else         //flag为0时显示,产生闪烁效果,下同
  149.           {
  150.           TempData[0]=dofly_DuanMa[time_buf1[4]/10];//时        //数据的转换,
  151.           TempData[1]=dofly_DuanMa[time_buf1[4]%10];//因我们采用数码管0~9的显示,将数据分开
  152.           }

  153.         if(flag&minute)         //分
  154.           {
  155.            TempData[2]=0;   //这句中的0xff是数码管的灭码
  156.            TempData[3]=0;
  157.           }
  158.         else
  159.           {
  160.            TempData[2]=dofly_DuanMa[time_buf1[5]/10];//分
  161.            TempData[3]=dofly_DuanMa[time_buf1[5]%10];
  162.            }

  163.         if(flag&second)         //秒
  164.           {
  165.            TempData[4]=0;   //这句中的0xff是数码管的灭码
  166.            TempData[5]=0;  
  167.           }
  168.         else
  169.           {
  170.            TempData[4]=dofly_DuanMa[time_buf1[6]/10];//秒
  171.            TempData[5]=dofly_DuanMa[time_buf1[6]%10];       
  172.           }
  173.          }

  174.         if(displaynum==1)//显示日期
  175.          {
  176.          led=0;
  177.          if(flag&year)
  178.          {
  179.           TempData[0]=0;   //这句中的0xff是数码管的灭码
  180.           TempData[1]=0;  
  181.          }
  182.          else
  183.          {
  184.          TempData[0]=dofly_DuanMa[time_buf1[1]/10];//年                       
  185.          TempData[1]=dofly_DuanMa[time_buf1[1]%10];
  186.          }
  187.          if(flag&month)
  188.          {
  189.           TempData[2]=0;   //这句中的0xff是数码管的灭码
  190.           TempData[3]=0;  
  191.      }
  192.          else
  193.          {                                                    
  194.          TempData[2]=dofly_DuanMa[time_buf1[2]/10];//月
  195.          TempData[3]=dofly_DuanMa[time_buf1[2]%10];
  196.          }
  197.          if(flag&date)
  198.          {
  199.           TempData[4]=0;   //这句中的0xff是数码管的灭码
  200.           TempData[5]=0;  
  201.          }
  202.          else
  203.          {
  204.          TempData[4]=dofly_DuanMa[time_buf1[3]/10];//日
  205.          TempData[5]=dofly_DuanMa[time_buf1[3]%10];       
  206.          }
  207.          }


  208.         if(displaynum==2)//显示周  秒
  209.          {
  210.          led=1;
  211.          if(flag&day)
  212.          {
  213.          TempData[1]=0xff;
  214.          }
  215.          else
  216.          {
  217.          TempData[0]=0xff;                               
  218.          TempData[1]=dofly_DuanMa[time_buf1[7]%10];//周
  219.          TempData[2]=0xff;
  220.          TempData[3]=0xff;
  221.          TempData[4]=dofly_DuanMa[time_buf1[6]/10];//秒
  222.          TempData[5]=dofly_DuanMa[time_buf1[6]%10];       
  223.          }
  224.          }

  225. }

  226. /*------------------------------------------------
  227.             键盘检测函数
  228. ------------------------------------------------*/
  229. void Scan_Key(void)    //键盘检测函数
  230. {
  231.   display8();    //程序开头调用显示函数
  232.   if(!SET)   
  233.   {
  234.    while(!SET);display8(); //等待按键释放,如一直按下一直调用显示函数,防止显示中断
  235.    re_disp=0;    //清除记数,重新开始10s定时
  236.    id++;
  237.    if(id>7)id=0;  //id加1,后面根据id值对应调整项目
  238.   }
  239.   if(id==0){hour=0;minute=0;second=0;year=0;month=0;date=0;day=0;} //根据id值跳到相应处理函数
  240.   if(id==1){displaynum=0;hour=1;minute=0;second=0;year=0;month=0;date=0;day=0;id_case1_key();}  //id为1,选择调整小时位,闪烁标志位置1,然后跳到键盘处理函数,下同
  241.   if(id==2){displaynum=0;hour=0;minute=1;second=0;year=0;month=0;date=0;day=0;id_case1_key();}
  242.   if(id==3){displaynum=0;hour=0;minute=0;second=1;year=0;month=0;date=0;day=0;id_case1_key();}
  243.   if(id==4){displaynum=1;hour=0;minute=0;second=0;year=1;month=0;date=0;day=0;id_case1_key();}
  244.   if(id==5){displaynum=1;hour=0;minute=0;second=0;year=0;month=1;date=0;day=0;id_case1_key();}
  245.   if(id==6){displaynum=1;hour=0;minute=0;second=0;year=0;month=0;date=1;day=0;id_case1_key();}
  246.   if(id==7){displaynum=2;hour=0;minute=0;second=0;year=0;month=0;date=0;day=1;id_case1_key();}
  247. }

  248. /*-----------------------------------------------------
  249.                 键盘处理函数
  250. -----------------------------------------------------*/

  251. void id_case1_key(void)      //键盘处理函数,只有按下set键时才会进入,
  252. {
  253.    display8();        
  254.    if (!DOWN) //减少
  255.        {
  256.          while(!DOWN)display8();   //等待按键释放,如一直按下一直调用显示函数,防止显示中断
  257.          re_disp=0;      //清除记数,重新开始10s定时
  258.          Set_id(id,0);     //跳到加减判断函数,下同,
  259.        }
  260.    
  261.     if (!UP)  //增加
  262.        {
  263.          while(!UP)display8();
  264.          re_disp=0;
  265.          Set_id(id,1);   
  266.        }

  267. }

  268. /*-------------------------------------------------------
  269. //根据选择调整相应项目并写入DS1302
  270. --------------------------------------------------------*/
  271. void Set_id(unsigned char sel,unsigned char sel_1)  //执行调整项目的函数
  272. {
  273.            if(sel==0)         //时间、日期、周显示选择
  274.         {
  275.           if(sel_1==0)
  276.           {
  277.           displaynum++;
  278.       if(displaynum==3)
  279.       displaynum=0;
  280.           }
  281.           else
  282.           {
  283.           displaynum++;
  284.       if(displaynum==3)
  285.       displaynum=0;

  286.           }
  287.         }



  288.     if(sel==1)        //调时
  289.      {
  290.          if(sel_1==0)
  291.                  {
  292.                  time_buf1[4]--;if(time_buf1[4]==24)time_buf1[4]=0;
  293.                  }
  294.                  else
  295.                  {
  296.                  time_buf1[4]++;if(time_buf1[4]==24)time_buf1[4]=0;
  297.                  }
  298.          Ds1302_Write_Time();
  299.          }

  300.          if(sel==2)        //调分
  301.      {
  302.          if(sel_1==0)
  303.                  {
  304.                  time_buf1[5]--;if(time_buf1[5]==59)time_buf1[5]=0;
  305.                  }
  306.                  else
  307.                  {
  308.                  time_buf1[5]++;if(time_buf1[5]==59)time_buf1[5]=0;
  309.                  }
  310.          Ds1302_Write_Time();
  311.          }

  312.     if(sel==3)          //调秒
  313.      {
  314.          if(sel_1==0)
  315.                  {
  316.                  time_buf1[6]--;if(time_buf1[6]==0)time_buf1[6]=0;
  317.                  }
  318.                  else
  319.                  {
  320.                  time_buf1[6]++;if(time_buf1[6]==0)time_buf1[6]=0;
  321.                  }
  322.          Ds1302_Write_Time();
  323.          }

  324.              if(sel==4)          //调年
  325.      {
  326.          if(sel_1==0)
  327.                  {
  328.                  time_buf1[1]--;if(time_buf1[1]==99)time_buf1[1]=15;
  329.                  }
  330.                  else
  331.                  {
  332.                  time_buf1[1]++;if(time_buf1[1]==99)time_buf1[1]=15;
  333.                  }
  334.          Ds1302_Write_Time();
  335.          }

  336.              if(sel==5)          //调月
  337.      {
  338.          if(sel_1==0)
  339.                  {
  340.                  time_buf1[2]--;if(time_buf1[2]==13)time_buf1[2]=1;
  341.                  }
  342.                  else
  343.                  {
  344.                  time_buf1[2]++;if(time_buf1[2]==13)time_buf1[2]=1;
  345.                  }
  346.          Ds1302_Write_Time();
  347.          }

  348.              if(sel==6)          //调日
  349.      {
  350.          if(sel_1==0)
  351.                  {
  352.                  time_buf1[3]--;if(time_buf1[3]==32)time_buf1[3]=1;
  353.                  }
  354.                  else
  355.                  {
  356.                  time_buf1[3]++;if(time_buf1[3]==32)time_buf1[3]=1;
  357.                  }
  358.          Ds1302_Write_Time();
  359.          }
  360.             
  361.                
  362.                  if(sel==7)          //调周
  363.      {
  364.          if(sel_1==0)
  365.                  {
  366.                  time_buf1[7]--;if(time_buf1[7]==8)time_buf1[7]=1;
  367.                  }
  368.                  else
  369.                  {
  370.                  time_buf1[7]++;if(time_buf1[7]==8)time_buf1[7]=1;
  371.                  }
  372.          Ds1302_Write_Time();
  373.          }

  374. }
复制代码
回复

使用道具 举报

板凳
ID:86421 发表于 2015-11-20 07:59 | 只看该作者
上面是主程序,为了发着方便合一起了。下面是DS1032的C、H程序,网上多的是,在些也发了吧。
回复

使用道具 举报

地板
ID:86421 发表于 2015-11-20 08:00 | 只看该作者

  1. #include "ds1302.h"

  2. unsigned char time_buf1[8] = {20,15,10,1,8,8,8,6};//空年月日时分秒周
  3. unsigned char time_buf[8] ;                         //空年月日时分秒周
  4. /*------------------------------------------------
  5.            向DS1302写入一字节数据
  6. ------------------------------------------------*/
  7. void Ds1302_Write_Byte(unsigned char addr, unsigned char d)
  8. {

  9.         unsigned char i;
  10.         RST_SET;       
  11.        
  12.         //写入目标地址:addr
  13.         addr = addr & 0xFE;     //最低位置零
  14.         for (i = 0; i < 8; i ++)
  15.             {
  16.                 if (addr & 0x01)
  17.                     {
  18.                         IO_SET;
  19.                         }
  20.                 else
  21.                     {
  22.                         IO_CLR;
  23.                         }
  24.                 SCK_SET;
  25.                 SCK_CLR;
  26.                 addr = addr >> 1;
  27.                 }
  28.        
  29.         //写入数据:d
  30.         for (i = 0; i < 8; i ++)
  31.            {
  32.                 if (d & 0x01)
  33.                     {
  34.                         IO_SET;
  35.                         }
  36.                 else
  37.                     {
  38.                         IO_CLR;
  39.                         }
  40.                 SCK_SET;
  41.                 SCK_CLR;
  42.                 d = d >> 1;
  43.                 }
  44.         RST_CLR;                                        //停止DS1302总线
  45. }
  46. /*------------------------------------------------
  47.            从DS1302读出一字节数据
  48. ------------------------------------------------*/

  49. unsigned char Ds1302_Read_Byte(unsigned char addr)
  50. {

  51.         unsigned char i;
  52.         unsigned char temp;
  53.         RST_SET;       

  54.         //写入目标地址:addr
  55.         addr = addr | 0x01;//最低位置高
  56.         for (i = 0; i < 8; i ++)
  57.             {
  58.              
  59.                 if (addr & 0x01)
  60.                    {
  61.                         IO_SET;
  62.                         }
  63.                 else
  64.                     {
  65.                         IO_CLR;
  66.                         }
  67.                 SCK_SET;
  68.                 SCK_CLR;
  69.                 addr = addr >> 1;
  70.                 }
  71.        
  72.         //输出数据:temp
  73.         for (i = 0; i < 8; i ++)
  74.             {
  75.                 temp = temp >> 1;
  76.                 if (IO_R)
  77.                    {
  78.                         temp |= 0x80;
  79.                         }
  80.                 else
  81.                    {
  82.                         temp &= 0x7F;
  83.                         }
  84.                 SCK_SET;
  85.                 SCK_CLR;
  86.                 }
  87.        
  88.         RST_CLR;        //停止DS1302总线
  89.         return temp;
  90. }

  91. /*------------------------------------------------
  92.            向DS1302写入时钟数据
  93. ------------------------------------------------*/
  94. void Ds1302_Write_Time(void)
  95. {
  96.      
  97.     unsigned char i,tmp;
  98.         for(i=0;i<8;i++)
  99.             {                  //BCD处理
  100.                 tmp=time_buf1[i]/10;
  101.                 time_buf[i]=time_buf1[i]%10;
  102.                 time_buf[i]=time_buf[i]+tmp*16;
  103.             }
  104.         Ds1302_Write_Byte(ds1302_control_add,0x00);                        //关闭写保护
  105.         Ds1302_Write_Byte(ds1302_sec_add,0x80);                                //暂停
  106.         //Ds1302_Write_Byte(ds1302_charger_add,0xa9);                        //涓流充电
  107.         Ds1302_Write_Byte(ds1302_year_add,time_buf[1]);                //年
  108.         Ds1302_Write_Byte(ds1302_month_add,time_buf[2]);        //月
  109.         Ds1302_Write_Byte(ds1302_date_add,time_buf[3]);                //日
  110.         Ds1302_Write_Byte(ds1302_day_add,time_buf[7]);                //周
  111.         Ds1302_Write_Byte(ds1302_hr_add,time_buf[4]);                //时
  112.         Ds1302_Write_Byte(ds1302_min_add,time_buf[5]);                //分
  113.         Ds1302_Write_Byte(ds1302_sec_add,time_buf[6]);                //秒
  114.         Ds1302_Write_Byte(ds1302_day_add,time_buf[7]);                //周
  115.         Ds1302_Write_Byte(ds1302_control_add,0x80);                        //打开写保护
  116. }

  117. /*------------------------------------------------
  118.            从DS1302读出时钟数据
  119. ------------------------------------------------*/
  120. void Ds1302_Read_Time(void)  
  121. {
  122.                unsigned char i,tmp;
  123.         time_buf[1]=Ds1302_Read_Byte(ds1302_year_add);                //年
  124.         time_buf[2]=Ds1302_Read_Byte(ds1302_month_add);                //月
  125.         time_buf[3]=Ds1302_Read_Byte(ds1302_date_add);                //日
  126.         time_buf[4]=Ds1302_Read_Byte(ds1302_hr_add);                //时
  127.         time_buf[5]=Ds1302_Read_Byte(ds1302_min_add);                //分
  128.         time_buf[6]=(Ds1302_Read_Byte(ds1302_sec_add))&0x7F;//秒
  129.         time_buf[7]=Ds1302_Read_Byte(ds1302_day_add);                //周


  130.         for(i=0;i<8;i++)
  131.            {           //BCD处理
  132.                 tmp=time_buf[i]/16;
  133.                 time_buf1[i]=time_buf[i]%16;
  134.                 time_buf1[i]=time_buf1[i]+tmp*10;
  135.            }
  136. }

  137. /*------------------------------------------------
  138.                 DS1302初始化
  139. ------------------------------------------------*/
  140. void Ds1302_Init(void)
  141. {
  142.        
  143.         RST_CLR;                        //RST脚置低
  144.         SCK_CLR;                        //SCK脚置低
  145.     Ds1302_Write_Byte(ds1302_sec_add,0x00);                                 
  146. }
复制代码
回复

使用道具 举报

5#
ID:86421 发表于 2015-11-20 08:00 | 只看该作者

  1. #ifndef __DS1302_H__
  2. #define __DS1302_H__

  3. #include <reg52.h>
  4. #include<intrins.h>

  5. sbit SCK=P1^4;               
  6. sbit SDA=P1^5;               
  7. sbit RST=P1^6;
  8. //复位脚
  9. #define RST_CLR        RST=0//电平置低
  10. #define RST_SET        RST=1//电平置高


  11. //双向数据
  12. #define IO_CLR        SDA=0//电平置低
  13. #define IO_SET        SDA=1//电平置高
  14. #define IO_R        SDA  //电平读取


  15. //时钟信号
  16. #define SCK_CLR        SCK=0//时钟信号
  17. #define SCK_SET        SCK=1//电平置高


  18. #define ds1302_sec_add                        0x80                //秒数据地址
  19. #define ds1302_min_add                        0x82                //分数据地址
  20. #define ds1302_hr_add                        0x84                //时数据地址
  21. #define ds1302_date_add                        0x86                //日数据地址
  22. #define ds1302_month_add                0x88                //月数据地址
  23. #define ds1302_day_add                        0x8a                //星期数据地址
  24. #define ds1302_year_add                        0x8c                //年数据地址
  25. #define ds1302_control_add                0x8e                //控制数据地址
  26. #define ds1302_charger_add                0x90                                          
  27. #define ds1302_clkburst_add                0xbe

  28. extern unsigned char time_buf1[8];//空年月日时分秒周
  29. extern unsigned char time_buf[8] ;//空年月日时分秒周
  30. /*------------------------------------------------
  31.            向DS1302写入一字节数据
  32. ------------------------------------------------*/
  33. void Ds1302_Write_Byte(unsigned char addr, unsigned char d);
  34. /*------------------------------------------------
  35.            从DS1302读出一字节数据
  36. ------------------------------------------------*/
  37. unsigned char Ds1302_Read_Byte(unsigned char addr) ;
  38. /*------------------------------------------------
  39.            向DS1302写入时钟数据
  40. ------------------------------------------------*/
  41. void Ds1302_Write_Time(void) ;
  42. /*------------------------------------------------
  43.            从DS1302读出时钟数据
  44. ------------------------------------------------*/
  45. void Ds1302_Read_Time(void)  ;
  46. /*------------------------------------------------
  47.                 DS1302初始化
  48. ------------------------------------------------*/
  49. void Ds1302_Init(void);

  50. #endif
复制代码
回复

使用道具 举报

6#
ID:86421 发表于 2015-11-20 08:03 | 只看该作者
自我感觉还是较为详实的,且有一定的可读性。如果数码管不一样,可修改显示方式及显示函数两个主程序中的内容,其它的就不用动了。如哪个高手再给加个红外控制进去,我也学习学习。先感谢了。
回复

使用道具 举报

7#
ID:86421 发表于 2015-11-20 20:28 | 只看该作者
我是一个初学者,兴趣使然。从网上下来的程序,好多都不合适或是编不过。这是在多个网上程序的基础上合一起的,挺费劲的,和初学者一起交流。感谢网上发程序的朋友,学习了。
回复

使用道具 举报

8#
ID:96682 发表于 2015-11-22 12:46 | 只看该作者
LZ 已经很棒了,还那么谦虚。学这玩意不懂英文感觉太费劲了。
回复

使用道具 举报

9#
ID:86421 发表于 2015-11-23 18:14 | 只看该作者
是呀,可我是学俄语的,比不了你们现在的大学生了呀。不过这东西整着挺有意思,但得时间了。
回复

使用道具 举报

10#
ID:97771 发表于 2015-12-1 20:41 | 只看该作者
大神有电路图吗
回复

使用道具 举报

11#
ID:86421 发表于 2015-12-3 21:04 | 只看该作者
实在对不起,我没有画电路图。画那个还得安软件,我只是平时玩玩,所以电脑上就没有安。
回复

使用道具 举报

12#
ID:98321 发表于 2015-12-4 19:26 | 只看该作者
如何消抖?貌似你的显示的很清楚
回复

使用道具 举报

13#
ID:86421 发表于 2015-12-4 19:38 | 只看该作者
消抖用的是延时。显示用定时器控制。
回复

使用道具 举报

14#
ID:112806 发表于 2016-4-7 19:54 | 只看该作者
好东西,好好研究一下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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