Indicatoare LED cu șapte segmente. Indicator cu șapte segmente Temporizator pe indicatorul Arduino cu 4 segmente

Conectarea unui afișaj cu 7 segmente la un Arduino este un proiect excelent pentru a vă cunoaște mai bine placa Arduino. Dar este destul de ușor de făcut. Prin urmare, vom complica oarecum sarcina și vom conecta un indicator de patru cifre și șapte segmente.



În acest caz, vom folosi un modul indicator LED din patru cifre cu un catod comun.


Fiecare segment din modulul indicator este multiplexat, ceea ce înseamnă că împărtășește un punct de conectare a anodului cu alte segmente ale descărcării sale. Și fiecare dintre cei patru biți din modul are propriul punct de conectare cu un catod comun. Acest lucru permite ca fiecare cifră să fie activată sau oprită independent. În plus, această metodă de multiplexare permite microcontrolerului să folosească doar unsprezece sau doisprezece pini în loc de treizeci și doi.



Segmentele LED ale indicatorului necesită conectarea rezistențelor de limitare a curentului atunci când sunt alimentate de la 5 V pe pinul logic. Valoarea rezistenței este de obicei luată între 330 și 470 ohmi. De asemenea, se recomandă utilizarea tranzistoarelor pentru a furniza curent suplimentar, deoarece fiecare pin al microcontrolerului poate furniza maximum 40 mA. Dacă porniți toate segmentele de descărcare (numărul 8), consumul de curent va depăși această limită. Figura de mai jos arată o diagramă de conectare pentru un indicator cu patru cifre și șapte segmente care utilizează tranzistoare cu rezistență limitatoare de curent.



Următoarele sunt diagrame pentru conectarea indicatorului la pinii Arduino. Aici se folosesc tranzistori bipolari NPN BC547. Un potențiometru de 10 KOhm conectat la intrarea plăcii A0 vă permite să schimbați valoarea afișată pe indicator de la 0 la 1023.




Pe placa Arduino, ieșirile digitale D2-D8 în acest caz sunt folosite pentru a controla segmentele „a” la „g”, iar ieșirile digitale D9-D12 sunt folosite pentru a controla biții D0 la D3. Trebuie remarcat faptul că în acest exemplu punctul nu este folosit, dar în schița de mai jos este posibil să-l folosească. Pinul D13 al plăcii Arduino este rezervat pentru controlul segmentului de punct.



Mai jos este codul care vă permite să controlați un indicator de segment din patru cifre folosind o placă Arduino. În ea, matricea numerică specifică codurile numerelor de la 0 la 9 în formă binară. Această schiță acceptă atât indicatorii cu un catod comun (în mod implicit), cât și indicatorii cu un anod comun (pentru a face acest lucru, trebuie să decomentați o linie la sfârșitul schiței).


// biți reprezentând segmentele de la A la G (și puncte), pentru numerele 0-9 const int numeral = ( //ABCDEFG /dp B11111100, // 0 B01100000, // 1 B11011010, // 2 B11110010, // 0110, // 3 B011, // // 4 B10110110, // 5 B00111110, // 6 B11100000, // 7 B11111110, // 8 B11100110, // 9 ); // pini pentru punct și fiecare segment // DP,G,F,E,D,C,B,A const int segmentPins = ( 13,8,7,6,5,4,3,2 ); const int nbrDigits= 4; // numărul de cifre ale indicatorului LED // cifre 0 1 2 3 const int digitPins = ( 9,10,11,12 ); void setup() (for(int i=0; i< 8; i++) { pinMode(segmentPins[i], OUTPUT); // устанавливаем выводы для сегментов и точки на выход } for(int i=0; i < nbrDigits; i++) { pinMode(digitPins[i], OUTPUT); } } void loop() { int value = analogRead(0); showNumber(value); } void showNumber(int number) { if(number == 0) { showDigit(0, nbrDigits-1) ; // отображаем 0 в правом разряде } else { // отображаем значение, соответствующее каждой цифре // крайняя левая цифра 0, правая на единицу меньше, чем число позиций for(int digit = nbrDigits-1; digit >= 0; digit--) ( if(number > 0) ( showDigit(number % 10, digit) ; number = number / 10; ) ) ) ) // Afișează numărul specificat pe această cifră a indicatorului cu 7 segmente void showDigit(int număr, cifră int) ( digitalWrite(digitPins, HIGH); for(int segment = 1; segment< 8; segment++) { boolean isBitSet = bitRead(numeral, segment); // isBitSet будет истинным, если данный бит будет 1 // isBitSet = ! isBitSet; // опционально // раскомментируйте опциональную строчку выше для индикатора с общим анодом digitalWrite(segmentPins, isBitSet); } delay(5); digitalWrite(digitPins, LOW); }


Schema de conectare pentru un indicator cu o cifră și șapte segmente
Schema de conectare pentru un indicator cu mai multe cifre și șapte segmente

Dispozitiv de afișare digitală a informațiilor. Aceasta este cea mai simplă implementare a unui indicator care poate afișa cifre arabe. Pentru afișarea literelor sunt utilizați indicatori multisegment și matrici mai complexi.

După cum spune și numele, este format din șapte elemente de afișare (segmente) care se pornesc și se opresc separat. Incluzându-le în diferite combinații, ele pot fi folosite pentru a crea imagini simplificate ale cifrelor arabe.
Segmentele sunt desemnate cu literele de la A la G; al optulea segment - virgulă zecimală (punct zecimal, DP), conceput pentru a afișa numere fracționale.
Ocazional, litere sunt afișate pe indicatorul cu șapte segmente.

Ele vin într-o varietate de culori, de obicei alb, roșu, verde, galben și albastru. În plus, pot fi de diferite dimensiuni.

De asemenea, indicatorul LED poate fi cu o singură cifră (ca în figura de mai sus) sau cu mai multe cifre. Practic, indicatoarele LED cu una, două, trei și patru cifre sunt utilizate în practică:

Pe lângă zece cifre, indicatorii cu șapte segmente sunt capabili să afișeze litere. Dar puține litere au o reprezentare intuitivă în șapte segmente.
În latină: majuscule A, B, C, E, F, G, H, I, J, L, N, O, P, S, U, Y, Z, litere mici a, b, c, d, e, g , h, i, n, o, q, r, t, u.
În chirilic: A, B, V, G, g, E, i, N, O, o, P, p, R, S, s, U, Ch, Y (două cifre), b, E/Z.
Prin urmare, indicatorii cu șapte segmente sunt utilizați doar pentru a afișa mesaje simple.

În total, indicatorul LED cu șapte segmente poate afișa 128 de caractere:

Un indicator LED tipic are nouă fire: unul merge la catozii tuturor segmentelor, iar celelalte opt merg la anodul fiecărui segment. Această schemă se numește "circuit catod comun", există și scheme cu anod comun(atunci este invers). Adesea, nu unul, ci două terminale comune sunt realizate la capete diferite ale bazei - acest lucru simplifică cablarea fără a crește dimensiunile. Există și așa-zise „universale”, dar eu personal nu am întâlnit așa ceva. În plus, există indicatori cu un registru de deplasare încorporat, care reduce foarte mult numărul de pini de port al microcontrolerului implicați, dar sunt mult mai scumpi și sunt rar utilizați în practică. Și întrucât imensitatea nu poate fi sesizată, nu vom lua în considerare deocamdată astfel de indicatori (dar există și indicatori cu un număr mult mai mare de segmente, matrici).

Indicatoare LED cu mai multe cifre adesea funcționează pe un principiu dinamic: ieșirile segmentelor cu același nume ale tuturor cifrelor sunt conectate împreună. Pentru a afișa informații despre un astfel de indicator, microcircuitul de control trebuie să furnizeze ciclic curent la bornele comune ale tuturor cifrelor, în timp ce curentul este furnizat la bornele segmentului în funcție de faptul că un anumit segment este aprins într-o anumită cifră.

Conectarea unui indicator cu o cifră și șapte segmente la un microcontroler

Diagrama de mai jos arată cum este conectat un indicator cu o singură cifră și șapte segmente la microcontroler.
Trebuie avut în vedere că dacă indicatorul cu CATOD COMUN, atunci ieșirea sa comună este conectată la "Pământ", iar segmentele sunt aprinse prin hrănire unitate logică la ieșirea portului.
Dacă indicatorul este ANOD COMUN, apoi este alimentat la firul său comun "la care se adauga" tensiune, iar segmentele sunt aprinse prin comutarea ieșirii portului la starea zero logic.

Indicarea într-un indicator LED cu o singură cifră se realizează prin aplicarea unui cod binar la pinii portului microcontrolerului cifrei corespunzătoare nivelului logic corespunzător (pentru indicatorii cu OK - cei logici, pentru indicatorii cu OA - zerouri logice).

Rezistoare limitatoare de curent pot fi prezente sau nu în diagramă. Totul depinde de tensiunea de alimentare furnizată indicatorului și de caracteristicile tehnice ale indicatoarelor. Dacă, de exemplu, tensiunea furnizată segmentelor este de 5 volți și acestea sunt proiectate pentru o tensiune de funcționare de 2 volți, atunci trebuie instalate rezistențe de limitare a curentului (pentru a limita curentul prin ele pentru o tensiune de alimentare crescută și pentru a nu arde nu numai indicatorul, ci și portul microcontrolerului).
Este foarte ușor de calculat valoarea rezistențelor de limitare a curentului, folosind formula bunicului Ohm.
De exemplu, caracteristicile indicatorului sunt următoarele (preluate din fișa de date):
— tensiune de funcționare — 2 volți
— curent de funcționare — 10 mA (=0,01 A)
— tensiune de alimentare 5 volți
Formula de calcul:
R= U/I (toate valorile din această formulă trebuie să fie în Ohmi, Volți și Amperi)
R= (tensiune de alimentare - tensiune de lucru)/curent de lucru
R= (5-2)/0,01 = 300 Ohm

Schema de conectare pentru un indicator LED cu șapte segmente cu mai multe cifre Practic, la fel ca atunci când conectați un indicator cu o singură cifră. Singurul lucru este că tranzistorii de control sunt adăugați în catozii (anozii) indicatorilor:

Nu este prezentat în diagramă, dar între bazele tranzistorilor și pinii portului microcontrolerului, este necesar să se includă rezistențe, a căror rezistență depinde de tipul de tranzistor (valorile rezistenței sunt calculate, dar de asemenea, puteți încerca să utilizați rezistențe cu o valoare nominală de 5-10 kOhm).

Indicarea prin descărcări se realizează dinamic:
— codul binar al cifrei corespunzătoare este setat la ieșirile portului PB pentru prima cifră, apoi nivelul logic este aplicat tranzistorului de control al primei cifre
— codul binar al cifrei corespunzătoare este setat la ieșirile portului PB pentru a 2-a cifră, apoi nivelul logic este aplicat tranzistorului de control al celei de-a doua cifre
— codul binar al cifrei corespunzătoare este setat la ieșirile portului PB pentru a treia cifră, apoi nivelul logic este aplicat tranzistorului de control al celei de-a treia cifre
- deci într-un cerc
În acest caz, este necesar să se ia în considerare:
— pentru indicatorii cu Bine se utilizează structura tranzistorului de control NPN(controlat de unitatea logică)
- pentru indicator cu OA- structura tranzistorului PNP(controlat de zero logic)

Cu siguranță ați văzut deja cei „opt” indicatori. Acesta este un indicator LED cu șapte segmente, care servește la afișarea numerelor de la 0 la 9, precum și a punctului zecimal ( D.P.- Punct zecimal) sau virgulă.

Din punct de vedere structural, acest produs este un ansamblu de LED-uri. Fiecare LED din ansamblu luminează propriul său segment de semn.

În funcție de model, ansamblul poate consta din 1 - 4 grupuri cu șapte segmente. De exemplu, indicatorul ALS333B1 constă dintr-un grup de șapte segmente, care este capabil să afișeze doar o cifră de la 0 la 9.

Dar indicatorul LED KEM-5162AS are deja două grupuri de șapte segmente. Este format din două cifre. Următoarea fotografie prezintă diferiți indicatori LED cu șapte segmente.

Există, de asemenea, indicatori cu 4 grupuri de șapte segmente - patru cifre (foto - FYQ-5641BSR-11). Pot fi folosite în ceasurile electronice de casă.

Cum sunt indicați indicatorii cu șapte segmente pe diagrame?

Deoarece indicatorul cu șapte segmente este un dispozitiv electronic combinat, imaginea sa de pe diagrame diferă puțin de aspectul său.

Trebuie doar să acordați atenție faptului că fiecare pin corespunde unui anumit segment de semn la care este conectat. Există, de asemenea, unul sau mai multe terminale ale unui catod sau anod comun, în funcție de modelul dispozitivului.

Caracteristici ale indicatorilor cu șapte segmente.

În ciuda simplității aparente a acestei părți, are și propriile sale particularități.

În primul rând, indicatoarele LED cu șapte segmente vin cu un anod comun și un catod comun. Această caracteristică ar trebui să fie luată în considerare atunci când o achiziționați pentru un design sau dispozitiv de casă.

Iată, de exemplu, pinout-ul indicatorului cu 4 cifre deja familiar pentru noi FYQ-5641BSR-11.

După cum puteți vedea, anozii LED-urilor fiecărei cifre sunt combinați și scos la un pin separat. Catozii LED-urilor care aparțin segmentului semnului (de exemplu, G), conectate între ele. Multe depind de ce fel de diagramă de conectare are indicatorul (cu un anod sau catod comun). Dacă vă uitați la schemele de circuit ale dispozitivelor care folosesc indicatori cu șapte segmente, va deveni clar de ce acest lucru este atât de important.

Pe lângă indicatori mici, există și alții mari și chiar foarte mari. Ele pot fi văzute în locuri publice, de obicei sub formă de ceasuri de perete, termometre și informatori.

Pentru a crește dimensiunea numerelor de pe afișaj și în același timp a menține luminozitatea suficientă a fiecărui segment, se folosesc mai multe LED-uri, conectate în serie. Iată un exemplu de astfel de indicator - se potrivește în palma mâinii tale. Acest FYS-23011-BUB-21.

Un segment al acestuia este format din 4 LED-uri conectate în serie.

Pentru a ilumina unul dintre segmente (A, B, C, D, E, F sau G), trebuie să-i aplicați o tensiune de 11,2 volți (2,8 V pentru fiecare LED). Puteți face mai puțin, de exemplu, 10V, dar și luminozitatea va scădea. Excepția este punctul zecimal (DP), segmentul său este format din două LED-uri. Are nevoie doar de 5 - 5,6 volți.

Indicatorii cu două culori se găsesc și în natură. De exemplu, leduri roșii și verzi sunt încorporate în ele. Se pare că există, parcă, două indicatoare încorporate în carcasă, dar cu LED-uri de diferite culori. Dacă aplicați tensiune la ambele circuite LED, puteți obține o strălucire galbenă din segmente. Iată o diagramă de cablare pentru unul dintre acești indicatori cu două culori (SBA-15-11EGWA).

Dacă conectați pinii 1 ( ROȘU) și 5 ( VERDE) la alimentarea cu „+” prin tranzistoare cheie, puteți schimba culoarea numerelor afișate de la roșu la verde. Și dacă conectați pinii 1 și 5 în același timp, culoarea strălucitoare va fi portocalie. Acesta este modul în care vă puteți juca cu indicatorii.

Managementul indicatorilor cu șapte segmente.

Pentru a controla indicatorii cu șapte segmente în dispozitivele digitale, se folosesc registre de deplasare și decodoare. De exemplu, un decodor utilizat pe scară largă pentru controlul indicatorilor din seriile ALS333 și ALS324 este un microcircuit K514ID2 sau K176ID2. Iată un exemplu.

Și pentru a controla indicatorii moderni importați, se folosesc de obicei registrele de deplasare 74HC595. În teorie, segmentele de afișare pot fi controlate direct de la ieșirile microcontrolerului. Dar un astfel de circuit este rar folosit, deoarece acest lucru necesită folosirea a câțiva pini ai microcontrolerului în sine. Prin urmare, registrele de deplasare sunt utilizate în acest scop. În plus, curentul consumat de LED-urile segmentului de semn poate fi mai mare decât curentul pe care îl poate furniza ieșirea obișnuită a microcontrolerului.

Pentru a controla indicatoare mari cu șapte segmente, cum ar fi FYS-23011-BUB-21, se folosesc drivere specializate, de exemplu, un microcircuit MBI5026.

Ce se află în interiorul indicatorului cu șapte segmente?

Ei bine, ceva gustos. Orice inginer electronic nu ar fi unul dacă nu ar fi interesat de „interiorul” componentelor radio. Acesta este ceea ce se află în interiorul indicatorului ALS324B1.

Patratele negre de pe baza sunt cristale LED. Aici puteți vedea și jumperii aurii care conectează cristalul la unul dintre pini. Din păcate, acest indicator nu va mai funcționa, deoarece aceleași jumperi au fost rupte. Dar putem vedea ce se ascunde în spatele panoului decorativ al tabloului de bord.

Cu această abordare, pentru a scoate un număr cu orice număr de cifre, sunt utilizate doar 2 ieșiri digitale ale Arduino.

De exemplu, vom afișa pe indicatoare numărul de secunde care au trecut de la începerea lucrului.

Componentele sursei

Principiul de funcționare

Un indicator cu șapte segmente este pur și simplu un set de LED-uri obișnuite într-o singură carcasă. Sunt pur și simplu așezate într-o figură opt și au forma unui segment de băț. Îl puteți conecta direct la Arduino, dar apoi vor fi ocupați 7 pini, iar programul va trebui să implementeze un algoritm pentru conversia numerelor din reprezentarea binară în semnale corespunzătoare „fontului calculatorului”.

Pentru a simplifica această sarcină, există un driver cu 7 segmente. Acesta este un cip simplu cu un contor intern. Are 7 ieșiri pentru conectarea tuturor segmentelor (pinii a, b, c, d, e, f, g), un contact pentru resetarea contorului la 0 (pin de resetare) și un contact pentru creșterea valorii cu unul (pin de ceas) . Valoarea contorului intern este convertită în semnale (pornit/oprit) pe pinii a-g, astfel încât să vedem cifra arabă corespunzătoare.

Există o altă ieșire pe cip, desemnată „÷10”. Valoarea acestuia este întotdeauna LOW, cu excepția momentului de depășire, când valoarea contorului este 9, și este mărită cu unu. În acest caz, valoarea contorului devine din nou 0, dar ieșirea „÷10” devine HIGH până la următorul increment. Poate fi conectat la pinul de ceas al altui driver și astfel obține un contor pentru numerele din două cifre. Continuând acest lanț, puteți tipări numere arbitrar lungi.

Cipul poate funcționa la frecvențe de până la 16 MHz, adică va înregistra modificările la pinul ceasului chiar dacă se întâmplă de 16 milioane de ori pe secundă. Arduino funcționează la aceeași frecvență și acest lucru este convenabil: pentru a scoate un anumit număr, resetați contorul la 0 și creșteți rapid valoarea cu unu la valoarea specificată. Acest lucru nu este vizibil pentru ochi.

Conexiune

Mai întâi, să instalăm indicatoare și drivere pe placa de breadboard. Toate au picioare pe ambele părți, așa că pentru a nu scurtcircuita contactele opuse, aceste componente trebuie să fie plasate deasupra canelurii centrale a plăcii. O canelură împarte placa de breadboard în două jumătăți neconectate.

    16 - la șina de alimentare: aceasta este puterea pentru microcircuit

    2 „dezactivați ceasul” - la șina de sol: nu îl folosim

    3 „activare afișaj” - la șina de alimentare: aceasta este puterea indicatorului

    8 "0V" - la șina de împământare: aceasta este o masă comună

    1 „ceas” - printr-un rezistor de tragere la masă. Mai târziu vom conecta un semnal de la Arduino la acest pin. Prezența unui rezistor este utilă pentru a evita declanșarea falsă din cauza zgomotului ambiental în timp ce intrarea nu este conectată la nimic. O valoare adecvată este 10 kΩ. Când conectăm acest pin la ieșirea Arduino, rezistorul nu va juca niciun rol: semnalul va trage microcontrolerul la masă. Prin urmare, dacă știți că driverul va fi întotdeauna conectat la Arduino în timpul funcționării, nu puteți utiliza deloc o rezistență.

    Vom lăsa 15 „resetare” și 5 „÷10” neconectate pentru moment, dar rețineți - vom avea nevoie de ele în viitor

Pinii 3 și 8 de pe indicator sunt desemnați ca „catod”, sunt comuni tuturor segmentelor și trebuie conectați direct la o masă comună.

Urmează cea mai minuțioasă muncă: conectarea ieșirilor microcircuitului cu anozii corespunzători ai indicatorului. Acestea trebuie conectate prin rezistențe de limitare a curentului, la fel ca LED-urile obișnuite. În caz contrar, curentul din această secțiune a circuitului va fi mai mare decât în ​​mod normal și acest lucru poate duce la defecțiunea indicatorului sau a microcircuitului. O valoare nominală de 220 Ohm va fi potrivită.

Conexiunea trebuie realizată prin potrivirea pinout-ului microcircuitului (ieșirile a-g) și pinout-ului indicatorului (intrarilor a-g)

Repetați procedura pentru a doua categorie

Acum ne amintim despre contactul „resetare”: trebuie să le conectăm împreună și să le tragem la masă printr-un rezistor de tragere în jos. Ulterior, vom conecta un semnal de la Arduino la ei, astfel încât să poată reseta întreaga valoare în ambele drivere.

De asemenea, vom trimite un semnal cu „÷10” de la driverul din dreapta către intrarea „ceas” a celui din stânga. Astfel obținem un circuit capabil să afișeze numere cu două cifre.

Este de remarcat faptul că „ceasul” șoferului din stânga nu trebuie tras la masă cu un rezistor, așa cum s-a făcut pentru cel drept: conexiunea sa la „÷10” în sine va face semnalul stabil și tragerea acestuia la masă. nu poate decât să perturbe stabilitatea transmisiei semnalului.

Hardware-ul este gata, tot ce rămâne este să implementezi un program simplu.

Programare

7segment.pde #define CLOCK_PIN 2 #define RESET_PIN 3 /* * Funcția resetNumber resetează valoarea curentă * pe contor */ void resetNumber() ( // Pentru a reseta, setați contactul pentru un moment // resetați la HIGH și reveniți înapoi la LOW digitalWrite(RESET_PIN, HIGH) ; digitalWrite(RESET_PIN, LOW) ; ) /* * Funcția showNumber setează citirile indicatorului * la un număr dat nenegativ `n`, indiferent * de valoarea anterioară */ void showNumber(int n) ( // În primul rând, resetați valoarea curentă resetNumber() ; // Apoi, „dați clic” rapid pe contor la cel dorit// valorile în timp ce (n-- ) ( digitalWrite(CLOCK_PIN, HIGH) ; digitalWrite(CLOCK_PIN, LOW) ; ) ) void setup() ( pinMode(RESET_PIN, OUTPUT) ; pinMode(CLOCK_PIN, OUTPUT) ; // Resetează contorul la pornire, astfel încât să nu apară // într-o stare aleatorie resetNumber() ; ) bucla void() ( // Obține numărul de secunde într-un minut incomplet // din momentul pornirii și afișați-l pe indicatoare showNumber((milis() / 1000 ) % 60 ) ; întârziere (1000); )

Rezultat

Conectăm pinul 2 de la Arduino la pinul de ceas al driverului junior (dreapta), pinul 3 la resetarea generală a driverelor; distribuim alimente; porniți-l - funcționează!

Să conectăm un indicator LED cu șapte segmente la placa Arduino și să învățăm cum să-l controlăm folosind biblioteca Led4Digits.h.

Lecția anterioară a descris în detaliu microcontrolere. Să conectăm un astfel de indicator la placa Arduino.

Diagrama pentru conectarea indicatorului la placa Arduino arată astfel.

L-am asamblat pe o placă de circuit.

Pentru a gestiona indicatorii, am scris biblioteca Led4Digits.h:

Și plătește.

Biblioteca vă permite să gestionați indicatorii cu șapte segmente:

  • dimensiune de până la patru cifre;
  • cu orice variante de polarități ale impulsului de control (toate);
  • lucrează într-un proces paralel;
  • vă permite să afișați pe indicator:
    • segmente din fiecare categorie;
    • cifra fiecărei cifre;
    • întreg 0 ... 9999;
  • pentru a scoate un număr întreg, se poate specifica numărul de cifre;
  • Există un mod de suprimare a cifrelor nesemnificative.

Puteți descărca biblioteca Led4Digits.h de la acest link:

Și plătește. Doar 25 de freci. pe lună pentru acces la toate resursele site-ului!

Cum se instalează este scris în .

Nu voi furniza textele sursă. Le puteți căuta în fișierele bibliotecii. Ca întotdeauna, există o mulțime de comentarii acolo. Voi descrie în detaliu, cu exemple, modul de utilizare a bibliotecii.

Biblioteca de control LED pentru Arduino Led4Digits.

Iată descrierea clasei. Am oferit doar metode și proprietăți publice.

clasa Led4Digits (
public:
cifra octet; // coduri de control al segmentului de biți
void regen(); // regenerare, metoda trebuie apelată în mod regulat
void tetradToSegCod(byte dig, byte tetrad); // conversia tetradei în coduri de segment
tipărire booleană (valoare int fără semn, octet digitNum, octet gol); // ieșire întreg



} ;

Constructor.

Led4Digits (byte typeLed, byte digitPin0, byte digitPin1, octet digitPin2, octet digitPin3,
octet segPinA, octet segPinB, octet segPinC, octet segPinD,
octet segPinE, octet segPinF, octet segPinG, octet segPinH);

typeLed Setează polaritățile impulsului de control pentru semnalele de selecție de biți și segmente. Suporta orice scheme de conexiune ().

typeLed Selectarea categoriei Selectarea segmentului Tipul circuitului
0 -_- -_- Anod comun cu taste de selectare a descărcarii
1 _-_ -_- Anod comun
2 -_- _-_ catod comun
3 _-_ _-_ Catod comun cu taste de selectare a descărcarii

digitPin0...digitPin3– iesiri pentru selectarea cifrelor. Dacă digitPin = 255, atunci cifra este dezactivată. Acest lucru vă permite să conectați indicatoare cu mai puține cifre. digitPin0 – cifră inferioară (dreapta).

segPinA...segPinH– ieșiri de control segment.

De exemplu,

înseamnă: indicator tip 1; ieșiri de descărcare 5,4,3,2; ieșirile segmentelor 6,7,8,9,10,11,12,13.

metoda void regen().

Metoda trebuie apelată în mod regulat într-un proces paralel. Regenerează imaginea de pe indicatoare. Timpul ciclului de regenerare este egal cu perioada apelului metodei înmulțită cu numărul de biți.

De exemplu,

// manevrător de întreruperi 2 ms
void timerInterrupt() (
disp.regen(); // regenerarea indicatorului
}

Matrice de cifre de octeți

Conține starea segmentelor. cifra este bitul cel mai puțin semnificativ, bitul cel mai puțin semnificativ al cifrei este segmentul „A” al bitului cel mai puțin semnificativ. O stare de bit de 1 înseamnă că segmentul este aprins.

De exemplu,

cifra = B0000101;

înseamnă că în a doua cifră sunt aprinse segmentele „A” și „C”.

Un exemplu de program care luminează secvenţial toate segmentele fiecărei cifre.

// segmente de rulare
#include
#include

//
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

void setup() (
întreruperea temporizatorului 2 ms
MsTimer2::start(); // activare întrerupere
}

void loop() (
pentru (int i = 0; i< 32; i++) {
dacă (i == 0) disp.digit= 1;
else if (i == 8) disp.digit= 1;
else if (i == 16) disp.digit= 1;
else if (i == 24) disp.digit= 1;
altceva(
disp.digit = disp.digit<< 1;
disp.digit = disp.digit<< 1;
disp.digit = disp.digit<< 1;
disp.digit = disp.digit<< 1;
}
întârziere (250);
}
}

//manevrător de întreruperi 2 ms
void timerInterrupt() (
disp.regen(); // regenerarea indicatorului
}

În matricea de cifre, 1 este deplasat și indicatorii afișează acest lucru.

Metoda void tetradToSegCod(byte dig, byte tetrad)

Metoda vă permite să afișați numere și litere de cod hexazecimal în cifre individuale. Are argumente:

  • dig – cifra cifrei 0 ... 3;
  • tetradă – cod de caractere zecimale. Codul 0 va afișa numărul „0”, codul 1 - numărul „1”, codul 14 - litera „E”.

De exemplu,

tetrad(2, 7);

va afișa numărul „7” în a treia cifră.

Un exemplu de program care schimbă pe rând caracterele din fiecare cifră.

// numerele unul câte unul
#include
#include

// indicator tip 1; ieșiri de descărcare 5,4,3,2; ieșiri de segment 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

void setup() (
MsTimer2::set(2, timerInterrupt); // întreruperea temporizatorului 2 ms
MsTimer2::start(); // activare întrerupere
}

void loop() (
pentru (int i = 0; i< 64; i++) {
disp.tetradToSegCod(i>>4, i);
întârziere (250);
}
}

// manevrător de întreruperi 2 ms
void timerInterrupt() (
disp.regen(); // regenerarea indicatorului
}

Metodă boolean print (valoare int fără semn, octet digitNum, octet gol)

Metoda afișează un număr întreg pe indicatori. Convertește numărul binar în BCD pentru fiecare cifră. Are argumente:

  • valoare – numărul care este afișat pe indicator.
  • digitNum – numărul de cifre pentru număr. Acest lucru nu trebuie confundat cu numărul de cifre indicatoare. Poate doriți să afișați un număr pe 2 cifre și să afișați caractere pe celelalte două folosind cifre.
  • gol – un semn de suprimare a cifrelor nesemnificative. gol=0 înseamnă că numărul trebuie afișat cu toate zerourile. Numărul „7” va arăta ca „0007”. Dacă golul este diferit de 0, zerourile nesemnificative vor fi suprimate.

Dacă valoarea numărului depășește numărul permis pentru numărul selectat de cifre (digitNum), atunci funcția va afișa „---” pe indicator și va returna fals.

Un exemplu de program de ieșire de numere.

// numărul de ieșire
#include
#include

// indicator tip 1; ieșiri de descărcare 5,4,3,2; ieșiri de segment 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

void setup() (
MsTimer2::set(2, timerInterrupt); // întreruperea temporizatorului 2 ms
MsTimer2::start(); // activare întrerupere
}

void loop() (
pentru (int i = 0; i< 12000; i++) {
disp.print(i, 4, 1);
întârziere (50);
}
}

// manevrător de întreruperi 2 ms
void timerInterrupt() (
disp.regen(); // regenerarea indicatorului
}

Ultimele două metode nu schimbă starea segmentului „H” – virgulă zecimală. Pentru a schimba starea unui punct, puteți folosi comenzile:

cifra |= 0x80; // aprinde punctul zecimal
cifra &= 0x7f; // stinge punctul zecimal

Ieșire la indicatorii numerelor negative (int).

Numerele negative pot fi scoase după cum urmează:

  • Verificați semnul numărului.
  • Dacă numărul este negativ, imprimați un semn minus la cea mai semnificativă cifră și schimbați semnul numărului în pozitiv în funcția print().
  • Dacă numărul este pozitiv, atunci dezactivați bitul de semn și tipăriți numărul utilizând funcția print().

Iată un program care demonstrează această metodă. Emite numere de la -999 la 999.

// scoateți numere negative
#include
#include

// indicator tip 1; ieșiri de descărcare 5,4,3,2; ieșiri de segment 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

void setup() (
MsTimer2::set(2, timerInterrupt); // întreruperea temporizatorului 2 ms
MsTimer2::start(); // activare întrerupere
}

void loop() (

pentru (int i = -999; i< 1000; i++) {

dacă eu< 0) {
// numarul este negativ
disp.digit= B01000000; // semn -
disp.print(i * -1, 3, 1);
}
altceva(
disp.digit= B00000000; // şterge semnul
disp.print(i, 3, 1);
}

întârziere (50);
}
}

// manevrător de întreruperi 2 ms
void timerInterrupt() (
disp.regen(); // regenerarea indicatorului
}

Ieșire la indicatorii numerelor fracționale, format flotant.

Există multe modalități de afișare a numerelor în virgulă mobilă (floating) folosind funcții standard ale limbajului C. Aceasta este, în primul rând, funcția sprint(). Funcționează foarte lent, necesită conversii suplimentare ale codurilor de caractere în coduri zecimale binare, trebuie să extrageți un punct dintr-un șir. Aceleași probleme cu alte funcții.

Folosesc o metodă diferită pentru afișarea valorilor variabilelor float pe indicatori. Metoda este simplă, fiabilă, rapidă. Se reduce la următoarele operații:

  • Numărul în virgulă mobilă este înmulțit cu 10 la puterea corespunzătoare numărului necesar de zecimale. Dacă trebuie să afișați 1 zecimală pe indicatori, înmulțiți cu 10, dacă 2, apoi înmulțiți cu 100, 3 zecimale cu 1000.
  • În continuare, numărul în virgulă mobilă este convertit în mod explicit într-un număr întreg (int) și afișat pe indicatori folosind funcția print().
  • Un punct este plasat în cifra necesară.

De exemplu, următoarele linii vor scoate o variabilă float cu două zecimale către LED-urile cu șapte segmente.

float x = 2,12345;

disp.digit |= 0x80; //

Înmulțim numărul cu 100 și plasând un punct în a treia cifră, împărțim rezultatul la 100.

Iată un program care afișează numere în virgulă mobilă de la 0,00 la 99,99 pe indicatoare.

// ieșire în virgulă mobilă
#include
#include

// indicator tip 1; ieșiri de descărcare 5,4,3,2; ieșiri de segment 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

void setup() (
MsTimer2::set(2, timerInterrupt); // întreruperea temporizatorului 2 ms
MsTimer2::start(); // activare întrerupere
}

void loop() (
float x = 0;

pentru (int i = 0; i< 10000; i++) {
x += 0,01;

disp.print((int)(x * 100.), 4, 1);
disp.digit |= 0x80; // aprinde punctul de al treilea nivel

întârziere (50);
}
}

//manevrător de întreruperi 2 ms
void timerInterrupt() (
disp.regen(); // regenerarea indicatorului
}

După cum puteți vedea, biblioteca Led4Digits.h simplifică foarte mult lucrul cu indicatoare cu diode emițătoare de lumină (LED) cu șapte segmente conectate la placa Arduino. Nu am găsit un analog al unei astfel de biblioteci.

Există biblioteci pentru lucrul cu afișaje LED prin intermediul unui registru de deplasare. Cineva mi-a scris că a găsit o bibliotecă care funcționează cu un afișaj LED conectat direct la placa Arduino. Dar atunci când îl utilizați, cifrele indicatorului strălucesc neuniform și fac cu ochiul.

Spre deosebire de analogii săi, biblioteca Led4Digits.h:

  • Funcționează ca un proces paralel. În bucla principală, programul încarcă date în anumite variabile, care sunt afișate automat pe afișaj. Ieșirea informațiilor și regenerarea indicatorului au loc într-o întrerupere a temporizatorului, invizibilă pentru programul principal.
  • Numerele afișajului luminează uniform, fără să clipească. Această proprietate este asigurată de faptul că regenerarea are loc într-un ciclu strict definit de o întrerupere a temporizatorului.
  • Biblioteca are cod compact, se execută rapid și încarcă minim controlerul.

În lecția următoare, vom conecta un indicator LED și o matrice de butoane la placa Arduino în același timp. Să scriem o bibliotecă pentru un astfel de design.

Categorie: . Puteți să-l marcați.