标题: ARDUINO+TM1637+按键 显示时间 [打印本页]

作者: dhp1112    时间: 2018-1-22 14:38
标题: ARDUINO+TM1637+按键 显示时间
#include <TimerOne.h>
#include <TM1637.h>
#define ON 1
#define OFF 0
int8_t TimeDisp[] = {0x00, 0x00, 0x00, 0x00};
unsigned char ClockPoint = 1;
unsigned char Update;
unsigned char halfsecond = 0;
unsigned char second;
unsigned char minute = 20;
unsigned char hour = 10;
int buttonpin2=2;//按键的一只脚接端口2,另一只脚接地
int buttonpin7=7;//按键的一只脚接端口7,另一只脚接地

#define CLK 10
#define DIO 11          //DIO接一个4.7k的下拉电阻,这点很重要,否则数码管会假死。
TM1637 tm1637(CLK, DIO);

void setup()
{
  pinMode(buttonpin2,INPUT_PULLUP);//输入上拉模式
  pinMode(buttonpin7,INPUT_PULLUP);//输入上拉模式
  tm1637.set();
  tm1637.init();
  Timer1.initialize(500000);//timing for 500ms
  Timer1.attachInterrupt(TimingISR);//declare the interrupt serve routine:TimingISR
}

void loop()
{
  if(digitalRead(buttonpin2)==0)//按键被按下,调整小时
  {
    delay(200);//延时去抖动
    if(digitalRead(buttonpin2)==0)
    {
      hour=hour+1;
      if (hour == 24) {hour = 0;}
    }
  }
  if(digitalRead(buttonpin7)==0)//按键被按下,调整分
  {
    delay(200);//延时去抖动
    if(digitalRead(buttonpin7)==0)
    {
      minute=minute+1;
      if (minute == 60){minute = 0;}
    }
  }
  if (Update == ON)  //每隔0.5秒调用一次
  {
    TimeUpdate();
    tm1637.display(TimeDisp);
  }
}

void TimingISR()
{
  halfsecond ++;  Update = ON;
  if (halfsecond == 2)
  {
    second ++;  halfsecond = 0;
    if (second == 60)
    {
      minute ++;  second = 0;
      if (minute == 60)
      {
        hour ++;  minute = 0;
        if (hour == 24) {hour = 0;}
      }
    }
  }
  ClockPoint = (~ClockPoint) & 0x01;  //ClockPoint先是按位取反再按位与,结果就是0 1 0 1......这样一直下去。我的理解是0.5秒为0,1秒为1,1.5秒为0,2秒为1。。。。。。
}

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;
}


作者: chenhanzhong    时间: 2020-5-11 09:47
tm1637.display(TimeDisp);
这一段不太理解,楼主知道吗?
作者: 47okey    时间: 2021-9-20 15:09
chenhanzhong 发表于 2020-5-11 09:47
tm1637.display(TimeDisp);
这一段不太理解,楼主知道吗?

int8_t TimeDisp[] = {0x00, 0x00, 0x00, 0x00};

tm1637.display(TimeDisp);
小括号里是TimeDisp数组的内容,这条就是显示小时、分钟这4 位
作者: ziba108    时间: 2023-8-11 18:29
能否提供完整的程序,,,
作者: ziba108    时间: 2023-8-18 18:41
能否提供完整的程序,,,
作者: bobo电子爱好者    时间: 2023-10-20 09:07
结构体面向对象封装了 tm1637。
作者: mlsyong321    时间: 2024-12-28 19:47
库要下timerone和Grove4-Digit Display,TM1637这个库下了没有用




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1