Merhaba Arkadaşlar
TM1627 ile saat termometre yapmak istiyorum bir türlü süremedim
c ile yazılmış bir kod buldum düzenledim olmadı
yardımcı olurmusunuz
#include <tm1637_pic.h>
#include "DS1302.C"
#include "DHT11.C"
#include "TM1637-BOLT.h"
#define bright MAX_BRIGHT
byte saniye,dakika,saat,gun,ay,yil,haftanin_gunu;
unsigned int i=0;
char birler=0, onlar=0,yuzler=0,binler=0,sayi=0;
float sicaklik,nem;
long a=0;
unsigned char digits[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
void main()
{
//port_a_pullups(0x0C);
rtc_init();
InitTM1637();
//displayValues(0,0,0,0);
output_high(pin_a3);
delay_ms(500);
output_low(pin_a3);
while(TRUE)
{
for(a=1;a<9999;a++)
{
displayValues(digits[(a/1000)%10], digits[(a/100)%10], digits[(a/10)%10],
digits[a%10]);
delay_ms(250);
}
/*
displayValues(0,0,0,0);
displayValues(digits[(saat/10)%10], digits[saat%10] | 0x80, digits[(dakika/10)%10],
digits[dakika%10]);
delay_ms(500);
writeRawDigit(digits[saat%10],1);
*/
}
}
//TM1637.H
#define CLK pin_a0
#define DIO pin_a1
//#define CLK_HIGH pin_a1
//#define DIO_HIGH TRISCbits.TRISC1 = 1
#define LOW_BRIGHT 0X00
#define MID_BRIGHT 0X02
#define MAX_BRIGHT 0X07
void InitTM1637(unsigned char BRIGHT);
void Delay_us(unsigned int useconds);
void start(void);
void ask(void);
void stop(void);
void writeByte(unsigned char oneByte);
void writeRawDigit(unsigned char segment, unsigned char nDigit);
void displayValues(unsigned char segment0, unsigned char segment1, unsigned char segment2, unsigned char segment3);
//
// Inicializa y ajusta el brillo del display TM1637
//
void InitTM1637()
{
start();
writeByte(0x88 | 0X07);
ask();
stop();
}
//
// Función de retardos ajustada a los requerimientos de la comunicación con el display TM1637
//
void Delay_us(unsigned int useconds)
{
unsigned int i;
for(i=0; i < useconds; i++)
Delay_us(20);
}
//
// Función que inicia la comunicación en el display TM1637
//
void start(void)
{
output_high(clk);
output_high(dio);
Delay_us(2);
output_low(dio);
}
//
// Función que permite saber si el dato o comando enviado al display TM1637 ha sido recibido y
// procesado correctamente
//
void ask(void)
{
output_high(dio);
output_low(clk);
Delay_us(5);
while(dio==0);
output_high(dio);
Delay_us(2);
output_low(dio);
output_low(clk);
}
//
// Secuencia de paro, necesaria para el correcto funcionamiento del protocolo de comunicación
// con el display TM1637
//
void stop(void)
{
output_low(clk);
Delay_us(2);
output_low(dio);
Delay_us(2);
output_high(clk);
Delay_us(2);
output_high(dio);
}
//
// Envia por el pin DIO los bits de un byte, envia serialmente los datos
//
void writeByte(unsigned char oneByte)
{
unsigned char i;
for(i=0; i<8; i++)
{
output_low(clk);
if(oneByte & 0x01)
output_high(dio);
else
output_low(dio);
Delay_us(3);
oneByte = oneByte >> 1;
output_high(clk);
Delay_us(3);
}
}
//
// Esta función envía al módulo TM1637 un byte con la representación en 7 segmentos en la
// posción nDigit
//
void writeRawDigit(unsigned char segment, unsigned char nDigit)
{
start();
writeByte(0x44);
ask();
stop();
start();
writeByte(0xC0 | (nDigit & 0x07));
ask();
writeByte(segment);
ask();
stop();
}
//
// Envía 4 caracteres al módulo TM1637 desde la posición 0 hasta la 4 de los segmentos
//
void displayValues(unsigned char segment0, unsigned char segment1, unsigned char segment2,
unsigned char segment3)
{
start();
writeByte(0x40);
ask();
stop();
start();
writeByte(0xC0);
ask();
writeByte(segment0);
ask();
writeByte(segment1);
ask();
writeByte(segment2);
ask();
writeByte(segment3);
ask();
stop();
}
(https://i.ibb.co/SVhS0tZ/grove.png) (https://ibb.co/SVhS0tZ)
(https://i.ibb.co/94z2Yqm/orginal.png) (https://ibb.co/94z2Yqm)
(https://i.ibb.co/s3fQS29/kendim.png) (https://ibb.co/s3fQS29)
TM1629A için bende uğraşıyorum çözersem paylaşırım.