Une horloge à afficheurs 7 segments

Dependencies:   BSP_DISCO_F746NG

Revision:
4:06a5a25319d5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/horloge.cpp	Mon Jun 22 16:33:43 2020 +0000
@@ -0,0 +1,131 @@
+#include "horloge.h"
+#include "mbed.h"
+#include <stdint.h>
+#include <vector>
+//#include "stm32746g_discovery_lcd.h"
+
+
+Horloge::Horloge() 
+    : m_minutes(59), m_heures(23), m_minutesPre(100), m_heuresPre(100), m_secondesPre(100)
+{
+    set_time(54);
+    dataPin = new DigitalOut(D8, 0);
+    clockPin = new DigitalOut(D9, 0);
+    latchPin = new DigitalOut(D10, 0);
+    enablePin = new PwmOut(D11);
+    enablePin->period(0.00002f);
+    enablePin->write(0.6f);
+    
+}
+
+void Horloge::setTempsPrecedent(uint8_t minutes, uint8_t heures) {
+    m_minutesPre = minutes;
+    m_heuresPre = heures;
+}
+
+vector<uint8_t> Horloge::get4Digits() {
+    vector<uint8_t> digits;
+    
+    digits.push_back(m_heures / 10);
+    digits.push_back(m_heures % 10);
+    digits.push_back(m_minutes / 10);
+    digits.push_back(m_minutes % 10);
+    
+    return digits;   
+}
+
+uint8_t Horloge::getMinutes() {
+    return m_minutes;
+}
+
+uint8_t Horloge::getHeures() {
+    return m_heures;
+}
+
+uint8_t Horloge::getMinutesPre() {
+    return m_minutesPre;
+}
+
+uint8_t Horloge::getHeuresPre() {
+    return m_heuresPre;
+}
+
+void Horloge::setRegistres(DigitalOut* dataPin, DigitalOut* clockPin, uint8_t data) {
+    for(uint8_t i = 0; i < 8; i++)
+    {
+        dataPin->write(data & (1 << i));
+        HAL_Delay(1);
+        clockPin->write(1);
+        HAL_Delay(1);
+        clockPin->write(0);
+    }
+}
+
+void Horloge::minuteP() {
+    if(m_minutes == 59) {
+        m_minutes = 0;
+        heureP();
+    } else {
+        m_minutes++;
+    }
+}
+
+void Horloge::minuteM() {
+    if(m_minutes == 0) {
+        m_minutes = 59;
+    } else {
+        m_minutes--;
+    }
+}
+
+void Horloge::heureP() {
+    if(m_heures == 23) {
+        m_heures = 0;
+    } else {
+        m_heures++;
+    }
+}
+
+void Horloge::heureM() {
+    if(m_heures == 0) {
+        m_heures = 23;
+    } else {
+        m_heures--;
+    }
+}
+
+void Horloge::update() {
+    // récupère l'heure
+    uint8_t secondes = (uint8_t)time(NULL);
+    if(secondes == 59) {
+        set_time(0);
+        minuteP();
+        
+    }
+    // affiche l'heure sur les LEDs si elle a changée
+    if (secondes != m_secondesPre) {
+        vector<uint8_t> temps = get4Digits();
+    
+        latchPin->write(1);
+        if(point == true) {
+            setRegistres(dataPin, clockPin, m_table[temps.at(0)]);
+            setRegistres(dataPin, clockPin, m_table[temps.at(1)]+128);
+            setRegistres(dataPin, clockPin, m_table3[temps.at(2)]+8);
+            setRegistres(dataPin, clockPin, m_table[temps.at(3)]);
+        } else {
+            setRegistres(dataPin, clockPin, m_table[temps.at(0)]);
+            setRegistres(dataPin, clockPin, m_table[temps.at(1)]);
+            setRegistres(dataPin, clockPin, m_table3[temps.at(2)]);
+            setRegistres(dataPin, clockPin, m_table[temps.at(3)]);
+        }
+        latchPin->write(0);
+        point = !point;
+    }
+    
+    m_secondesPre = secondes;
+}
+
+void Horloge::sonner() {
+    
+}
+    
\ No newline at end of file