7 segmentų indikatorius su TM1637 tvarkykle
Yra kelios modulių versijos, pagrįstos TM1637 tvarkykle, skirtumas yra 7 segmentų indikatoriuje, daugiausia tai moduliai su aukštais segmentais 0.36″, tačiau yra ir didesnių, su 0.56″ moduliais.
TM1637 tvarkyklė rūpinasi visu darbu su dinamine indikacija. Matyt, kad mikroschema buvo sukurta naudoti DVD grotuvuose, rodant laiką, moduliai taip pat labiau tinka laikrodžiams montuoti.
Mikroschemos charakteristika:
- Maitinimo įtampa: 5V ±10%
- Indikatoriai, 6 skaitmenys ir 8 elementai, palaiko indikatorius su bendru anodu.
- Reguliuojamas ryškumas.
- Dviejų laidų nuoseklioji sąsaja (CLK, DIO).
Prijungimas prie Arduino:
Modulis gali būti prijungtas prie bet kokių nemokamų Arduino išėjimų, modulis maitinamas 5 voltais.
Kodas:
Galima pasiimti biblioteką, skirtą darbui su moduliu čia arba čia.
Įdiegę atidarykite pavyzdį, NumberFlow.ino,
#define CLK 6//pins definitions for TM1637 and can be changed to other ports #define DIO 7
direktyvose (16,17 eilutėse), nurodome, su kuriais kontaktais susiję modulio išvadai CLK ir DIO. Mūsų atveju tai yra 6 ir 7.
Įkėlę eskizą į Arduino, ekrane matome:
Laikas:
Laikrodžio modulis, taigi pavyzdys su laikrodžiu. Kaip tai veikia, galite pamatyti žemiau esančiame vaizdo įraše.
Vaizdainis:
#include <Wire.h>
#include "TM1637.h"
#define DS1307_I2C_ADDRESS 0x68
#define CLK 6
#define DIO 7
TM1637 tm1637(CLK,DIO);
///// часы ..
byte decToBcd(byte val){
return ( (val/10*16) + (val%10) );
}
byte bcdToDec(byte val){
return ( (val/16*10) + (val%16) );
}
void setDateDs1307(byte second, // 0-59
byte minute, // 0-59
byte hour, // 1-23
byte dayOfWeek, // 1-7
byte dayOfMonth, // 1-28/29/30/31
byte month, // 1-12
byte year) // 0-99
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.write(decToBcd(second));
Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour));
Wire.write(decToBcd(dayOfWeek));
Wire.write(decToBcd(dayOfMonth));
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));
Wire.endTransmission();
}
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.endTransmission();
Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f);
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());
}
void setup() {
Wire.begin();
tm1637.init();
tm1637.set(1); // яркость, от 0 до 7
tm1637.point(POINT_ON); // включаем точки
/* // установка часов
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
second = 30;
minute = 0;
hour = 14;
dayOfWeek = 3; // день недели
dayOfMonth = 1; // день
month = 4;
year = 14;
setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
*/
}
void loop(){
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
int8_t TimeDisp[4];
TimeDisp[0] = hour / 10;
TimeDisp[1] = hour % 10;
TimeDisp[2] = minute / 10;
TimeDisp[3] = minute % 10;
tm1637.display(TimeDisp);
}



