先上线路搭建图

然后上实际的图片

电路板背面焊接

为了方便演示,倒计时以秒来演示。

文中代码针脚说明

tm1637的DIO脚为uno的2

tm1637CLK脚为UNO的3

当然你也可以任意的设置其他引脚。

第一个按钮4是调节时钟

第二个按钮5是调节分钟

第三个按钮是切换显示,切换时钟或者倒计时

第四个按钮是设置倒计时的时长

第五个按钮是开始倒计时,开始倒计时时led将一直亮,直到倒计时结束。

废话不多说上代码

对了该代码需要按照TM1637.h库。

原创作品,转载请说明。


#include <TimerOne.h>
#include "TM1637.h"
#define ON 1
#define OFF 0int8_t TimeDisp[] = {0x00, 0x00, 0x00, 0x00};
unsigned char ClockPoint = 1;
unsigned char Update;
unsigned char halfsecond = 0;
unsigned char second;
unsigned char minute = 0;
unsigned char hour = 12;#define CLK 2//pins definitions for TM1637 and can be changed to other ports
#define DIO 3
TM1637 tm1637(CLK, DIO);int button1 = 4; //时钟按钮
int button2 = 5; //分钟按钮
int button3 = 6; //切换
int button4 = 7; //任务时钟
int button5 = 8; //任务分钟
int led = 9;
int button1State;//按钮状态
int button2State;
int button3State;
int button4State;
int button5State;
int miao ;
int hh ;
int mm;
bool b = false ;
int a = 0;
bool d = false;
int c = 0;void setup()
{tm1637.set();tm1637.init();Timer1.initialize(500000);//timing for 500msTimer1.attachInterrupt(TimingISR);//declare the interrupt serve routine:TimingISRpinMode(button1, INPUT);pinMode(button2, INPUT);pinMode(button3, INPUT);pinMode(button4, INPUT);pinMode(button5, INPUT);pinMode(led, OUTPUT);}
void loop()
{button1State = digitalRead(button1);button2State = digitalRead(button2);button3State = digitalRead(button3);button4State = digitalRead(button4);button5State = digitalRead(button5);settime(); //设置时间clockshift(); //切换task(); //任务时钟if (Update == ON){TimeUpdate();// tm1637.display(TimeDisp);}}
void TimingISR()
{halfsecond ++;Update = ON;if (halfsecond == 2) {second ++;if (second == 60){minute ++;if (minute == 60){hour ++;if (hour == 24)hour = 0;minute = 0;}second = 0;}halfsecond = 0;/***********************倒计时*****************************/if (button4State == 1){a++;if (a == 16) {a = 0;}}if (c >= 1) {c--;digitalWrite(led, HIGH);if (c == 0) {digitalWrite(led, LOW);}}if (button5State == 1) {c = a;}/*******************************************************/}// Serial.println(second);ClockPoint = (~ClockPoint) & 0x01;
}
void TimeUpdate(void)
{if (ClockPoint)tm1637.point(POINT_ON);else tm1637.point(POINT_OFF);TimeDisp[0] = hour / 10;TimeDisp[1] = hour % 10;TimeDisp[2] = minute / 10;TimeDisp[3] = minute % 10;Update = OFF;
}void settime (void)
{if (button1State == 1){hour++;if (hour == 24) {hour = 0;minute = 0;}delay(300);}if (button2State == 1) {minute++;if (minute == 60) {hour++;minute = 0;if (hour == 24) {hour = 0;minute = 0;}}delay(300);}}void clockshift(void)
{if (button3State == 1){b = ! b;delay(200);}if (b == false) {// 时钟显示TimeDisp[0] = hour / 10;TimeDisp[1] = hour % 10;TimeDisp[2] = minute / 10;TimeDisp[3] = minute % 10;tm1637.display(TimeDisp);}if (b == true) {tm1637.point(0);//小数点开关,1为打开,0为关闭tm1637.display(0, a / 10);tm1637.display(1, a % 10);tm1637.display(2, c / 10);tm1637.display(3, c % 10);}}void task (void)
{if (hh >= 24) {hh = 0;mm = 0;}}

arduino使用TM1637制作控制器,可显示时钟和倒计时打开LED相关推荐

  1. arduino串口监视器显示nan_使用Arduino开发板制作摩尔斯电码生成器

    摩尔斯电码是一种通信系统,用于在两个不同持续时间的信号中编码任何字符,称为点和虚线.摩尔斯电码由Samuel F.B开发.并进一步用于电报传输秘密信息.它在第二次世界大战时最常用.摩尔斯电码可以通过点 ...

  2. Arduino使用TM1637四位数码管

    index 1. 简介 引脚 2. Grove - 4-Digit Display Library 2.1类中比较实用的函数有: 2.1.1 库中提供了三个示例 2.2 库文件及帮助 2.3 利用tm ...

  3. Arduino+Avr libc制作Badusb原理及示例讲解

    一. 前言 2014年美国黑帽大会上研究人员JakobLell和Karsten Nohl展示了badusb的攻击方法后,国内与badusb相关的文章虽然有了一些,但是大部分人把相关文章都阅读后还是会有 ...

  4. 自制NixieDisplay辉光数码管显示时钟

    最近偶然发现一种发光效果非常独特的数码管,非常感兴趣,于是查阅了一些资料,原来是电子管时代用于数字和符号显示的辉光数码管(nixie tube).与现在常见的LED驱动数码管不同,辉光管的是由金属符号 ...

  5. 使用Arduino和四位数码管实现数字时钟

    数字挂钟现在越来越受欢迎,它们比模拟时钟更好,因为它提供了小时.分钟和秒的准确时间,并且易于读取数值.一些数字时钟也有许多设施,如显示温度.湿度.设置多个闹铃等.大多数数字时钟使用七段数码管. 我们之 ...

  6. 用arduino和OLED制作火柴人奔跑动画

    用arduino和OLED制作火柴人奔跑动画 有趣火柴人奔跑动画 2.为动画创建位图 这可能是最耗时的步骤.你必须创建一组框架,这将适合128x32格式.您可以尝试从任何拖鞋剪贴片中创建它们,您可以在 ...

  7. Arduino Mega/Uno制作宏定义键盘(不需刷firmware!!)

    本人机械专业大一编程小白一枚,接触编程不到半年.近期开始自学Arduino.这应该是本人第一篇博客,有错误之处敬请斧正! - 心路&思路 家住武汉,这个年嘛,大家应该都懂,被迫宅化.年前从网上 ...

  8. TIA博途中如何通过Prodiag功能制作报警并显示在HMI上?

    TIA博途中如何通过Prodiag功能制作报警并显示在HMI上? 环境搭建: TIA PORTAL V16及以上版本博途软件 具体步骤可参考如下: 打开博途软件新建一个项目,如下图所示,添加PLC和H ...

  9. arduino摄像头监控_如何使用Arduino和Pusher制作实时光监控器

    arduino摄像头监控 by Neo Ighodaro 由新Ighodaro 如何使用Arduino和Pusher制作实时光监控器 (How to make a realtime light mon ...

最新文章

  1. SaltStack自动化运维(三)——Grains与Pillar组件
  2. oracle两表链接序列跳序,Oracle学习之 序列(Sequence)
  3. 过滤html标签 RemoveHTML
  4. Zookeeper基于Java访问-权限模式
  5. 使用python标准库urllib2访问网页
  6. 【网络流24题】No.4 魔术球问题 (二分+最小路径覆盖)
  7. 不起眼的vim.转自https://blog.csdn.net/iplayvs2008/article/details/51508599
  8. Python基础练习-002-求1000以内的完全数
  9. java integer源码_Integer包装类源码分析
  10. 安卓Gallery配合ImageSwitcher不显示图片
  11. 【语音合成】基于matlab语音信号变调【含Matlab源码 566期】
  12. 小白怎么入门网络安全?看这篇就够啦!
  13. 大厂面试预备篇——《两万字MySql基础总结》❤️建议收藏
  14. 如何在模拟器中测试Windows Phone 8的NFC应用
  15. uniapp登录页设计
  16. php游戏对接,php游戏
  17. 短视频剪辑操作一览图
  18. C#+MySQL+VS开发《企业员工信息管理系统》
  19. 关于tp框架提示的控制器不存在的问题
  20. 基于DMA通道的连续ADC扫描读取

热门文章

  1. 使用Elasticsearch做一个简易的检索式聊天机器人
  2. 帝国CMS建站模板,帝国CMS建站全过程管理
  3. Circos入门教程
  4. 电脑显示服务器意外终止,Win7提示Dcom Server Process Launcher服务意外终止怎么办?...
  5. 大数据入门(五)-分布式计算框架MapReduce
  6. 钣金件展开图可视参数化绘图系统
  7. 个人常用提高办公效率软件
  8. java遍历集合的方法
  9. python创建一个空集合_python空集合如何表示
  10. [python][企业微信]企业微信自动打卡Python脚本,价值一万元的自动打卡脚本