Arduino之Mixly 数码管时钟实验

一、数据管的串接

首先,需要Arduino、TM1637数码管、若干排线等硬件。
CLK串口连接管脚5,DIO串口连接管脚6,当然,可以连接0-13各个管脚。
负极串口接GND,正极接5v。

二、实验部分

【实验一】实现滚动显示自定义字符串

通过上述数据管连接后,若设备硬件无问题即可上传图形化代码进行编译并运行。
以下为米思齐Mixly IDE编程软件中的图形化代码
在这里插入图片描述

以下为具体代码

#include <TM1637.h>
TM1637 tm1637(5,6);

void setup(){
   tm1637.init();
}

void loop(){
  int8_t NumTab[]={10,11,12,13,14};
  int8_t ListDisp[4];
   int8_t run=1;
   unsigned char i = 0;
   unsigned char count = 0;
   delay(150); 
	while(run){
	  i = count;
	  count++;
	  if(sizeof(NumTab)<5)
	  run=0;
	  if(count == sizeof(NumTab))
	  count = 0;
	   for(unsigned char BitSelect = 0;BitSelect <  sizeof(NumTab);BitSelect ++)
	  {
	  ListDisp[BitSelect] = NumTab[i];
	   i++;
	  if(i == sizeof(NumTab))
	   i = 0;
	  }
	  for(unsigned char k = 0;k <sizeof(NumTab);k ++)
	  {
	  tm1637.display(k,ListDisp[k]);
	  };
	  delay(500);
	  }
}

据视频,LED屏幕上显示了"abcde"5个字符的滚动效果,实验成功!

【实验二】实现显示自定义时间

按照实验一中的数码管串接方式接着我们的第二个实验——显示自定义时间
图形化代码如下:
在这里插入图片描述
首先初始化管脚以及TM1637设备的参数,设置其亮度为20
此时设置显示的时间为12:26分,时钟点设为高表示LED屏亮,且亮度为20;反之,若设为低,则LED屏不亮。
以下为具体代码:

#include <SevenSegmentExtended.h>
#include <SevenSegmentTM1637.h>

SevenSegmentExtended  display(5,6);
void setup(){
   display.begin();
   display.setBacklight(20);
}

void loop(){
  display.printTime(12,26,HIGH);
}

以下为实验结果图:
在这里插入图片描述

由结果图可见,LED屏成功显示我们预设内容,实验成功!

【实验三】实现显示秒表

继承以上两个实验的设备安装接口,进行我们的第三个实验——显示秒表
该实验内容需要LED屏显示秒、毫秒两部分内容,通过事先导入库插件maker17(如下)在这里插入图片描述
我们直接利用该插件中自带的图形化代码完成该实验的代码编译任务,简单粗暴,图形化代码如下:
在这里插入图片描述

具体代码如下:

#include <EEPROM.h>
#include <avr/pgmspace.h>
#include <TimerOne.h>
#include <TM1637.h>

int8_t TimeDisp[] = {0x00,0x00,0x00,0x00};
unsigned char ClockPoint = 1;
unsigned char Update;
unsigned char microsecond_10 = 0;
unsigned char second;
unsigned char _microsecond_10 = 0;
unsigned char _second;
unsigned int eepromaddr;
boolean Flag_ReadTime;

#define ON 1
#define OFF 0

TM1637 tm1637(6,9);

void TimeUpdate2(void)
{
if(ClockPoint)tm1637.point(POINT_ON);
else tm1637.point(POINT_OFF);
TimeDisp[2] = _microsecond_10 / 10;
TimeDisp[3] = _microsecond_10 % 10;
TimeDisp[0] = _second / 10;
TimeDisp[1]= _second % 10;
Update = OFF;
}

void TimingISR2()
{
	microsecond_10 ++;
	Update = ON;
	if(microsecond_10 == 100)
	{
		second ++;
		if(second == 60)
		{
			second = 0;
		}
		microsecond_10 = 0;
	}
	ClockPoint =(~ClockPoint) & 0x01;
	if(Flag_ReadTime == 0)
 	{_microsecond_10 = microsecond_10;
	_second = second;  
	}
}

void readTime(){
	Flag_ReadTime = 1;
	if(eepromaddr == 0)
	{
		Serial.println("The time had been read");
		_microsecond_10 = 0;
		 _second = 0;
	}
	else{
		_second = EEPROM.read(-- eepromaddr);
		_microsecond_10 = EEPROM.read(-- eepromaddr);
		Serial.println("List the time");
	}
	Update = ON;
}

void saveTime()
{
	EEPROM.write(eepromaddr ++,microsecond_10);
	EEPROM.write(eepromaddr ++,second);
}

void stopwatchPause()
{
	TCCR1B &= ~(_BV(CS10) | _BV(CS11) | _BV(CS12));
}

void stopwatchReset()
{
	stopwatchPause();
	Flag_ReadTime = 0;
	_microsecond_10 = 0;
	_second = 0;
	microsecond_10 = 0;
	second = 0;
	Update = ON;
}
	
void stopwatchStart()
{
	Flag_ReadTime = 0;
	TCCR1B |=Timer1.clockSelectBits;
}

void setup(){
	  tm1637.init();
	  tm1637.set();
	  tm1637.init();
	  Timer1.initialize(10000);
	  Timer1.attachInterrupt(TimingISR2);
}
	
void loop(){
	stopwatchStart();
  	if(Update == ON)
  	{
  		TimeUpdate2();
  		tm1637.display(TimeDisp);
 	}
}

根据视频内容,秒表显示成功!

三、实验结论与体会

通过本次实验,熟悉了arduino数码管的串接,通过数码管的连接懂得如何编写图形化代码。
懂得如何通过图形化编码进行物联网的应用,使硬件通过代码来运作。
并且对一些电信号的符号有所了解,知道如何知识迁移,能够掌握安装其他硬件的数码管。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_43991193

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值