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