找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8783|回复: 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空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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 单片机教程网

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