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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10168|回復: 8
打印 上一主題 下一主題
收起左側

全網首發!arduinoUNO 1602可調肘間的時鐘

[復制鏈接]
跳轉到指定樓層
樓主
我剛入aruino這個坑,看著網上幾乎沒有這種arduino的1602時鐘程序,就自己寫了一個,改了十幾次bug,現在感覺還比較完善了,就發上來給大家看看,這個是UNO的,如果要別的模塊,比如NANo、mini的程序,可以站內信,還有這個時鐘是1602、2402、2002 、2004屏通用的,還有這個程序不支持閏年加一,因為程序內存不夠用
下面是圖:開機
年設置
月設置
日設置
小時設置
分設置
運行
接線;設置;uno13到地 加;uno12到地 減;uno11到地 1602 4.5.6腳到uno10.9.8  11到14接uno7.6.5.4  

全部資料下載地址:
uno 可設置時間的萬年歷程序(1).rar (17.25 KB, 下載次數: 75)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2017-8-25 20:16 | 只看該作者
好東東 能分享一下源碼嗎?
回復

使用道具 舉報

板凳
ID:136110 發表于 2017-8-28 09:35 | 只看該作者
源碼:
  1. void main0()
  2. {
  3.         OS0.OS_init();
  4.         控制器.OS_init();
  5.         延時器.OS_init();
  6.         屏幕2004.OS_init();
  7.         功能.OS_init();
  8.         設置加.OS_init();
  9.         信息顯示器.OS_init();
  10.         設置減.OS_init();
  11.         數據列表.OS_init();
  12.         OS0.CreateDriver( (#addr 控制器.OS_run), 控制器.OS_time );
  13.         OS0.CreateDriver( (#addr 延時器.OS_run), 延時器.OS_time );
  14.         OS0.CreateDriver( (#addr 功能.OS_run), 功能.OS_time );
  15.         OS0.CreateDriver( (#addr 設置加.OS_run), 設置加.OS_time );
  16.         OS0.CreateDriver( (#addr 設置減.OS_run), 設置減.OS_time );
  17.         OS0.CreateTask( #addr dispatch );
  18.         OS_VarInit();
  19.         OS0.Start();
  20.         dispatch:
  21.         forever {
  22.                 if( 控制器.OS_EventFlag.0(bit) == 1 ) {
  23.                         控制器.OS_EventFlag.0(bit) = 0;
  24.                         if( 控制器_系統啟動時_enable && x_控制器_0_ResCount == 0 ) {
  25.                                 OS0.AppTCB[OS0.CurrentTaskIndex].e_res_count -> x_控制器_0_ResCount;
  26.                                 OS0.CreateTask( #addr 控制器_系統啟動時 ); OS0.Schedule();
  27.                         }
  28.                 }
  29.                 if( 控制器.OS_EventFlag.1(bit) == 1 ) {
  30.                         控制器.OS_EventFlag.1(bit) = 0;
  31.                         if( 控制器_反復執行_enable && x_控制器_1_ResCount == 0 ) {
  32.                                 OS0.AppTCB[OS0.CurrentTaskIndex].e_res_count -> x_控制器_1_ResCount;
  33.                                 OS0.CreateTask( #addr 控制器_反復執行 ); OS0.Schedule();
  34.                         }
  35.                 }
  36.                 if( 功能.OS_EventFlag.0(bit) == 1 ) {
  37.                         功能.OS_EventFlag.0(bit) = 0;
  38.                         if( 功能_按鍵按下時_enable && x_功能_0_ResCount == 0 ) {
  39.                                 OS0.AppTCB[OS0.CurrentTaskIndex].e_res_count -> x_功能_0_ResCount;
  40.                                 OS0.CreateTask( #addr 功能_按鍵按下時 ); OS0.Schedule();
  41.                         }
  42.                 }
  43.                 if( 設置加.OS_EventFlag.0(bit) == 1 ) {
  44.                         設置加.OS_EventFlag.0(bit) = 0;
  45.                         if( 設置加_按鍵按下時_enable && x_設置加_0_ResCount == 0 ) {
  46.                                 OS0.AppTCB[OS0.CurrentTaskIndex].e_res_count -> x_設置加_0_ResCount;
  47.                                 OS0.CreateTask( #addr 設置加_按鍵按下時 ); OS0.Schedule();
  48.                         }
  49.                 }
  50.                 if( 設置減.OS_EventFlag.0(bit) == 1 ) {
  51.                         設置減.OS_EventFlag.0(bit) = 0;
  52.                         if( 設置減_按鍵按下時_enable && x_設置減_0_ResCount == 0 ) {
  53.                                 OS0.AppTCB[OS0.CurrentTaskIndex].e_res_count -> x_設置減_0_ResCount;
  54.                                 OS0.CreateTask( #addr 設置減_按鍵按下時 ); OS0.Schedule();
  55.                         }
  56.                 }
  57.                 控制器.OS_thread();
  58.                 屏幕2004.OS_thread();
  59.                 OS0.Schedule();
  60.                 控制器.OS_ClearWatchDog();
  61.         }
  62. }
  63. void 控制器_系統啟動時()
  64. {
  65.         控制器_反復執行_enable = false;
  66.         屏幕2004.清空();
  67.         (月個位)=(1);
  68.         (日個位)=(1);
  69.         信息顯示器.在第_行第_列顯示信息_((1),(1),("20"));
  70.         屏幕2004.第_行第_列顯示字符_((1),(3),(年十位));
  71.         屏幕2004.第_行第_列顯示字符_((1),(4),(年個位));
  72.         屏幕2004.第_行第_列顯示字符_((1),(6),(月十位));
  73.         屏幕2004.第_行第_列顯示字符_((1),(7),(月個位));
  74.         屏幕2004.第_行第_列顯示字符_((1),(9),(日十位));
  75.         屏幕2004.第_行第_列顯示字符_((1),(10),(日個位));
  76.         屏幕2004.第_行第_列顯示字符_((2),(8),(秒個位));
  77.         屏幕2004.第_行第_列顯示字符_((2),(7),(秒十位));
  78.         屏幕2004.第_行第_列顯示字符_((2),(6),(':'));
  79.         屏幕2004.第_行第_列顯示字符_((2),(5),(分鐘個位));
  80.         屏幕2004.第_行第_列顯示字符_((2),(4),(分鐘十位));
  81.         屏幕2004.第_行第_列顯示字符_((2),(3),(':'));
  82.         屏幕2004.第_行第_列顯示字符_((2),(2),(小時個位));
  83.         屏幕2004.第_行第_列顯示字符_((2),(1),(小時十位));
  84.         (w)=(0);
  85.         if( (w)==(0) ) {
  86.                 信息顯示器.在第_行第_列顯示信息_((2),(10),(" SET"));
  87.         }
  88.         數據列表.添加數據_((1));
  89.         數據列表.添加數據_((0));
  90.         數據列表.添加數據_((3));
  91.         數據列表.添加數據_((0));
  92.         數據列表.添加數據_((5));
  93.         數據列表.添加數據_((0));
  94.         數據列表.添加數據_((7));
  95.         數據列表.添加數據_((8));
  96.         數據列表.添加數據_((0));
  97.         數據列表.添加數據_((10));
  98.         數據列表.添加數據_((0));
  99.         數據列表.添加數據_((12));
  100. }
  101. void 加_次( int32 A )
  102. {
  103.         if( (w)==(1) ) {
  104.                 (年)+(1);
  105.                 if( (年)>(99) ) {
  106.                         (年)=(0);
  107.                 }
  108.                 (年個位)=((年)%(10));
  109.                 (年十位)=((年)/(10));
  110.                 屏幕2004.第_行第_列顯示字符_((1),(4),(年個位));
  111.                 屏幕2004.第_行第_列顯示字符_((1),(3),(年十位));
  112.         }
  113.         if( (w)==(2) ) {
  114.                 (月)+(1);
  115.                 if( (月)>(12) ) {
  116.                         (月)=(1);
  117.                 }
  118.                 (月個位)=((月)%(10));
  119.                 (月十位)=((月)/(10));
  120.                 屏幕2004.第_行第_列顯示字符_((1),(7),(月個位));
  121.                 屏幕2004.第_行第_列顯示字符_((1),(6),(月十位));
  122.         }
  123.         if( (w)==(3) ) {
  124.                 (日)+(1);
  125.                 if( !((月)==(2)) ) {
  126.                         if( (月)==(數據列表.讀取第_個數據((月))) ) {
  127.                                 if( (日)>(31) ) {
  128.                                         (日)=(1);
  129.                                 }
  130.                         }
  131.                         else {
  132.                                 if( (日)>(30) ) {
  133.                                         (日)=(1);
  134.                                 }
  135.                         }
  136.                 }
  137.                 else {
  138.                         if( (日)>(28) ) {
  139.                                 (日)=(1);
  140.                         }
  141.                 }
  142.                 (日個位)=((日)%(10));
  143.                 (日十位)=((日)/(10));
  144.                 屏幕2004.第_行第_列顯示字符_((1),(10),(日個位));
  145.                 屏幕2004.第_行第_列顯示字符_((1),(9),(日十位));
  146.         }
  147.         if( (w)==(4) ) {
  148.                 (小時)+(1);
  149.                 if( (小時)>(23) ) {
  150.                         (小時)=(0);
  151.                 }
  152.                 (小時個位)=((小時)%(10));
  153.                 (小時十位)=((小時)/(10));
  154.                 屏幕2004.第_行第_列顯示字符_((2),(2),(小時個位));
  155.                 屏幕2004.第_行第_列顯示字符_((2),(1),(小時十位));
  156.         }
  157.         if( (w)==(5) ) {
  158.                 (分鐘)+(1);
  159.                 if( (分鐘)>(59) ) {
  160.                         (分鐘)=(0);
  161.                 }
  162.                 (分鐘個位)=((分鐘)%(10));
  163.                 (分鐘十位)=((分鐘)/(10));
  164.                 屏幕2004.第_行第_列顯示字符_((2),(5),(分鐘個位));
  165.                 屏幕2004.第_行第_列顯示字符_((2),(4),(分鐘十位));
  166.         }
  167. }
  168. void 功能_按鍵按下時()
  169. {
  170.         (w)+(1);
  171.         if( (w)==(1) ) {
  172.                 信息顯示器.在第_行第_列顯示信息_((2),(10),(" Year"));
  173.         }
  174.         if( (w)==(2) ) {
  175.                 信息顯示器.在第_行第_列顯示信息_((2),(10),(" Month"));
  176.         }
  177.         if( (w)==(3) ) {
  178.                 信息顯示器.在第_行第_列顯示信息_((2),(10),(" Day  "));
  179.         }
  180.         if( (w)==(4) ) {
  181.                 信息顯示器.在第_行第_列顯示信息_((2),(10),(" Hour "));
  182.         }
  183.         if( (w)==(5) ) {
  184.                 信息顯示器.在第_行第_列顯示信息_((2),(10),("Minute"));
  185.         }
  186.         if( (w)==(6) ) {
  187.                 (w)=(0);
  188.                 設置加_按鍵按下時_enable = false;
  189.                 設置減_按鍵按下時_enable = false;
  190.                 控制器_反復執行_enable = true;
  191.                 信息顯示器.清空第_行((3));
  192.                 信息顯示器.在第_行第_列顯示信息_((2),(10),(" Time "));
  193.                 (秒)=(0);
  194.         }
  195.         else {
  196.                 設置加_按鍵按下時_enable = true;
  197.                 設置減_按鍵按下時_enable = true;
  198.                 控制器_反復執行_enable = false;
  199.         }
  200.         延時器.延時_毫秒((200));
  201. }
  202. void 設置加_按鍵按下時()
  203. {
  204.         forever {
  205.                 OS0.Schedule();
  206.                 加_次((1));
  207.                 延時器.延時_毫秒((200));
  208.                 if( 設置加.按鍵松開 ) {
  209.                         break;
  210.                 }
  211.         }
  212. }
  213. void 減_次( int32 B )
  214. {
  215.         if( (w)==(1) ) {
  216.                 (年)-(1);
  217.                 if( (年)<(1) ) {
  218.                         (年)=(99);
  219.                 }
  220.                 (年個位)=((年)%(10));
  221.                 (年十位)=((年)/(10));
  222.                 屏幕2004.第_行第_列顯示字符_((1),(4),(年個位));
  223.                 屏幕2004.第_行第_列顯示字符_((1),(3),(年十位));
  224.         }
  225.         if( (w)==(2) ) {
  226.                 (月)-(1);
  227.                 if( (月)<(1) ) {
  228.                         (月)=(12);
  229.                 }
  230.                 (月個位)=((月)%(10));
  231.                 (月十位)=((月)/(10));
  232.                 屏幕2004.第_行第_列顯示字符_((1),(7),(月個位));
  233.                 屏幕2004.第_行第_列顯示字符_((1),(6),(月十位));
  234.         }
  235.         if( (w)==(3) ) {
  236.                 (日)-(1);
  237.                 if( !((月)==(2)) ) {
  238.                         if( (月)==(數據列表.讀取第_個數據((月))) ) {
  239.                                 if( (日)<(1) ) {
  240.                                         (日)=(31);
  241.                                 }
  242.                         }
  243.                         else {
  244.                                 if( (日)<(1) ) {
  245.                                         (日)=(30);
  246.                                 }
  247.                         }
  248.                 }
  249.                 else {
  250.                         if( (日)<(1) ) {
  251.                                 (日)=(28);
  252.                         }
  253.                 }
  254.                 (日個位)=((日)%(10));
  255.                 (日十位)=((日)/(10));
  256.                 屏幕2004.第_行第_列顯示字符_((1),(10),(日個位));
  257.                 屏幕2004.第_行第_列顯示字符_((1),(9),(日十位));
  258.         }
  259.         if( (w)==(4) ) {
  260.                 (小時)-(1);
  261.                 if( (小時)<(0) ) {
  262.                         (小時)=(23);
  263.                 }
  264.                 (小時個位)=((小時)%(10));
  265.                 (小時十位)=((小時)/(10));
  266.                 屏幕2004.第_行第_列顯示字符_((2),(2),(小時個位));
  267.                 屏幕2004.第_行第_列顯示字符_((2),(1),(小時十位));
  268.         }
  269.         if( (w)==(5) ) {
  270.                 (分鐘)-(1);
  271.                 if( (分鐘)<(0) ) {
  272.                         (分鐘)=(59);
  273.                 }
  274.                 (分鐘個位)=((分鐘)%(10));
  275.                 (分鐘十位)=((分鐘)/(10));
  276.                 屏幕2004.第_行第_列顯示字符_((2),(5),(分鐘個位));
  277.                 屏幕2004.第_行第_列顯示字符_((2),(4),(分鐘十位));
  278.         }
  279. }
  280. void 設置減_按鍵按下時()
  281. {
  282.         forever {
  283.                 OS0.Schedule();
  284.                 減_次((1));
  285.                 延時器.延時_毫秒((200));
  286.                 if( 設置減.按鍵松開 ) {
  287.                         break;
  288.                 }
  289.         }
  290. }
  291. void 控制器_反復執行()
  292. {
  293.         (秒)+(1);
  294.         if( (月)==(0) ) {
  295.                 (月)=(1);
  296.         }
  297.         if( (日)==(0) ) {
  298.                 (日)=(1);
  299.         }
  300.         if( (秒)>(59) ) {
  301.                 (秒)=(0);
  302.                 (分鐘)+(1);
  303.         }
  304.         if( (分鐘)>(59) ) {
  305.                 (分鐘)=(0);
  306.                 (小時)+(1);
  307.         }
  308.         if( (小時)>(23) ) {
  309.                 (小時)=(0);
  310.                 (日)+(1);
  311.         }
  312.         if( !((月)==(2)) ) {
  313.                 if( (月)==(數據列表.讀取第_個數據((月))) ) {
  314.                         if( (日)>(31) ) {
  315.                                 (日)=(1);
  316.                                 (月)+(1);
  317.                         }
  318.                 }
  319.                 else {
  320.                         if( (日)>(30) ) {
  321.                                 (日)=(1);
  322.                                 (月)+(1);
  323.                         }
  324.                 }
  325.         }
  326.         else {
  327.                 if( (日)>(28) ) {
  328.                         (日)=(1);
  329.                         (月)+(1);
  330.                 }
  331.         }
  332.         if( (月)>(12) ) {
  333.                 (月)=(1);
  334.                 (年)+(1);
  335.         }
  336.         if( (小時)<(12) ) {
  337.                 信息顯示器.在第_行第_列顯示信息_((1),(12),("AM"));
  338.         }
  339.         else {
  340.                 信息顯示器.在第_行第_列顯示信息_((1),(12),("PM"));
  341.         }
  342.         (秒個位)=((秒)%(10));
  343.         (秒十位)=((秒)/(10));
  344.         (分鐘個位)=((分鐘)%(10));
  345.         (分鐘十位)=((分鐘)/(10));
  346.         (小時個位)=((小時)%(10));
  347.         (小時十位)=((小時)/(10));
  348.         (日個位)=((日)%(10));
  349.         (日十位)=((日)/(10));
  350.         (月個位)=((月)%(10));
  351.         (月十位)=((月)/(10));
  352.         (年個位)=((年)%(10));
  353.         (年十位)=((年)/(10));
  354.         信息顯示器.在第_行第_列顯示信息_((1),(1),("20"));
  355.         屏幕2004.第_行第_列顯示字符_((1),(3),(年十位));
  356.         屏幕2004.第_行第_列顯示字符_((1),(4),(年個位));
  357.         屏幕2004.第_行第_列顯示字符_((1),(6),(月十位));
  358.         屏幕2004.第_行第_列顯示字符_((1),(7),(月個位));
  359.         屏幕2004.第_行第_列顯示字符_((1),(9),(日十位));
  360.         屏幕2004.第_行第_列顯示字符_((1),(10),(日個位));
  361.         屏幕2004.第_行第_列顯示字符_((2),(8),(秒個位));
  362.         屏幕2004.第_行第_列顯示字符_((2),(7),(秒十位));
  363.         屏幕2004.第_行第_列顯示字符_((2),(5),(分鐘個位));
  364.         屏幕2004.第_行第_列顯示字符_((2),(4),(分鐘十位));
  365.         屏幕2004.第_行第_列顯示字符_((2),(2),(小時個位));
  366.         屏幕2004.第_行第_列顯示字符_((2),(1),(小時十位));
  367.         屏幕2004.第_行第_列顯示字符_((2),(6),(':'));
  368.         屏幕2004.第_行第_列顯示字符_((2),(3),(':'));
  369.         延時器.延時_毫秒((500));
  370.         屏幕2004.第_行第_列顯示字符_((2),(6),('無'));
  371.         屏幕2004.第_行第_列顯示字符_((2),(3),('無'));
  372.         延時器.延時_毫秒((500));
  373. }
  374. int32 秒個位;
  375. int32 秒十位;
  376. int32 分鐘個位;
  377. int32 分鐘十位;
  378. int32 小時十位;
  379. int32 小時個位;
  380. int32 w;
  381. int32 秒;
  382. int32 分鐘;
  383. int32 小時;
  384. int32 年;
  385. int32 年個位;
  386. int32 年十位;
  387. int32 月;
  388. int32 月個位;
  389. int32 月十位;
  390. int32 日;
  391. int32 日個位;
  392. int32 日十位;
  393. int32 D1;
  394. int32 D2;
  395. int32 D3;
  396. bool B1;
  397. bool B2;
  398. bool B3;

  399. uint8 x_控制器_0_ResCount;
  400. bool 控制器_系統啟動時_enable;
  401. uint8 x_控制器_1_ResCount;
  402. bool 控制器_反復執行_enable;
  403. uint8 x_功能_0_ResCount;
  404. bool 功能_按鍵按下時_enable;
  405. uint8 x_設置加_0_ResCount;
  406. bool 設置加_按鍵按下時_enable;
  407. uint8 x_設置減_0_ResCount;
  408. bool 設置減_按鍵按下時_enable;

  409. void OS_VarInit()
  410. {
  411. 控制器_系統啟動時_enable = true;
  412. 控制器_反復執行_enable = true;
  413. 功能_按鍵按下時_enable = true;
  414. 設置加_按鍵按下時_enable = true;
  415. 設置減_按鍵按下時_enable = true;
  416. }
復制代碼


回復

使用道具 舉報

地板
ID:304003 發表于 2018-4-8 21:13 | 只看該作者
下載來學習一下
回復

使用道具 舉報

5#
ID:308034 發表于 2018-4-19 11:25 | 只看該作者
能看一下怎么按鍵是怎么接進去的么
回復

使用道具 舉報

6#
ID:309899 發表于 2018-4-20 20:46 | 只看該作者
能把完整的代碼分享出來嗎  幫助下初學者  謝謝
回復

使用道具 舉報

7#
ID:292119 發表于 2018-6-26 13:28 | 只看該作者
好東東 能學習一下源碼嗎?
回復

使用道具 舉報

8#
ID:292119 發表于 2018-6-26 16:09 | 只看該作者
有錯誤,編譯不成功,表示很郁悶
回復

使用道具 舉報

9#
ID:384558 發表于 2018-8-30 13:19 | 只看該作者
下載來學習一下
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一二三区在线观看 | 欧美亚洲国产一区二区三区 | 久久久资源 | 久久精品中文字幕 | 国产欧美视频一区 | 国产精品二区三区 | 亚洲午夜视频 | 色天天综合 | 国产激情视频在线观看 | 久久精品亚洲精品国产欧美 | 国产精品永久免费 | jlzzjlzz欧美大全 | av网站在线看 | 91精品国产91久久久久久最新 | 伊人春色在线 | 日韩资源| 91精品国产91久久综合桃花 | 深夜福利亚洲 | 国产乱性| 天天影视综合 | 国产精品美女久久久 | 伊人久久综合影院 | 91麻豆精品国产91久久久久久 | 国产精品久久国产精品 | 日韩久久久久久久久久久 | 欧美久久视频 | 欧美在线综合 | 国产成人99久久亚洲综合精品 | 91婷婷韩国欧美一区二区 | 美日韩精品 | 在线观看国产 | 高清视频一区二区三区 | 日韩欧美亚洲 | 日韩激情视频一区 | 妞干网福利视频 | 成人av免费在线观看 | 干狠狠 | 国产免费一区二区 | 国产亚韩 | 免费国产黄| 狠狠操狠狠操 |