Snabbt skapa en 7 segment display
Detta är bara en liten instructable att hjälpa människor att snabbt använda en 7 segment display med säga en Arduino eller andra mikrokontroller. Dessa skärmar kräver 8 datalines och det är lite mycket att offra på de flesta microcontrollers, så finns det ett bättre sätt: med hjälp av en HC595 eller HCT595 skiftregister. I så fall behöver displayen bara 3 data linjer.
Nu kan det vara lite skrämmande för nybörjare att räkna ut vilket stift att ansluta med vad och sedan hur att få rätt siffrorna att lysa upp, men om du håller dig till några grundregler, det är ganska lätt. (Anm. de flesta ställen jag kollade HCT595 är betydligt dyrare än HC595, om inte u verkligen behöver/vill ha/har den HCT versionen, plocka den HC versionen.)
För en sak... spelar det ingen roll vilka stift 7 segment display du ansluter till datapins av 595, eftersom du kan sortera ut allt i programkoden, men det är enklast att hålla sig till vissa standard anslutningar.
Om man tittar på diagrammet av displayen, ser du att segmenten har en mer eller mindre standardiserade namn: A-G och DP. Om du ansluter 595 enligt följande:
Q0 -> A
Q1 -> B
Q2 -> C
Q3 -> D
Q4 -> E
Q5 -> F
Q6 -> G
Q7 -> DP
sedan blir kodning standardiserade också.
Bestämma vilken pin motsvarar vad segment sker snabbt med en multimeter, precis som att fastställa om du har en gemensam katod eller gemensam anod display. En titt på baksidan brukar talar redan om vad den gemensamma anslutningen är. Ofta är detta mitten stiftet på toppen och botten.
Som segmentet 7 kan inte display - som LED - riktigt ta full 5 volt för de flesta mikrokontrollanter, ett motstånd i varje rad är nödvändigt. Jag använder 470 Ohm. Det är möjligt att använda endast ett motstånd i den gemensamma hållningen, men då ljusintensiteten kommer att variera beroende på antalet segment att vara aktiv.
Allt detta är lätt att löda på vissa perf-board som bilden visar, naturligtvis om din pin lay-out skiljer sig från min, du måste ändra anslutningarna... eller skicka ett annat värde till HC595. Den krets som jag gav är för en gemensam katod display, men naturligtvis för en gemensam anod display principen är densamma, om än att man ansluter den gemensam anod till + Vcc.
Koden är ganska självförklarande. Uppenbarligen en kan bara skicka en '0' eller '9' karaktär till displayen för att få siffrorna. Varje nummer kräver en viss mängd segment att lysa upp och som motsvarar med vissa portar för 595 vara hög eller låg. Så till exempel för '8' du behöver alla segment till linje upp, utom decimaltecknet och enligt våra standardiserade sätt att koppla, som kräver nummer 127 för att skicka till 595 (127 = 01111111 = alla segment utom dp). Om du vill "8" och DP, sända 255.
Så är det enklaste att bara ställa upp en matris med värdena som krävs för varje nummer och använda numret som ett index till matrisen. Så om du vill ha en '0' du använda medlem '0' från matrisen (63), för 1 du använder medlem 1 från matrisen (värde 6) etc.
Om du vill ha den digitala punkt att lysa upp också, bara lägga till "128" till det värde som skickas.
Den kodar sedan är följande
/*
Med det 74HC595 SKIFT registret med 7 segment display
*/
int latchpin = 5; / / Anslut till stift 12 på 595
int clockpin = 7. Anslut till stift 11 på 595
int datapin = 6; Anslut till stift 14 på 595
matrisen innehåller det binära värdet för att göra siffror 0-9
avkommentera raden korrekt för gemensam katod eller gemensam anod
int segmentet [10] = {63,6,91,79,102,109,125,7,127,111}. för gemensam katod
int segmentet [10] = {192,249,164,176,153,146,130,248,128,144}. för gemensam anod
Dessa värden är alltid rätta om du följer regeln om Q0 -> A, Q1 -> B etc.
void setup()
{
pinMode (latchpin, produktionen);
pinMode (clockpin, produktionen);
pinMode (datapin, produktionen);
}
void loop()
{
digitalWrite (latchpin, låg);
shiftOut (datapin, clockpin, MSBFIRST, 0); Avmarkera Visa
digitalWrite (latchpin, hög);
Delay(1000);
för (int djurenheter = 0; djurenheter < 10; djurenheter ++)
räknas från 0 till 9, med hjälp av värdena i matrisen
dessa värden motsvarar de binära utgångarna 0 ~ 9
att få den digitala punkten: lägga till 128
{
digitalWrite (latchpin, låg);
shiftOut (datapin, clockpin, MSBFIRST, segment[lus]+128);
digitalWrite (latchpin, hög);
Delay(800);
}
digitalWrite (latchpin, låg);
shiftOut (datapin, clockpin, MSBFIRST, 0); Avmarkera Visa
digitalWrite (latchpin, hög);
Delay(800);
digitalWrite (latchpin, låg);
shiftOut (datapin, clockpin, MSBFIRST, 128); Light decimalkommat
digitalWrite (latchpin, hög);
Delay(800);
}