久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 11405|回復(fù): 14
收起左側(cè)

六數(shù)碼管DS1302時(shí)鐘

  [復(fù)制鏈接]
ID:86421 發(fā)表于 2015-11-20 07:54 | 顯示全部樓層 |閱讀模式
手上有幾個(gè)別的機(jī)器拆下來的數(shù)碼管,閑時(shí)沒事做了個(gè)數(shù)碼鐘。現(xiàn)發(fā)網(wǎng)上大家共同學(xué)習(xí)。數(shù)碼管共陽,用掃描方式,段碼用的74LS47,位碼用138。秒閃獨(dú)立控制。
DSC05440.JPG

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的積分獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:86421 發(fā)表于 2015-11-20 07:57 | 顯示全部樓層
  1. /*-----------------------------------------------
  2.   名稱:DS1302時(shí)鐘數(shù)碼管顯示可調(diào)
  3.   編寫:LI
  4.   日期:2015.11
  5.   修改:無
  6.   內(nèi)容:DS1302實(shí)時(shí)時(shí)鐘數(shù)碼管顯示,時(shí)間和日期切換顯示 三按鍵控制
  7.         時(shí)間格式xx-xx-xx
  8.                 日期格式xx-xx-xx
  9.                 周秒格式-x-   xx
  10. ------------------------------------------------*/
  11. #include<reg52.h> //包含頭文件,一般情況不需要改動(dòng),頭文件包含特殊功能寄存器的定義
  12. #include "ds1302.h"
  13. #define DataPort P0 //定義數(shù)據(jù)端口 程序中遇到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為調(diào)整模式用,不為0時(shí)表示調(diào)整模式,調(diào)整哪個(gè)量由id值確定
  22.            //時(shí)間到取反flag標(biāo)志位,re_disp記數(shù)200次共10s,調(diào)整狀態(tài)下按鍵無操作10s自動(dòng)返回正常顯示狀態(tài)
  23. bit hour,minute,second,flag,year,month,date,day;    //定義位變量,hour,minute,second分別為調(diào)整時(shí)閃爍標(biāo)志位,flag 500ms取反一次,調(diào)整位閃爍及冒號(hào)閃爍用


  24. bit ReadTimeFlag;//定義讀時(shí)間標(biāo)志

  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};//分別對(duì)應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮,即位碼
  27. unsigned char TempData[8]; //存儲(chǔ)顯示值的全局變量


  28. void Display(unsigned char FirstBit,unsigned char Num);//數(shù)碼管顯示函數(shù)
  29. void Scan_Key(void);//按鍵
  30. void Init_Timer0(void);//定時(shí)器0初始化
  31. void Init_Timer1(void);        //定時(shí)器1初始化
  32. void display8(void);//顯示方式
  33. void id_case1_key(void);//鍵值處理
  34. void Set_id(unsigned char ,unsigned char);        //加減變量函數(shù)
  35. unsigned char displaynum; //顯示方式標(biāo)志
  36. /*------------------------------------------------
  37.                     主函數(shù)
  38. ------------------------------------------------*/
  39. void main ()
  40. {
  41.        
  42.         Init_Timer0();
  43.         Init_Timer1();
  44.         if(!UP&!DOWN)Ds1302_Init();   //如果同時(shí)按下UP和DOWN鍵則初始化1302,該語句在while(1)前,只執(zhí)行一次,需要復(fù)位,防止誤操作
  45.         Ds1302_Write_Time();

  46.         while (1)         //主循環(huán)
  47.           {
  48.       id_case1_key();
  49.       Scan_Key();

  50.           }

  51. }


  52. ------------------------------------------------*/
  53. /*------------------------------------------------
  54. 顯示函數(shù),用于動(dòng)態(tài)掃描數(shù)碼管
  55. 輸入?yún)?shù) FirstBit 表示需要顯示的第一位,如賦值2表示從第三個(gè)數(shù)碼管開始顯示
  56. 如輸入0表示從第一個(gè)顯示。
  57. Num表示需要顯示的位數(shù),如需要顯示99兩位數(shù)值則該值輸入2
  58. ------------------------------------------------*/
  59. void Display(unsigned char FirstBit,unsigned char Num)
  60. {
  61.       static unsigned char i=0;
  62.           

  63.            DataPort=0;   //清空數(shù)據(jù),防止有交替重影

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

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


  69. }
  70. /*------------------------------------------------
  71.                     定時(shí)器0初始化子程序
  72. ------------------------------------------------*/
  73. void Init_Timer0(void)
  74. {
  75. TMOD |= 0x01;          //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響                     
  76. //TH0=0x00;              //給定初值
  77. //TL0=0x00;
  78. EA=1;            //總中斷打開
  79. ET0=1;           //定時(shí)器中斷打開
  80. TR0=1;           //定時(shí)器開關(guān)打開
  81. }
  82. /*------------------------------------------------
  83.                     定時(shí)器1初始化子程序
  84. ------------------------------------------------*/
  85. void Init_Timer1(void)
  86. {
  87. TMOD |= 0x10;          //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響
  88. //TH1=0x00;              //給定初值,這里使用定時(shí)器最大值從0開始計(jì)數(shù)一直到65535溢出
  89. // TL1=0x00;
  90. EA=1;            //總中斷打開
  91. ET1=1;           //定時(shí)器中斷打開
  92. TR1=1;           //定時(shí)器開關(guān)打開
  93. }
  94. /*------------------------------------------------
  95.                  定時(shí)器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);       // 調(diào)用數(shù)碼管掃描
  103. num++;
  104. if(num==50)        //大致100ms
  105.    {
  106.     num=0;
  107.     ReadTimeFlag=1; //讀標(biāo)志位置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.                  定時(shí)器1中斷子程序
  116. ------------------------------------------------*/
  117. void Timer1_isr(void) interrupt 3 using 1   //中斷處理程序,主要用于取反標(biāo)志位,返回正常顯示狀態(tài)
  118. {
  119.    unsigned char timecount;
  120.    TH1=(65535-50000)/256; //50ms定時(shí)
  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) //顯示時(shí)間
  142.     {
  143.         if(flag&hour)       //如hour為1表示調(diào)整時(shí),flag為1時(shí)不顯示
  144.           {
  145.            TempData[0]=0;   //這句中的0xff是數(shù)碼管的滅碼
  146.            TempData[1]=0;  
  147.           }
  148.           else         //flag為0時(shí)顯示,產(chǎn)生閃爍效果,下同
  149.           {
  150.           TempData[0]=dofly_DuanMa[time_buf1[4]/10];//時(shí)        //數(shù)據(jù)的轉(zhuǎn)換,
  151.           TempData[1]=dofly_DuanMa[time_buf1[4]%10];//因我們采用數(shù)碼管0~9的顯示,將數(shù)據(jù)分開
  152.           }

  153.         if(flag&minute)         //分
  154.           {
  155.            TempData[2]=0;   //這句中的0xff是數(shù)碼管的滅碼
  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是數(shù)碼管的滅碼
  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是數(shù)碼管的滅碼
  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是數(shù)碼管的滅碼
  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是數(shù)碼管的滅碼
  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.             鍵盤檢測(cè)函數(shù)
  228. ------------------------------------------------*/
  229. void Scan_Key(void)    //鍵盤檢測(cè)函數(shù)
  230. {
  231.   display8();    //程序開頭調(diào)用顯示函數(shù)
  232.   if(!SET)   
  233.   {
  234.    while(!SET);display8(); //等待按鍵釋放,如一直按下一直調(diào)用顯示函數(shù),防止顯示中斷
  235.    re_disp=0;    //清除記數(shù),重新開始10s定時(shí)
  236.    id++;
  237.    if(id>7)id=0;  //id加1,后面根據(jù)id值對(duì)應(yīng)調(diào)整項(xiàng)目
  238.   }
  239.   if(id==0){hour=0;minute=0;second=0;year=0;month=0;date=0;day=0;} //根據(jù)id值跳到相應(yīng)處理函數(shù)
  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,選擇調(diào)整小時(shí)位,閃爍標(biāo)志位置1,然后跳到鍵盤處理函數(shù),下同
  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.                 鍵盤處理函數(shù)
  250. -----------------------------------------------------*/

  251. void id_case1_key(void)      //鍵盤處理函數(shù),只有按下set鍵時(shí)才會(huì)進(jìn)入,
  252. {
  253.    display8();        
  254.    if (!DOWN) //減少
  255.        {
  256.          while(!DOWN)display8();   //等待按鍵釋放,如一直按下一直調(diào)用顯示函數(shù),防止顯示中斷
  257.          re_disp=0;      //清除記數(shù),重新開始10s定時(shí)
  258.          Set_id(id,0);     //跳到加減判斷函數(shù),下同,
  259.        }
  260.    
  261.     if (!UP)  //增加
  262.        {
  263.          while(!UP)display8();
  264.          re_disp=0;
  265.          Set_id(id,1);   
  266.        }

  267. }

  268. /*-------------------------------------------------------
  269. //根據(jù)選擇調(diào)整相應(yīng)項(xiàng)目并寫入DS1302
  270. --------------------------------------------------------*/
  271. void Set_id(unsigned char sel,unsigned char sel_1)  //執(zhí)行調(diào)整項(xiàng)目的函數(shù)
  272. {
  273.            if(sel==0)         //時(shí)間、日期、周顯示選擇
  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)        //調(diào)時(shí)
  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)        //調(diào)分
  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)          //調(diào)秒
  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)          //調(diào)年
  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)          //調(diào)月
  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)          //調(diào)日
  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)          //調(diào)周
  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. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:86421 發(fā)表于 2015-11-20 07:59 | 顯示全部樓層
上面是主程序,為了發(fā)著方便合一起了。下面是DS1032的C、H程序,網(wǎng)上多的是,在些也發(fā)了吧。
回復(fù)

使用道具 舉報(bào)

ID:86421 發(fā)表于 2015-11-20 08:00 | 顯示全部樓層

  1. #include "ds1302.h"

  2. unsigned char time_buf1[8] = {20,15,10,1,8,8,8,6};//空年月日時(shí)分秒周
  3. unsigned char time_buf[8] ;                         //空年月日時(shí)分秒周
  4. /*------------------------------------------------
  5.            向DS1302寫入一字節(jié)數(shù)據(jù)
  6. ------------------------------------------------*/
  7. void Ds1302_Write_Byte(unsigned char addr, unsigned char d)
  8. {

  9.         unsigned char i;
  10.         RST_SET;       
  11.        
  12.         //寫入目標(biāo)地址: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.         //寫入數(shù)據(jù):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讀出一字節(jié)數(shù)據(jù)
  48. ------------------------------------------------*/

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

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

  54.         //寫入目標(biāo)地址: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.         //輸出數(shù)據(jù):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寫入時(shí)鐘數(shù)據(jù)
  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);                        //關(guān)閉寫保護(hù)
  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]);                //時(shí)
  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);                        //打開寫保護(hù)
  116. }

  117. /*------------------------------------------------
  118.            從DS1302讀出時(shí)鐘數(shù)據(jù)
  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);                //時(shí)
  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. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:86421 發(fā)表于 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. //復(fù)位腳
  9. #define RST_CLR        RST=0//電平置低
  10. #define RST_SET        RST=1//電平置高


  11. //雙向數(shù)據(jù)
  12. #define IO_CLR        SDA=0//電平置低
  13. #define IO_SET        SDA=1//電平置高
  14. #define IO_R        SDA  //電平讀取


  15. //時(shí)鐘信號(hào)
  16. #define SCK_CLR        SCK=0//時(shí)鐘信號(hào)
  17. #define SCK_SET        SCK=1//電平置高


  18. #define ds1302_sec_add                        0x80                //秒數(shù)據(jù)地址
  19. #define ds1302_min_add                        0x82                //分?jǐn)?shù)據(jù)地址
  20. #define ds1302_hr_add                        0x84                //時(shí)數(shù)據(jù)地址
  21. #define ds1302_date_add                        0x86                //日數(shù)據(jù)地址
  22. #define ds1302_month_add                0x88                //月數(shù)據(jù)地址
  23. #define ds1302_day_add                        0x8a                //星期數(shù)據(jù)地址
  24. #define ds1302_year_add                        0x8c                //年數(shù)據(jù)地址
  25. #define ds1302_control_add                0x8e                //控制數(shù)據(jù)地址
  26. #define ds1302_charger_add                0x90                                          
  27. #define ds1302_clkburst_add                0xbe

  28. extern unsigned char time_buf1[8];//空年月日時(shí)分秒周
  29. extern unsigned char time_buf[8] ;//空年月日時(shí)分秒周
  30. /*------------------------------------------------
  31.            向DS1302寫入一字節(jié)數(shù)據(jù)
  32. ------------------------------------------------*/
  33. void Ds1302_Write_Byte(unsigned char addr, unsigned char d);
  34. /*------------------------------------------------
  35.            從DS1302讀出一字節(jié)數(shù)據(jù)
  36. ------------------------------------------------*/
  37. unsigned char Ds1302_Read_Byte(unsigned char addr) ;
  38. /*------------------------------------------------
  39.            向DS1302寫入時(shí)鐘數(shù)據(jù)
  40. ------------------------------------------------*/
  41. void Ds1302_Write_Time(void) ;
  42. /*------------------------------------------------
  43.            從DS1302讀出時(shí)鐘數(shù)據(jù)
  44. ------------------------------------------------*/
  45. void Ds1302_Read_Time(void)  ;
  46. /*------------------------------------------------
  47.                 DS1302初始化
  48. ------------------------------------------------*/
  49. void Ds1302_Init(void);

  50. #endif
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:86421 發(fā)表于 2015-11-20 08:03 | 顯示全部樓層
自我感覺還是較為詳實(shí)的,且有一定的可讀性。如果數(shù)碼管不一樣,可修改顯示方式及顯示函數(shù)兩個(gè)主程序中的內(nèi)容,其它的就不用動(dòng)了。如哪個(gè)高手再給加個(gè)紅外控制進(jìn)去,我也學(xué)習(xí)學(xué)習(xí)。先感謝了。
回復(fù)

使用道具 舉報(bào)

ID:86421 發(fā)表于 2015-11-20 20:28 | 顯示全部樓層
我是一個(gè)初學(xué)者,興趣使然。從網(wǎng)上下來的程序,好多都不合適或是編不過。這是在多個(gè)網(wǎng)上程序的基礎(chǔ)上合一起的,挺費(fèi)勁的,和初學(xué)者一起交流。感謝網(wǎng)上發(fā)程序的朋友,學(xué)習(xí)了。
回復(fù)

使用道具 舉報(bào)

ID:96682 發(fā)表于 2015-11-22 12:46 | 顯示全部樓層
LZ 已經(jīng)很棒了,還那么謙虛。學(xué)這玩意不懂英文感覺太費(fèi)勁了。
回復(fù)

使用道具 舉報(bào)

ID:86421 發(fā)表于 2015-11-23 18:14 | 顯示全部樓層
是呀,可我是學(xué)俄語的,比不了你們現(xiàn)在的大學(xué)生了呀。不過這東西整著挺有意思,但得時(shí)間了。
回復(fù)

使用道具 舉報(bào)

ID:97771 發(fā)表于 2015-12-1 20:41 | 顯示全部樓層
大神有電路圖嗎
回復(fù)

使用道具 舉報(bào)

ID:86421 發(fā)表于 2015-12-3 21:04 | 顯示全部樓層
實(shí)在對(duì)不起,我沒有畫電路圖。畫那個(gè)還得安軟件,我只是平時(shí)玩玩,所以電腦上就沒有安。
回復(fù)

使用道具 舉報(bào)

ID:98321 發(fā)表于 2015-12-4 19:26 | 顯示全部樓層
如何消抖?貌似你的顯示的很清楚
回復(fù)

使用道具 舉報(bào)

ID:86421 發(fā)表于 2015-12-4 19:38 | 顯示全部樓層
消抖用的是延時(shí)。顯示用定時(shí)器控制。
回復(fù)

使用道具 舉報(bào)

ID:112806 發(fā)表于 2016-4-7 19:54 | 顯示全部樓層
好東西,好好研究一下
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 伊人伊人 | 亚洲精品视频网站在线观看 | 久久av一区二区三区 | 中文在线播放 | 五月婷婷丁香婷婷 | 久久久久国产精品www | 欧美偷偷操 | 99精品国产一区二区三区 | 亚洲成年人免费网站 | 国产精品亚洲综合 | 国产精品国产a | 成人一区二区在线 | 在线成人| 日韩欧美在线不卡 | 嫩草影院黄 | 2022国产精品 | 精品国产乱码久久久久久丨区2区 | 日本精品一区二区三区在线观看 | 免费看av大片 | 亚洲国产成人久久综合一区,久久久国产99 | 欧美日韩国产精品激情在线播放 | 久草色视频 | 国产综合av| 国产精品福利在线 | 日韩成人免费视频 | 中文字幕福利视频 | 久久精品91久久久久久再现 | 久久久久国产一区二区三区 | 欧美日韩中文字幕在线播放 | 凹凸日日摸日日碰夜夜 | 精品九九在线 | 国产欧美视频一区二区 | 特一级毛片| 国产精品九九九 | 野狼在线社区2017入口 | 国产精品精品久久久 | 欧美激情精品久久久久 | 在线看片网站 | 91精品国产91久久久久久三级 | 国产日韩欧美一区二区在线播放 | 国产a区 |