Une horloge à afficheurs 7 segments

Dependencies:   BSP_DISCO_F746NG

Committer:
sol427
Date:
Mon Jun 22 16:33:43 2020 +0000
Revision:
4:06a5a25319d5
Horloge fonctionnelle

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sol427 4:06a5a25319d5 1 #include "horloge.h"
sol427 4:06a5a25319d5 2 #include "mbed.h"
sol427 4:06a5a25319d5 3 #include <stdint.h>
sol427 4:06a5a25319d5 4 #include <vector>
sol427 4:06a5a25319d5 5 //#include "stm32746g_discovery_lcd.h"
sol427 4:06a5a25319d5 6
sol427 4:06a5a25319d5 7
sol427 4:06a5a25319d5 8 Horloge::Horloge()
sol427 4:06a5a25319d5 9 : m_minutes(59), m_heures(23), m_minutesPre(100), m_heuresPre(100), m_secondesPre(100)
sol427 4:06a5a25319d5 10 {
sol427 4:06a5a25319d5 11 set_time(54);
sol427 4:06a5a25319d5 12 dataPin = new DigitalOut(D8, 0);
sol427 4:06a5a25319d5 13 clockPin = new DigitalOut(D9, 0);
sol427 4:06a5a25319d5 14 latchPin = new DigitalOut(D10, 0);
sol427 4:06a5a25319d5 15 enablePin = new PwmOut(D11);
sol427 4:06a5a25319d5 16 enablePin->period(0.00002f);
sol427 4:06a5a25319d5 17 enablePin->write(0.6f);
sol427 4:06a5a25319d5 18
sol427 4:06a5a25319d5 19 }
sol427 4:06a5a25319d5 20
sol427 4:06a5a25319d5 21 void Horloge::setTempsPrecedent(uint8_t minutes, uint8_t heures) {
sol427 4:06a5a25319d5 22 m_minutesPre = minutes;
sol427 4:06a5a25319d5 23 m_heuresPre = heures;
sol427 4:06a5a25319d5 24 }
sol427 4:06a5a25319d5 25
sol427 4:06a5a25319d5 26 vector<uint8_t> Horloge::get4Digits() {
sol427 4:06a5a25319d5 27 vector<uint8_t> digits;
sol427 4:06a5a25319d5 28
sol427 4:06a5a25319d5 29 digits.push_back(m_heures / 10);
sol427 4:06a5a25319d5 30 digits.push_back(m_heures % 10);
sol427 4:06a5a25319d5 31 digits.push_back(m_minutes / 10);
sol427 4:06a5a25319d5 32 digits.push_back(m_minutes % 10);
sol427 4:06a5a25319d5 33
sol427 4:06a5a25319d5 34 return digits;
sol427 4:06a5a25319d5 35 }
sol427 4:06a5a25319d5 36
sol427 4:06a5a25319d5 37 uint8_t Horloge::getMinutes() {
sol427 4:06a5a25319d5 38 return m_minutes;
sol427 4:06a5a25319d5 39 }
sol427 4:06a5a25319d5 40
sol427 4:06a5a25319d5 41 uint8_t Horloge::getHeures() {
sol427 4:06a5a25319d5 42 return m_heures;
sol427 4:06a5a25319d5 43 }
sol427 4:06a5a25319d5 44
sol427 4:06a5a25319d5 45 uint8_t Horloge::getMinutesPre() {
sol427 4:06a5a25319d5 46 return m_minutesPre;
sol427 4:06a5a25319d5 47 }
sol427 4:06a5a25319d5 48
sol427 4:06a5a25319d5 49 uint8_t Horloge::getHeuresPre() {
sol427 4:06a5a25319d5 50 return m_heuresPre;
sol427 4:06a5a25319d5 51 }
sol427 4:06a5a25319d5 52
sol427 4:06a5a25319d5 53 void Horloge::setRegistres(DigitalOut* dataPin, DigitalOut* clockPin, uint8_t data) {
sol427 4:06a5a25319d5 54 for(uint8_t i = 0; i < 8; i++)
sol427 4:06a5a25319d5 55 {
sol427 4:06a5a25319d5 56 dataPin->write(data & (1 << i));
sol427 4:06a5a25319d5 57 HAL_Delay(1);
sol427 4:06a5a25319d5 58 clockPin->write(1);
sol427 4:06a5a25319d5 59 HAL_Delay(1);
sol427 4:06a5a25319d5 60 clockPin->write(0);
sol427 4:06a5a25319d5 61 }
sol427 4:06a5a25319d5 62 }
sol427 4:06a5a25319d5 63
sol427 4:06a5a25319d5 64 void Horloge::minuteP() {
sol427 4:06a5a25319d5 65 if(m_minutes == 59) {
sol427 4:06a5a25319d5 66 m_minutes = 0;
sol427 4:06a5a25319d5 67 heureP();
sol427 4:06a5a25319d5 68 } else {
sol427 4:06a5a25319d5 69 m_minutes++;
sol427 4:06a5a25319d5 70 }
sol427 4:06a5a25319d5 71 }
sol427 4:06a5a25319d5 72
sol427 4:06a5a25319d5 73 void Horloge::minuteM() {
sol427 4:06a5a25319d5 74 if(m_minutes == 0) {
sol427 4:06a5a25319d5 75 m_minutes = 59;
sol427 4:06a5a25319d5 76 } else {
sol427 4:06a5a25319d5 77 m_minutes--;
sol427 4:06a5a25319d5 78 }
sol427 4:06a5a25319d5 79 }
sol427 4:06a5a25319d5 80
sol427 4:06a5a25319d5 81 void Horloge::heureP() {
sol427 4:06a5a25319d5 82 if(m_heures == 23) {
sol427 4:06a5a25319d5 83 m_heures = 0;
sol427 4:06a5a25319d5 84 } else {
sol427 4:06a5a25319d5 85 m_heures++;
sol427 4:06a5a25319d5 86 }
sol427 4:06a5a25319d5 87 }
sol427 4:06a5a25319d5 88
sol427 4:06a5a25319d5 89 void Horloge::heureM() {
sol427 4:06a5a25319d5 90 if(m_heures == 0) {
sol427 4:06a5a25319d5 91 m_heures = 23;
sol427 4:06a5a25319d5 92 } else {
sol427 4:06a5a25319d5 93 m_heures--;
sol427 4:06a5a25319d5 94 }
sol427 4:06a5a25319d5 95 }
sol427 4:06a5a25319d5 96
sol427 4:06a5a25319d5 97 void Horloge::update() {
sol427 4:06a5a25319d5 98 // récupère l'heure
sol427 4:06a5a25319d5 99 uint8_t secondes = (uint8_t)time(NULL);
sol427 4:06a5a25319d5 100 if(secondes == 59) {
sol427 4:06a5a25319d5 101 set_time(0);
sol427 4:06a5a25319d5 102 minuteP();
sol427 4:06a5a25319d5 103
sol427 4:06a5a25319d5 104 }
sol427 4:06a5a25319d5 105 // affiche l'heure sur les LEDs si elle a changée
sol427 4:06a5a25319d5 106 if (secondes != m_secondesPre) {
sol427 4:06a5a25319d5 107 vector<uint8_t> temps = get4Digits();
sol427 4:06a5a25319d5 108
sol427 4:06a5a25319d5 109 latchPin->write(1);
sol427 4:06a5a25319d5 110 if(point == true) {
sol427 4:06a5a25319d5 111 setRegistres(dataPin, clockPin, m_table[temps.at(0)]);
sol427 4:06a5a25319d5 112 setRegistres(dataPin, clockPin, m_table[temps.at(1)]+128);
sol427 4:06a5a25319d5 113 setRegistres(dataPin, clockPin, m_table3[temps.at(2)]+8);
sol427 4:06a5a25319d5 114 setRegistres(dataPin, clockPin, m_table[temps.at(3)]);
sol427 4:06a5a25319d5 115 } else {
sol427 4:06a5a25319d5 116 setRegistres(dataPin, clockPin, m_table[temps.at(0)]);
sol427 4:06a5a25319d5 117 setRegistres(dataPin, clockPin, m_table[temps.at(1)]);
sol427 4:06a5a25319d5 118 setRegistres(dataPin, clockPin, m_table3[temps.at(2)]);
sol427 4:06a5a25319d5 119 setRegistres(dataPin, clockPin, m_table[temps.at(3)]);
sol427 4:06a5a25319d5 120 }
sol427 4:06a5a25319d5 121 latchPin->write(0);
sol427 4:06a5a25319d5 122 point = !point;
sol427 4:06a5a25319d5 123 }
sol427 4:06a5a25319d5 124
sol427 4:06a5a25319d5 125 m_secondesPre = secondes;
sol427 4:06a5a25319d5 126 }
sol427 4:06a5a25319d5 127
sol427 4:06a5a25319d5 128 void Horloge::sonner() {
sol427 4:06a5a25319d5 129
sol427 4:06a5a25319d5 130 }
sol427 4:06a5a25319d5 131