wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

學習單片機,制作了一臺LED電子鐘

查看數: 13796 | 評論數: 31 | 收藏 16
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2020-3-31 00:39

正文摘要:

  學習單片機一段時間了,一直想做一個東西來驗證一下自己的學習效果,“流水燈”之類覺得太簡單;“示波器”、“掃頻儀”、“LCR”、“晶體管特性曲線儀”等儀器又覺得太難,自己覺得還是制作一個電子鐘難度比較 ...

回復

ID:97023 發表于 2025-9-20 16:56
鵜鶘 發表于 2023-7-29 17:49
同好啊,前兩年我也做了個,形式跟你這個差不多,呵呵:

看你的布線,很享受,看來是費了心的。
ID:1089276 發表于 2023-7-30 06:48
相當的牛叉
ID:397054 發表于 2023-7-29 17:49
同好啊,前兩年我也做了個,形式跟你這個差不多,呵呵:







去年電路板上斷了根線,缺比劃,一直沒功夫弄它,放在書架上吃了不少灰,前幾天把它翻出來打算弄好那根線并修改一下程序:



ID:1064667 發表于 2023-7-25 17:19
真不錯,花了不少時間吧
ID:870445 發表于 2022-7-31 12:46
看到這個 真不錯,正想做一個,謝謝了
ID:832201 發表于 2022-7-3 23:35
佩服,
ID:1011444 發表于 2022-6-30 20:43
樓主的動手能力,一個字“棒”,三個字“非常棒”,做出的產品幾乎達到適用的機制水平,這對手工制作電子產品的電子業余愛好者來說,要做到是非常不容易。我也是diy愛好者,業余時間學點兒單片機知識,樓主應為我的學習的榜樣。多謝了
ID:908826 發表于 2021-9-21 16:58
博主可以試試ds3231,這玩意還有溫度采集功能。我覺得挺好用的
ID:23303 發表于 2021-9-21 15:50
下載學習一下,謝謝樓主分享!
ID:56960 發表于 2020-8-3 14:22
樓主強大,木制機箱是亮點,榫鉚結構!
ID:743028 發表于 2020-5-26 10:35
收藏一下
ID:430492 發表于 2020-5-25 19:15
做得不錯,動手能力很棒!
ID:128463 發表于 2020-5-25 16:45
多謝樓主分享!!!
ID:97023 發表于 2020-4-27 00:42
1679079206 發表于 2020-4-13 18:58
推薦樓主學習ad,這樣的話設計出pcb直接交付制作,這樣只需要焊接元件,不需要焊接線路了

謝謝推薦,其實AD我會的,只是平時制作一些小東西,專門去打板有點不劃算。
年青時候不喜歡洞洞板,覺得一邊焊接,一邊思考,太痛苦了,特別是焊接好了以后要拆下來,更難。
最近幾年接觸到了洞洞板布線軟件:LochMaster 4.0,先規劃再焊接,這樣輕松多了,目前對我來說用洞洞板制作是一種享受。至于打板,等今后制作更復雜的東西再說吧。
對你的《USB轉TTL模塊制作》文章很感興趣,期待著更新。
ID:66679 發表于 2020-4-18 21:55

不錯不錯,贊一個。。。『觅Y料,51黑有你更精彩!!!
ID:704585 發表于 2020-4-16 10:05
多謝樓主分享。
ID:630491 發表于 2020-4-13 18:58
推薦樓主學習ad,這樣的話設計出pcb直接交付制作,這樣只需要焊接元件,不需要焊接線路了
ID:690448 發表于 2020-4-8 21:54
樓主手藝好,殼子漂亮,但是瓤子太單調,建議換我這個方案。












評分

參與人數 1黑幣 +10 收起 理由
王朗的誘惑 + 10 優雅

查看全部評分

ID:34298 發表于 2020-4-8 20:32
費勁做的最后時間誤差太大 還是扔了 換成ds3231吧
ID:282850 發表于 2020-4-8 17:14
裝1個DS18B20測溫,如果用2個,一個測室外溫度,一個測室內。我經常出門才知道衣服不夠。
DS18b20精度、可靠性極高。程序想必你有了,如需要,我發給你。當然如果用無線把室外溫度傳來更好,推薦nrf24L01,不過MCU要低功耗的。
ID:116662 發表于 2020-4-4 20:17
這需要時間呀,多謝樓主分享
ID:584814 發表于 2020-4-2 10:36
手工能力超贊
ID:97023 發表于 2020-3-31 21:57
taotie 發表于 2020-3-31 13:00
數碼管前貼黑膜~~~

謝謝,還沒想到這一點。
ID:97023 發表于 2020-3-31 21:56

暫時沒有,包括日期、時間設置都還沒有進行限制。
ID:143767 發表于 2020-3-31 17:30
有定鬧功能嗎?
ID:342822 發表于 2020-3-31 13:00
數碼管前貼黑膜~~~
ID:388929 發表于 2020-3-31 10:28
動手能力強,不錯,而已很漂亮
ID:284488 發表于 2020-3-31 09:09
好東東!謝謝樓主的分享。
ID:691573 發表于 2020-3-31 09:08
不錯不錯,贊一個。。!好資料,51黑有你更精彩!!!
ID:141556 發表于 2020-3-31 08:29
手工真好。
ID:328014 發表于 2020-3-31 01:06
好東東啊 下面是樓主的主程序:
  1. /*******************************************************
  2. 功能:LED數碼管電子鐘
  3. *******************************************************/
  4. #include <reg52.h>
  5. #include <intrins.h>

  6. #define uchar unsigned char
  7. #define uint unsigned int

  8. //函數定義
  9. void DelayMS(uint x);                                                //延時 xms(晶振:11.0592MHz,)
  10. uchar Get_A_Byte_FROM_DS1302();                                //從DS1302讀取一個字節
  11. uchar Read_Data( uchar addr );                                //從DS1302指定位置讀數據
  12. void Write_A_Byte_TO_DS1302( uchar x );                //向DS1302寫入一個字節
  13. void Write_DS1302( uchar addr, uchar dat );        //向DS1302某地址寫數據
  14. void SET_DS1302();                                                        //設置日期時間
  15. void GetTime();                                                                //讀取當前時間日期
  16. void LedDisplay();                                                        //顯示數據
  17. void Scan_Key();                                                        //掃描鍵盤
  18. void Init();                                                                //系統初始化
  19. void Play();                                                                //蜂鳴器發音
  20. void Format_DS1302();                                                //日期格式化

  21. sbit RST = P3^5;                        //DS1302復位線
  22. sbit SDA = P3^6;                        //DS1302數據線
  23. sbit CLK = P3^7;                        //DS1302時鐘線

  24. sbit NOT = P3^4;                        //日期分隔小數點和時間分隔冒號(1-冒號亮、0-小數點亮)

  25. sbit BEEP = P1^7;                        //蜂鳴器輸出端口

  26. uchar Current_Time[7];                //保存所讀取的日期時間(秒分時日月周年)
  27. uchar Display_Buffer[12];   //處理過的日期時間,用于數碼管顯示

  28. uchar DelayTwinkle = 5;                //閃爍延時長度,原200
  29. uchar TimeTwinkle = 4;                //閃爍顯示時間,原30
  30. uchar WeiTwinkle = 0;                //閃爍的位
  31. uchar TimeShake = 100;                //去抖動延時時間長度

  32. uint BeepTime = 0;                //蜂鳴器響一次的間隔時間

  33. uint Set_State = 0;                        //0:走時狀態、1:設置狀態。
  34. bit DateTime_State = 0;                //0:顯示時間、1:顯示日期。
  35. uint Count = 0;                                //記錄“K_Setup”的狀態

  36. //按鍵定義
  37. sbit K_Setup        = P1^2;                //設置/移動/退出
  38. sbit K_Add                = P1^3;                //加1
  39. sbit K_Sub                = P1^0;                //減1
  40. sbit K_OK                = P1^1;                //保存并退出/翻頁
  41. sbit K_GND                = P1^4;                //由于薄膜開關的原因,此腳定義為地。

  42. sbit K_FORMAT        = P1^5;                //格式化(使日期時間內容為:2019-06-17 12:00:00)

  43. //共陽LED數碼管位碼(從左到右:1、2、3、4、5、6)
  44. //用PNP管驅動
  45. code uchar WEI_CODE [] =
  46. {
  47.         0xFE,                //1          11111110
  48.         0xFD,                //2          11111101
  49.         0xFB,                //3          11111011
  50.         0xF7,                //4          11110111
  51.         0xEF,                //5          11101111
  52.         0xDF                //6          11011111
  53. };

  54. //共陽LED數碼管段碼
  55. code uchar DSY_CODE [] =
  56. {
  57.         0x40,                //0
  58.         0x79,                //1
  59.         0x24,                //2
  60.         0x30,                //3
  61.         0x19,                //4
  62.         0x12,                //5
  63.         0x02,                //6
  64.         0x78,                //7
  65.         0x00,                //8
  66.         0x10                //9
  67. };

  68. // 延時 xms(晶振:11.0592MHz,)
  69. void DelayMS(uint x)
  70. {
  71.         uchar i;
  72.         while( x-- )
  73.         {
  74.                 for( i=0; i<111; i++ );
  75.         }
  76. }

  77. //蜂鳴器發音
  78. void Play()
  79. {
  80.         uchar i, j;
  81.         for( i = 0; i < 250; i++ )
  82.         {
  83.                 BEEP = ~BEEP;
  84.                 for (j = 0; j < 30; j++ )
  85.                 {
  86.                         _nop_();                //延時時間長短決定發音頻率
  87.                 }
  88.         }
  89.         BEEP = 0;
  90. }                                                                                                           

  91. //從DS1302讀取一個字節
  92. uchar Get_A_Byte_FROM_DS1302()
  93. {
  94.         uchar i,b,t;
  95.         for ( i = 0; i < 8; i++ )
  96.         {
  97.                 b >>= 1;
  98.                 t = SDA;
  99.                 b |= t << 7;
  100.                 CLK = 1;
  101.                 CLK = 0;
  102.         }
  103.         //BCD碼轉換
  104.         return b / 16 * 10 + b % 16;
  105. }

  106. //從DS1302指定位置讀數據
  107. uchar Read_Data( uchar addr )
  108. {
  109.         uchar dat;
  110.         RST = 0;
  111.         CLK = 0;
  112.         RST = 1;
  113.         Write_A_Byte_TO_DS1302( addr );
  114.         dat = Get_A_Byte_FROM_DS1302();
  115.         CLK = 1;
  116.         RST = 0;
  117.         return dat;
  118. }

  119. //向DS1302寫入一個字節
  120. void Write_A_Byte_TO_DS1302( uchar x )
  121. {
  122.         uchar i;
  123.         for ( i = 0; i < 8; i++ )
  124.         {
  125.                 SDA = x & 1;
  126.                 CLK = 1;
  127.                 CLK = 0;
  128.                 x >>= 1;
  129.         }
  130. }

  131. //向DS1302某地址寫數據
  132. void Write_DS1302( uchar addr, uchar dat )
  133. {
  134.         CLK = 0;
  135.         RST = 1;
  136.         Write_A_Byte_TO_DS1302( addr );
  137.         Write_A_Byte_TO_DS1302( dat );
  138.         CLK = 0;
  139.         RST = 0;
  140. }

  141. //設置日期時間,括號里面是地址
  142. //秒(0x80)分(0x82)時(0x84)日(0x86)月(0x88)周(0x8a)年(0x8c)
  143. void SET_DS1302()
  144. {
  145.         uchar i;
  146.         Write_DS1302( 0x8E, 0x00 );        //寫控制字,取消寫保護
  147.         for ( i = 0; i < 7; i++ )
  148.         {
  149.                 Write_DS1302( 0x80 + 2 * i, ( Current_Time[i] / 10 << 4 ) | ( Current_Time[i] % 10 ) );
  150.         }
  151.         Write_DS1302( 0x8E, 0x80 );        //加保護
  152. }

  153. //日期格式化,使日期時間值為合法數據(使日期時間內容為:2019-06-20 12:00:00)
  154. void Format_DS1302()
  155. {
  156.         Current_Time[0] = 0x00;                //秒
  157.         Current_Time[1] = 0x00;                //分
  158.         Current_Time[2] = 0x0C;                //12小時
  159.         Current_Time[3] = 0x14;                //20日
  160.         Current_Time[4] = 0x06;                //06月
  161.         Current_Time[5] = 0x05;                //周5(星期日是一周的開始)
  162.         Current_Time[6] = 0x13;                //19年
  163.         
  164.         SET_DS1302();
  165. }

  166. //讀取當前時間日期(秒、分、時、日、月、周、年)
  167. //將讀取到的日期時間保存到顯示緩沖區中。
  168. //運行時間約 2.4ms
  169. void GetTime()
  170. {
  171.         uchar i;
  172.         for ( i = 0; i < 7; i++ )
  173.         {
  174.                 Current_Time[i] = Read_Data( 0x81 + 2 * i );
  175.         }
  176.         Display_Buffer[0] = DSY_CODE[ Current_Time[2] / 10 ];           //小時的十位
  177.         Display_Buffer[1] = DSY_CODE[ Current_Time[2] % 10 ];           //小時的個位
  178.         Display_Buffer[2] = DSY_CODE[ Current_Time[1] / 10 ];           //分的十位
  179.         Display_Buffer[3] = DSY_CODE[ Current_Time[1] % 10 ];           //分的個位
  180.         Display_Buffer[4] = DSY_CODE[ Current_Time[0] / 10 ];           //秒的十位
  181.         Display_Buffer[5] = DSY_CODE[ Current_Time[0] % 10 ];           //秒的個位

  182.         Display_Buffer[6] = DSY_CODE[ Current_Time[6] / 10 ];           //年的十位
  183.         Display_Buffer[7] = DSY_CODE[ Current_Time[6] % 10 ];           //年的個位
  184.         Display_Buffer[8] = DSY_CODE[ Current_Time[4] / 10 ];           //月的十位
  185.         Display_Buffer[9] = DSY_CODE[ Current_Time[4] % 10 ];           //月的個位
  186.         Display_Buffer[10] = DSY_CODE[ Current_Time[3] / 10 ];           //日的十位
  187.         Display_Buffer[11] = DSY_CODE[ Current_Time[3] % 10 ];           //日的個位
  188.         Display_Buffer[12] = DSY_CODE[ Current_Time[5] - 1 ];           //周的個位(星期日是一周的開始)
  189. }

  190. //顯示數據(運行時間約 12ms)
  191. void LedDisplay()
  192. {
  193.         uchar i;
  194.         if ( Set_State == 0 )                //走時狀態
  195.         {
  196.                 WeiTwinkle = 0;
  197.                 if ( DateTime_State == 0 )                        //顯示時間
  198.                 {
  199.                         NOT = 1;
  200.                         for ( i = 0; i < 6; i++ )
  201.                         {
  202.                                 P2 = WEI_CODE[ i ];
  203.                                 P0 = Display_Buffer[ i ];
  204.                                 DelayMS(1);
  205.                                 P2 = 0xFF;
  206.                                 P0 = 0xFF;
  207.                                 DelayMS(1);
  208.                         }
  209.                 }
  210.                 else                        //顯示日期
  211.                 {
  212.                         NOT = 0;
  213.                         for ( i = 0; i < 6; i++ )
  214.                         {
  215.                                 P2 = WEI_CODE[ i ];
  216.                                 P0 = Display_Buffer[ i + 6 ];
  217.                                 DelayMS(1);
  218.                                 P2 = 0xFF;
  219.                                 P0 = 0xFF;
  220.                                 DelayMS(1);
  221.                         }
  222.                 }
  223.         }
  224.         else                //設置狀態
  225.         {
  226.                 uchar j,k;
  227.                 if ( DateTime_State == 0 )                        //顯示時間
  228.                 {
  229.                         NOT = 1;
  230.                         for ( i = 0; i < 6; i++ )
  231.                         {
  232.                                 if ( i != WeiTwinkle &&  i != WeiTwinkle + 1 )         //不閃爍的位
  233.                                 {
  234.                                         P2 = WEI_CODE[ i ];
  235.                                         P0 = Display_Buffer[ i ];
  236.                                         DelayMS(1);
  237.                                 }
  238.                                 else if ( j > DelayTwinkle )   //閃爍的位(2位)
  239.                                 {
  240.                                         for ( k = 0; k < TimeTwinkle; k++ )
  241.                                         {
  242.                                                 P2 = WEI_CODE[ i ];
  243.                                                 P0 = Display_Buffer[ i ];
  244.                                                 DelayMS( 1 );
  245.                                                 P2 = WEI_CODE[ i + 1 ];
  246.                                                 P0 = Display_Buffer[ i + 1 ];
  247.                                                 DelayMS( 1 );
  248.                                         }
  249.                                         j = 0;
  250.                                 }
  251.                                 P2 = 0xFF;
  252.                                 P0 = 0xFF;
  253.                                 DelayMS(1);
  254.                                 j++;
  255.                         }
  256.                 }
  257.                 else                        //顯示日期
  258.                 {
  259.                         NOT = 0;
  260.                         for ( i = 0; i < 6; i++ )
  261.                         {
  262.                                 if ( i != WeiTwinkle &&  i != WeiTwinkle + 1 )         //不閃爍的位
  263.                                 {
  264.                                         P2 = WEI_CODE[ i ];
  265.                                         P0 = Display_Buffer[ i + 6 ];
  266.                                         DelayMS(2);
  267.                                 }
  268.                                 else if ( j > DelayTwinkle )   //閃爍的位(2位)
  269.                                 {
  270.                                         for ( k = 0; k < TimeTwinkle; k++ )
  271.                                         {
  272.                                                 P2 = WEI_CODE[ i ];
  273.                                                 P0 = Display_Buffer[ i + 6 ];
  274.                                                 DelayMS( 1 );
  275.                                                 P2 = WEI_CODE[ i+1 ];
  276.                                                 P0 = Display_Buffer[ i + 7 ];
  277.                                                 DelayMS( 1 );
  278.                                         }
  279.                                         j = 0;
  280.                                 }
  281.                                 P2 = 0xFF;
  282.                                 P0 = 0xFF;
  283.                                 DelayMS(1);
  284.                                 j++;
  285.                         }
  286.                 }
  287.         }
  288. }

  289. //掃描鍵盤
  290. void Scan_Key()
  291. {
  292.         //設置
  293.         if ( K_Setup == 0 )        
  294.         {
  295.                 DelayMS( TimeShake );                   //去抖動
  296.                 if ( K_Setup == 0 )
  297.                 {
  298.                         Set_State ++;

  299.                         if ( Set_State > 6 )
  300.                         {
  301.                                 Set_State = 0;
  302.                                 DateTime_State = 0;
  303.                                 WeiTwinkle = 0;
  304.                         }
  305.                         else
  306.                         {
  307.                                 switch ( Set_State )
  308.                                 {
  309.                                         case 0:
  310.                                                 WeiTwinkle = 0;
  311.                                                 break;
  312.                                         case 1:
  313.                                                 WeiTwinkle = 0;
  314.                                                 break;
  315.                                         case 2:
  316.                                                 WeiTwinkle = 2;
  317.                                                 break;
  318.                                         case 3:
  319.                                                 WeiTwinkle = 4;
  320.                                                 break;
  321.                                         case 4:
  322.                                                 WeiTwinkle = 0;
  323.                                                 break;
  324.                                         case 5:
  325.                                                 WeiTwinkle = 2;
  326.                                                 break;
  327.                                         case 6:
  328.                                                 WeiTwinkle = 4;
  329.                                                 break;
  330.                                 }

  331.                                 if ( Set_State < 4 )
  332.                                 {
  333.                                         DateTime_State = 0;                //第一頁,顯示時間
  334.                                 }
  335.                                 else
  336.                                 {
  337.                                         DateTime_State = 1;                //第二頁,顯示日期
  338.                                 }
  339.                         }
  340.                         DelayMS(1);
  341.                         Play();
  342.                 }
  343.         }
  344.         
  345.         //在設置時才能操作的按鍵
  346.         if ( Set_State != 0 )
  347.         {
  348.                 //調時:增加(設置狀態有效)
  349.                 if ( K_Add == 0 )        
  350.                 {
  351.                         DelayMS( TimeShake );                   //去抖動
  352.                         if ( K_Add == 0 )
  353.                         {
  354.                                 switch( WeiTwinkle )
  355.                                 {
  356.                                         case 0:                //時/年
  357.                                                 if ( DateTime_State == 0 )
  358.                                                 {                        //小時
  359.                                                         Current_Time[2]++;
  360.                                                         if ( Current_Time[2] > 23 )
  361.                                                         {
  362.                                                                 Current_Time[2] = 0;
  363.                                                         }
  364.                                                         Display_Buffer[0] = DSY_CODE[ Current_Time[2] / 10 ];
  365.                                                         Display_Buffer[1] = DSY_CODE[ Current_Time[2] % 10 ];
  366.                                                 }
  367.                                                 else
  368.                                                 {                        //年
  369.                                                         Current_Time[6]++;
  370.                                                         Display_Buffer[6] = DSY_CODE[ Current_Time[6] / 10 ];
  371.                                                         Display_Buffer[7] = DSY_CODE[ Current_Time[6] % 10 ];
  372.                                                 }
  373.                                                 break;
  374.                                         case 2:                //分/月
  375.                                                 if ( DateTime_State == 0 )
  376.                                                 {                //分
  377.                                                         Current_Time[1]++;
  378.                                                         if ( Current_Time[1] > 59 )
  379.                                                         {
  380.                                                                 Current_Time[1] = 0;
  381.                                                         }
  382.                                                         Display_Buffer[2] = DSY_CODE[ Current_Time[1] / 10 ];
  383.                                                         Display_Buffer[3] = DSY_CODE[ Current_Time[1] % 10 ];
  384.                                                 }
  385.                                                 else
  386.                                                 {                //月
  387.                                                         Current_Time[4]++;
  388.                                                         if ( Current_Time[4] > 12 )
  389.                                                         {
  390.                                                                 Current_Time[4] = 1;
  391.                                                         }
  392.                                                         Display_Buffer[8] = DSY_CODE[ Current_Time[4] / 10 ];
  393.                                                         Display_Buffer[9] = DSY_CODE[ Current_Time[4] % 10 ];
  394.                                                 }
  395.                                                 break;
  396.                                         case 4:                //秒/日
  397.                                                 if ( DateTime_State == 0 )
  398.                                                 {                //秒
  399.                                                         Current_Time[0]++;
  400.                                                         if ( Current_Time[0] > 59 )
  401.                                                         {
  402.                                                                 Current_Time[0] = 0;
  403.                                                         }
  404.                                                         Display_Buffer[4] = DSY_CODE[ Current_Time[0] / 10 ];
  405.                                                         Display_Buffer[5] = DSY_CODE[ Current_Time[0] % 10 ];
  406.                                                 }
  407.                                                 else
  408.                                                 {                //日
  409.                                                         Current_Time[3]++;
  410.                                                         if ( Current_Time[3] > 31 )
  411.                                                         {
  412.                                                                 Current_Time[3] = 1;
  413.                                                         }
  414.                                                         Display_Buffer[10] = DSY_CODE[ Current_Time[3] / 10 ];
  415.                                                         Display_Buffer[11] = DSY_CODE[ Current_Time[3] % 10 ];
  416.                                                 }
  417.                                                 break;
  418.                                 }
  419.                                 Play();
  420.                         }
  421.                 }

  422.                 //調時:減。ㄔO置狀態有效)
  423.                 if ( K_Sub == 0 )        
  424.                 {
  425.                         DelayMS( TimeShake );                   //去抖動
  426.                         if ( K_Sub == 0 )
  427.                         {
  428.                                 switch( WeiTwinkle )
  429.                                 {
  430.                                         case 0:                //時/年
  431.                                                 if ( DateTime_State == 0 )
  432.                                                 {                        //小時
  433.                                                         Current_Time[2]--;
  434.                                                         if ( Current_Time[2] < 0 )
  435.                                                         {
  436.                                                                 Current_Time[2] = 23;
  437.                                                         }
  438.                                                         Display_Buffer[0] = DSY_CODE[ Current_Time[2] / 10 ];
  439.                                                         Display_Buffer[1] = DSY_CODE[ Current_Time[2] % 10 ];
  440.                                                 }
  441.                                                 else
  442.                                                 {                        //年
  443.                                                         Current_Time[6]--;
  444.                                                         if ( Current_Time[6] < 0 )
  445.                                                         {
  446.                                                                 Current_Time[6] = 0;
  447.                                                         }
  448.                                                         Display_Buffer[6] = DSY_CODE[ Current_Time[6] / 10 ];
  449.                                                         Display_Buffer[7] = DSY_CODE[ Current_Time[6] % 10 ];
  450.                                                 }
  451.                                                 break;
  452.                                         case 2:                //分/月
  453.                                                 if ( DateTime_State == 0 )
  454.                                                 {                //分
  455.                                                         Current_Time[1]--;
  456.                                                         if ( Current_Time[1] < 0 )
  457.                                                         {
  458.                                                                 Current_Time[1] = 59;
  459.                                                         }
  460.                                                         Display_Buffer[2] = DSY_CODE[ Current_Time[1] / 10 ];
  461.                                                         Display_Buffer[3] = DSY_CODE[ Current_Time[1] % 10 ];
  462.                                                 }
  463.                                                 else
  464.                                                 {                //月
  465.                                                         Current_Time[4]--;
  466.                                                         if ( Current_Time[4] <= 0 )
  467.                                                         {
  468.                                                                 Current_Time[4] = 12;
  469.                                                         }
  470.                                                         Display_Buffer[8] = DSY_CODE[ Current_Time[4] / 10 ];
  471.                                                         Display_Buffer[9] = DSY_CODE[ Current_Time[4] % 10 ];
  472.                                                 }
  473.                                                 break;
  474.                                         case 4:                //秒/日
  475.                                                 if ( DateTime_State == 0 )
  476.                                                 {                //秒
  477.                                                         Current_Time[0]--;
  478.                                                         if ( Current_Time[0] < 0 )
  479.                                                         {
  480.                                                                 Current_Time[0] = 59;
  481.                                                         }
  482.                                                         Display_Buffer[4] = DSY_CODE[ Current_Time[0] / 10 ];
  483.                                                         Display_Buffer[5] = DSY_CODE[ Current_Time[0] % 10 ];
  484.                                                 }
  485.                                                 else
  486.                                                 {                //日
  487.                                                         Current_Time[3]--;
  488.                                                         if ( Current_Time[3] <= 0 )
  489.                                                         {
  490.                                                                 Current_Time[3] = 31;
  491.                                                         }
  492.                                                         Display_Buffer[10] = DSY_CODE[ Current_Time[3] / 10 ];
  493.                                                         Display_Buffer[11] = DSY_CODE[ Current_Time[3] % 10 ];
  494.                                                 }
  495.                                                 break;
  496.                                 }
  497.                                 Play();
  498.                         }
  499.                 }
  500.         
  501.                 //保存數據并退回到走時狀態(設置狀態有效)
  502.                 if ( K_OK == 0 )         
  503.                 {
  504.                         DelayMS( TimeShake );                   //去抖動
  505.                         if ( K_OK == 0 )
  506.                         {
  507.                                 SET_DS1302();
  508.                                 Set_State = 0;
  509.                                 Play();
  510.                         }
  511.                 }

  512.                 //日期格式化,使日期時間值為合法數據(這個按鍵不安裝在機殼上,如要操作,直接用杜邦線短接既可。)
  513.                 if ( K_FORMAT == 0 )
  514.                 {
  515.                         DelayMS( TimeShake );
  516.                         if ( K_FORMAT == 0 )
  517.                         {
  518.                                 Format_DS1302();
  519.                                 Set_State = 0;
  520.                         }
  521.                 }
  522.         }
  523.         else
  524.         {
  525.                 //走時狀態(切換日期與時間)
  526.                 if ( K_OK == 0 )         
  527.                 {
  528.                         DelayMS( TimeShake );                   //去抖動
  529.                         if ( K_OK == 0 )
  530.                         {
  531.                                 DateTime_State = ~DateTime_State;
  532.                                 DelayMS(1);
  533.                                 Play();
  534.                         }
  535.                 }
  536.         }
  537. }

  538. //判斷是否是閏年
  539. //uchar isLeapYear(uint y)
  540. //{
  541. //        return ( y % 4 == 0 && y % 100 != 0 ) || ( y % 400 == 0 );
  542. //}

  543. //系統初始化
  544. //T0 用于鍵盤掃描,每50ms一次。
  545. void Init()
  546. {
  547.         K_GND = 0;                //薄膜開關的地。
  548.         TMOD = 0x01;        //設置定時器0、1為工作方式1
  549.         TH0 = 0;                //65.536ms
  550.         TL0 = 0;
  551.         ET0 = 1;        //允許定時器0
  552.         TR0 = 1;        //啟動定時器0
  553.         EA = 1;                //全局中斷開
  554. }

  555. //主函數
  556. void main()
  557. {
  558.         Init();
  559.         while(1)
  560.         {
  561.                 if ( Set_State == 0 )        //走時狀態
  562.                 {
  563.                         GetTime();                        //讀取時間數據(運行時間約 2.4ms)
  564.                 }
  565.                 LedDisplay();
  566.         }
  567. }

  568. //定時器0中斷
  569. void Time0() interrupt 1
  570. {
  571.         TR0 = 0;        //關閉定時器0
  572.         Scan_Key();                  //掃描鍵盤
  573.         TH0 = 0;                //65.536ms產生一次中斷
  574.         TL0 = 0;
  575.         TR0 = 1;        //啟動定時器0
  576. }

  577. //定時器1中斷
  578. //控制蜂鳴器2秒響一聲
  579. //void Time1() interrupt 3
  580. //{
  581. //        TR1 = 0;
  582. //        if ( BeepTime >= 40 )
  583. //        {
  584. ////                Play();
  585. //                BeepTime = 0;
  586. //        }
  587. //        BeepTime++;
  588. //        TH1 = ( 65536 - 50000 ) / 256;
  589. //        TL1 = ( 65536 - 50000 ) % 256;
  590. //        TR1 = 1;
  591. //}
復制代碼

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
免费高清在线观看| 一区国产精品视频| 欧美日韩国产经典色站一区二区三区| 欧美日韩精品一区二区在线播放 | 欧美激情二区| gogo高清午夜人体在线| 国产精品伦一区二区| 日韩国产一二三区| 精品福利久久久| 禁久久精品乱码| 韩国一区二区在线观看| 欧美激情一区二区三区不卡 | h片视频在线观看| 欧美综合影院| 精品国产不卡| 久久一综合视频| 91网址在线看| 欧美午夜视频在线观看| 亚洲婷婷丁香| 欧美激情1区| 国产精品一区在线| 亚洲精品高清在线观看| 欧美一区二区私人影院日本| 中文字幕不卡在线视频极品| 茄子视频成人在线| 欧美最大成人综合网| 日本一本二本在线观看| 午夜视频在线观看国产| 国产稀缺真实呦乱在线| 三级视频在线看| av观看网址| 婷婷视频在线| 一区二区亚洲视频| 在线看片一区| 久久久久久影院| 免费久久久一本精品久久区| av在线电影免费观看| 中文字幕av一区二区三区免费看| 黑人玩弄人妻一区二区三区| 老司机2019福利精品视频导航| 3atv一区二区三区| 成人免费看片98| 奇米一区二区| 欧美重口另类videos人妖| 日韩a级片在线观看| 一区二区三区四区高清视频| 欧美激情第99页| 日本国产亚洲| 日本亚洲精品| 亚洲国产91视频| 中出一区二区| 26uuu亚洲| 欧美日韩亚洲综合一区| 俺去了亚洲欧美日韩| 午夜精品一区二区三区在线| 日本不卡二区高清三区| 成人三级做爰av| www.久久视频| h视频免费在线| 波多野结衣中文在线| av永久不卡| 久久99精品久久久久久国产越南| 艳妇臀荡乳欲伦亚洲一区| 精品亚洲国产成av人片传媒| 亚洲va男人天堂| 无遮挡又爽又刺激的视频| 91在线播放观看| 国产又白又嫩又爽又黄| √新版天堂资源在线资源| 日韩激情啪啪| 成人美女在线视频| 欧美丰满嫩嫩电影| 国产成人精品视| 加勒比海盗1在线观看免费国语版| aaaaaav| 国产富婆一级全黄大片| 人人澡人人爽| 天天综合在线视频| 在线看的网站你懂| 日韩精品一区二区三区中文在线| 日韩激情中文字幕| 亚洲成a人片综合在线| 久久精品国产亚洲| 视频一区二区综合| 高潮毛片无遮挡| 中文天堂最新版本在线观看| 欧美成熟毛茸茸| 国产三级精品三级在线观看国产| 韩国精品久久久| 一区二区国产视频| 黄网站色欧美视频| 97在线视频免费观看| 九九热只有这里有精品| www日韩精品| 国产视频二区| 网曝91综合精品门事件在线| 国产精品无码永久免费888| 欧美大成色www永久网站婷| 男人添女人下面高潮视频| 免费的毛片视频| 手机亚洲第一页| 性xxxx欧美老肥妇牲乱| 日韩欧美在线一区| 国产精品10p综合二区| 美女被到爽高潮视频| 色先锋资源网| 亚洲欧美日本国产| 国产精品夫妻自拍| 18一19gay欧美视频网站| 日韩av片免费观看| 亚洲免费国产| 六九午夜精品视频| 91日韩在线专区| 萌白酱国产一区二区| 成人精品小视频| 亚洲国产精品18久久久久久| 国产盗摄精品一区二区酒店| 久久99国产乱子伦精品免费| 精品一区二区三区四区| 亚洲av综合色区| 亚洲一级黄色大片| 1769免费视频在线观看| 日本va欧美va瓶| 亚洲男人天堂2023| 男女午夜激情视频| 国产噜噜噜噜久久久久久久久| 悠悠资源网亚洲青| 最近中文字幕mv第三季歌词| 亚洲精品无吗| 午夜一区二区三区视频| 97伦理在线四区| 国产福利视频网站| 亚洲美女在线免费观看| 欧美影院一区| 欧美sm美女调教| www.在线观看av| 国内爆初菊对白视频| 男人皇宫亚洲男人2020| 中文字幕精品一区二区精品绿巨人| 欧美最猛性xxxxx免费| 亚洲人成人无码网www国产| 国产黄视频网站| 欧美在线二区| 欧美精品一区二区在线播放| 欧美 日韩 亚洲 一区| 亚洲日本色图| 51社区在线成人免费视频| 亚洲综合色丁香婷婷六月图片| 亚洲激情五月婷婷| 99久久精品免费看国产四区| 日韩免费在线视频观看| av大片在线看| 成人的网站免费观看| 91av在线免费观看| 国产又粗又黄又猛| 你懂的在线观看视频网站| 麻豆精品视频在线观看免费| 欧美日韩第一视频| 日韩人妻无码精品综合区| 91久久影院| 麻豆免费精品视频| 久久久日本电影| 激情无码人妻又粗又大| 国产一区精品| 成人黄色国产精品网站大全在线免费观看| 日本高清不卡的在线| 神马久久精品综合| 亚洲s色大片| 99re8在线精品视频免费播放| 国产精品视频网址| 日韩一区二区视频在线| 中文字幕一区久| 亚洲国产日韩a在线播放性色| 亚洲啪啪av| 最近免费中文字幕mv视频| 久久爱www成人| 亚洲精品电影网站| 大尺度在线观看| 在线国产1区| 成人性生交大片免费看视频在线| 国产日韩欧美日韩| 免费在线不卡av| 欧洲精品久久久久毛片完整版| 色婷婷亚洲精品| 黄色一级在线视频| 免费看涩涩视频软件| 亚洲国产免费看| 久久免费精品视频| 欧美黄色免费看| 狠狠躁少妇一区二区三区| 亚洲另类中文字| 中文字幕在线中文| 91最新网址| 日韩香蕉视频| 韩国国内大量揄拍精品视频| 久久中文字幕无码| 久久r热视频| 色婷婷av久久久久久久| 国产精品秘入口18禁麻豆免会员| av网址观看| 美国十次了思思久久精品导航| 欧美最猛性xxxxx免费| 日本午夜视频在线观看| 999精品嫩草久久久久久99| 91精品国产一区二区三区香蕉| 亚洲色图欧美自拍| 欧美日本网站| 国产精品妹子av| 可以在线看黄的网站| 免费看涩涩视频软件| 老司机精品视频在线| 亚洲va欧美va国产综合久久| 国产综合视频在线| 外国成人激情视频| 国内自拍欧美激情| 波多野结衣网站| 欧美日韩另类图片| 中文字幕不卡在线视频极品| 麻豆国产尤物av尤物在线观看| 日韩一区二区三区免费| 91精品国产91综合久久蜜臀| 亚洲精品欧美日韩专区| www.超碰在线.com| 成人毛片在线| 欧美极品少妇与黑人| 日本特级黄色片| 第四色在线一区二区| 亚洲午夜未满十八勿入免费观看全集| 精品人体无码一区二区三区| 色偷偷色偷偷色偷偷在线视频| 欧美羞羞免费网站| 久久久老熟女一区二区三区91| 国产精品视频资源| 日韩精品在线观看视频| 欧美日韩在线免费观看视频| 嫩草黄色影院| 在线观看国产精品网站| 九色91porny| 日韩网站中文字幕| 在线观看精品国产视频| 亚洲在线精品视频| 国产免费成人| 亚洲视频在线二区| 色视频在线观看免费| 欧美午夜寂寞影院| 青青操国产视频| 97精品国产福利一区二区三区| 97国产超碰| 天天色天天看| 亚洲高清免费一级二级三级| 波多野结衣一本| 国产精品色在线网站| 国产精品久久久久999| 91抖音在线观看| 中文字幕一区在线观看| 国产精品成人无码专区| 欧美电影院免费观看| 2019av中文字幕| 国产成人免费视频app| 国产欧美1区2区3区| 欧美性猛交乱大交| av在线亚洲一区| 欧美一级免费视频| brazzers欧美最新版视频| 中文字幕不卡的av| 中国av免费看| 欧美一级一片| 成人在线中文字幕| aaa大片免费观看| 91久久精品一区二区三区| 国产精品久久久精品四季影院| 国产精品福利在线观看播放| 欧美黑人3p| 18视频免费网址在线观看| 精品在线观看国产| 丰满人妻av一区二区三区| 丰满亚洲少妇av| www,av在线| 国产999精品在线观看| 国产精品久久久久久久天堂 | 香蕉视频禁止18| 欧洲成人一区| 日韩av免费看| 新天天拍日日拍狠狠拍| 色欲综合视频天天天| 日韩美女视频网站| 小嫩嫩精品导航| 国产精品国产亚洲精品看不卡| 国产污视频在线播放| 欧美激情啊啊啊| 嫩草影院视频| 欧美日韩一区二区精品| 日韩在线观看第一页| 老司机精品久久| 国内外成人激情视频| 亚洲tv在线| 亚洲综合中文字幕在线观看| 天堂社区日本电影超碰| 91精品国产欧美日韩| 国产农村妇女毛片精品| 99免费精品在线观看| 一级特黄a大片免费| 欧美色爱综合| 中文字幕乱码一区二区三区| 美女网站视频在线| 91精品国产高清久久久久久久久| 大肉大捧一进一出好爽| 欧美色精品天天在线观看视频| 中文字幕一区二区三区四区免费看| 国产一区二区三区免费在线观看| 亚洲第一天堂久久| 特黄特色欧美大片| 午夜精品一区二区在线观看的| 先锋成人av| 97精品国产97久久久久久免费 | 清纯唯美亚洲综合| 爆操欧美孕妇| 日韩欧美国产电影| 五月婷婷丁香花| 亚洲天堂成人在线观看| 免费中文字幕视频| 日精品一区二区| 九九九九九国产| 精品日韩一区| 亚洲国产一二三精品无码| 亚洲第一二三四区| 3d动漫精品啪啪一区二区三区免费 | 日韩一中文字幕| 日本免费资源| 91精品国产综合久久久蜜臀图片| 国产福利第一页| 综合激情成人伊人| 天堂网av手机版| av电影一区二区| 黑人狂躁日本娇小| 日本三级亚洲精品| 日韩av成人网| 午夜电影亚洲| 少妇网站在线观看| 欧美男gay| 免费人成在线观看视频播放| 色悠久久久久综合先锋影音下载| 你懂的视频在线一区二区| 日韩理论视频| 97超碰在线播放| 蜜臀av国内免费精品久久久夜夜| 国产精品激情自拍| 午夜视频在线| 日本最新高清不卡中文字幕| 日本成人一区| 性欧美在线看片a免费观看| 佐山爱痴汉视频一区二区三区| www.日韩免费| 免费播放av| 精品国产自在精品国产浪潮| 东北一级毛片| 最近2019中文字幕一页二页| 九七影院理论片| 日韩一级裸体免费视频| 国产美女免费观看| 日韩亚洲欧美中文在线| 免费高清视频日韩| 久久九九国产精品怡红院| 九色视频一区| 久久91精品国产| 青青免费在线视频| 欧美中文在线观看国产| 69av在线| 91综合免费在线| 日韩av影片| 欧美13一14另类| 福利视频亚洲| 亚洲一区精彩视频| 91精品导航| 一女被多男玩喷潮视频| 日韩在线综合| 特黄视频免费观看| 精品白丝av| 白丝女仆被免费网站| 美女国产一区二区三区| 少妇视频一区二区| av电影在线观看完整版一区二区| 国产大片aaa| 中文字幕亚洲视频| 成人激情四射网| 欧美日韩情趣电影| 天堂视频在线免费观看| 亚洲欧美中文在线视频| 三上悠亚一区二区三区| 欧美亚洲国产日本| 欧美1234区| 日本婷婷久久久久久久久一区二区 | 久在线观看福利视频| 精品久久久久久久久久久院品网| 爱爱网站免费| 不卡av日日日| 日本视频在线观看| 成人资源av| 中文字幕av一区二区三区四区| 国产二区视频在线播放|