c++/led-displej/led-displej.cpp
author František Kučera <franta-hg@frantovo.cz>
Fri, 15 May 2020 20:32:37 +0200
changeset 59 d6614ad97bed
parent 37 0a06481eec13
permissions -rw-r--r--
LV2: modul zesilovače, dle oficiálního příkladu, ale bez závislosti na Pythonu – stačí gcc a make
     1 #include <stdlib.h>
     2 #include <iostream>
     3 
     4 /**
     5  * Slouží k ovládání LED displeje pomocí řadiče M5482 připojeného na LPT port.
     6  * Používají se jen dva piny: DATA a CLOCK signál.
     7  */
     8 
     9 /**
    10  * = 1 → normální běh
    11  * > 1 → zpomalené pro ladění
    12  */
    13 const int BRZDA = 100000;
    14 
    15 void zapisSeriove(bool hodnoty[], int n);
    16 void zapisData(bool hodnota);
    17 void zapisClock(bool hodnota);
    18 void cekej(int mikroSekund);
    19 
    20 int main() {
    21 	std::cout << "spouštím program LED Displej" << std::endl;
    22 	
    23 	bool hodnoty[] = {1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1};
    24 	zapisSeriove(hodnoty, sizeof(hodnoty));
    25 }
    26 
    27 void zapisSeriove(bool hodnoty[], int n) {
    28 	for (int i = 0; i < n; i++) {
    29 		zapisData(hodnoty[i]);
    30 		cekej(1);
    31 		zapisClock(true);
    32 		cekej(1);
    33 		zapisClock(false);
    34 		cekej(1);
    35 		std::cout << "---" << std::endl;
    36 	}
    37 	std::cout << "vypsáno hodnot: " << n << std::endl;
    38 }
    39 
    40 /**
    41  * TODO: použít jiné než datové piny (tam lze zapsat jen celý bajt najednou)
    42  */
    43 void zapisData(bool hodnota) {
    44 	std::cout << "DATA  = " << hodnota << std::endl;
    45 	if (hodnota) {
    46 		// TODO: zapsat na LPT (a nevymazat CLOCK)
    47 	} else {
    48 		// TODO: zapsat na LPT (a nevymazat CLOCK)
    49 	}
    50 }
    51 
    52 /**
    53  *
    54  */
    55 void zapisClock(bool hodnota) {
    56 	std::cout << "CLOCK = " << hodnota << std::endl;
    57 	if (hodnota) {
    58 		// TODO: zapsat na LPT (a nevymazat DATA)
    59 	} else {
    60 		// TODO: zapsat na LPT (a nevymazat DATA)
    61 	}
    62 }
    63 
    64 /**
    65  * Čeká zadaný čas v mikrosekundách.
    66  * Je možné zpomalit konstantou BRZDA.
    67  */
    68 void cekej(int mikroSekund) {
    69 	usleep(mikroSekund*BRZDA);
    70 }
    71