Display is een zeer belangrijk onderdeel van elke Embedded System-applicatie, omdat het gebruikers helpt om de status van het systeem te kennen en ook de output of een door het systeem gegenereerd waarschuwingsbericht weergeeft. Er zijn veel soorten displays die in de elektronica worden gebruikt, zoals een 7-segment display, LCD display, TFT touchscreen display, LED display etc.
We hebben in onze vorige tutorial al een 16x2 LCD-interface met ARM7-LPC2148 gekoppeld. Vandaag zullen we in deze tutorial een 7-segment display koppelen aan ARM7-LPC2148. Voordat we in detail treden, zullen we zien hoe we de 7-segment module kunnen besturen om een willekeurig aantal karakters weer te geven.
7-segmenten display
7-segmentdisplays behoren tot de eenvoudigste display-eenheden om de cijfers en tekens weer te geven. Het wordt over het algemeen gebruikt om cijfers weer te geven en heeft een helderdere verlichting en een eenvoudigere constructie dan een dot-matrix-display. En vanwege de helderdere verlichting kan de output van een grotere afstand worden bekeken dan bij een LCD. Zoals te zien is in de bovenstaande afbeelding van een 7-segmentendisplay, bestaat het uit 8 LED's, waarbij elke LED wordt gebruikt om één segment van de eenheid te verlichten en de 8thLED die wordt gebruikt om DOT te verlichten in een 7-segmentendisplay. 8thLED wordt gebruikt wanneer twee of meer 7-segmentmodules worden gebruikt, bijvoorbeeld om (0.1) weer te geven. Een enkele module wordt gebruikt om een enkel cijfer of teken weer te geven. Om meer dan één cijfer of teken weer te geven, worden meerdere 7-segmenten gebruikt.
Pinnen van 7-segment display
Er zijn 10 pinnen, waarbij 8 pinnen worden gebruikt om a, b, c, d, e, f, g en h / dp te verwijzen, de twee middelste pinnen zijn gemeenschappelijke anode / kathode van alle leds. Deze gemeenschappelijke anode / kathode is intern kortgesloten, dus we hoeven maar één COM-pin aan te sluiten
Afhankelijk van de aansluiting classificeren we 7-Segment in twee typen:
Gemeenschappelijke kathode
Hierin zijn alle negatieve aansluitingen (kathode) van alle 8 LED's met elkaar verbonden (zie onderstaande afbeelding), genaamd COM. En alle positieve terminals worden met rust gelaten of verbonden met de microcontroller-pinnen. Als we een microcontroller gebruiken, stellen we logica HOOG in om het specifieke te verlichten en stellen we LAAG in om de LED UIT te schakelen.
Veel voorkomende Anode
Hierin zijn alle positieve terminals (Anodes) van alle 8 LED's met elkaar verbonden, genaamd COM. En alle negatieve thermiek wordt met rust gelaten of verbonden met de pinnen van de microcontroller. Als we een microcontroller gebruiken, stellen we logica LAAG in om het specifieke te verlichten en stellen we logica Hoog in om LED UIT te schakelen.
Dus afhankelijk van de pinwaarde, kan een bepaald segment of een lijn van 7 segmenten worden in- of uitgeschakeld om het gewenste nummer of alfabet weer te geven. Om bijvoorbeeld 0 cijfers weer te geven, moeten we pinnen ABCDEF instellen als HOOG en alleen G als LAAG. Omdat ABCDEF LED's AAN zijn en G UIT, vormt dit het 0-cijfer in de 7-segmentmodule. (Dit is voor een gemeenschappelijke kathode, voor een gemeenschappelijke anode is dit het tegenovergestelde).
De onderstaande tabel toont de HEX-waarden en het bijbehorende cijfer volgens LPC2148-pinnen voor een gemeenschappelijke kathodeconfiguratie.
Cijfer |
HEX-waarden voor LPC2148 |
EEN |
B. |
C |
D |
E. |
F. |
G |
0 |
0xF3 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0x12 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
2 |
0x163 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
3 |
0x133 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
4 |
0x192 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
5 |
0x1B1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
6 |
0x1F1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
7 |
0x13 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
8 |
0x1F3 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
9 |
0x1B3 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
BELANGRIJK: In de bovenstaande tabel heb ik de HEX-waarden gegeven volgens de pinnen die ik heb gebruikt in LPC2148, bekijk het onderstaande schakelschema. U kunt alle pinnen gebruiken die u wilt, maar de hexadecimale waarden overeenkomstig wijzigen.
Ga via de link voor meer informatie over 7-segmentweergave. Controleer ook 7-segment display-interfaces met andere microcontrollers:
- 7-segment display interface met Raspberry Pi
- 7-segment display interface met PIC-microcontroller
- 7-segment display interface met Arduino
- 7-segment display interface met 8051 microcontroller
- 0-99 Teller met behulp van AVR Microcontroller
Vereiste materialen
Hardware
- ARM7-LPC2148
- Zeven-segment displaymodule (één cijfer)
- Breadboard
- Verbindingsdraden
Software
- Keil uVision5
- Flash Magie
Schakelschema
Voor het koppelen van 7-segmenten met LPC2148 is geen externe component nodig, zoals weergegeven in het onderstaande schakelschema:
De onderstaande tabel toont de circuitverbindingen tussen de 7-segmentmodule en LPC2148
Modulepennen met zeven segmenten |
LPC2148 Pinnen |
EEN |
P0.0 |
B. |
P0.1 |
C |
P0.4 |
D |
P0.5 |
E. |
P0.6 |
F. |
P0.7 |
G |
P0.8 |
Gemeenschappelijk |
GND |
ARM7 LPC2148 programmeren
We hebben in onze vorige tutorial geleerd hoe we ARM7-LPC2148 kunnen programmeren met Keil. We gebruiken hier dezelfde Keil uVision 5 om de code te schrijven en een hex-bestand te maken, en vervolgens het hex-bestand te uploaden naar LPC2148 met behulp van flash magic tool. We gebruiken een USB-kabel om de code van stroom te voorzien en te uploaden naar LPC2148
De volledige code met video-uitleg wordt aan het einde van deze tutorial gegeven. Hier leggen we enkele belangrijke delen van de code uit.
Eerst moeten we het headerbestand voor de microcontroller uit de LPC214x-serie opnemen
# omvatten
Stel vervolgens de pinnen in als uitvoer
IO0DIR = IO0DIR-0xffffffff
Dit stelt de pinnen P0.0 tot P0.31 in als uitvoer, maar we zullen alleen pinnen (P0.0, P0.1, P0.4, P0.5, P0.6, P0.7 en P0.8) gebruiken.
Stel vervolgens de bepaalde pinnen in op LOGICA HOOG of LAAG in overeenstemming met het numerieke cijfer dat moet worden weergegeven. Hier zullen we waarden weergeven van (0 tot 9). We zullen een array gebruiken die HEX-waarden bevat voor waarden 0 tot 9.
unsigned int a = {0xf3,0x12,0x163,0x133,0x192,0x1b1,0x1f1,0x13,0x1f3,0x1b3};
Waarden worden continu weergegeven terwijl de code in de while- lus is ingevoerd
while (1) { for (i = 0; i <= 9; i ++) { IO0SET = IO0SET-a; // stelt overeenkomstige pinnen HOGE vertraging in (9000); // Roept vertragingsfunctie op IO0CLR = IO0CLR-a; // Stelt corresponderende pinnen LOW in } }
Hier worden IOSET en IOCLR gebruikt om respectievelijk de pinnen HOOG en LAAG in te stellen. Omdat we PORT0- pinnen hebben gebruikt, hebben we IO0SET & IO0CLR .
De For- lus wordt gebruikt om de i in elke iteratie te verhogen en elke keer dat i wordt verhoogd, verhoogt 7 segment ook het cijfer dat erop wordt weergegeven.
vertragingsfunctie wordt gebruikt om een vertragingstijd tussen SET en CLR te genereren
void delay (int k) // Functie voor het maken van vertraging { int i, j; voor (i = 0; i
Volledige code en werkende videobeschrijving worden hieronder gegeven. Bekijk hier ook alle 7-Segment Display gerelateerde projecten.