Zobrazení čísla na sedmisegmentovách LED jako výstup z mikrokontroléru je poměrně časté a podobně častý je i problém, který to přináší, potřebu příliš velkého počtu vývodů mikrokontroléru. Podívejme se, co se s tím dá dělat – tentokrát za pomoci posuvných registrů. Příklady budou uváděny pro platformu PICAXE.
Stále zůstává naší snahou obsloužit co nejvíce míst displeje se znakovkami co nejjednodušším a nejrychlejším způsobem. Pomocí čítačů sice vystačíme dokonce s jediným vodičem a velmi jednoduchým programem, ale zněma obsahu vícemístného displeje může být neúnosně časově náročná.
Obětujeme trochu z jednoduchosti programu, kódování na segmenty (podobu znaků) opět vrátíme mikrokontroléru, použijeme dva piny. Každé číslicovce přiřadíme posuvný registr a protože ty vhodné mají 8 bitů, obsloužíme rovnou desetinnou tečku spolu se segmenty. Výstupy posuvného registru budou přímo ovládat segmenty. K obsloužení jednoho místa stačí vyslat do posuvného registru osm pulzů bez ohledu na počet míst displeje, takže se změna vícemístného displeje zkrátí o několik řádů. V okamžiku změny „projedou“ rosvícené segmenty celým displejem, což vidíme jako bliknutí, ale protože počet pulzů je relativně malý, bliknutí příliš nevadí a hlavně přenos nezdržuje. Reset (vynulování) displeje není třeba používat, nový údaj jednoduše „vytlačí ven“ ten starý.
V příkladu zapojení aplikujeme osmibitové registry 4094, které mají další velmi zajímavou vlastnost. V součinnosti se sedmisegmentovkou se společnou anodou a s nízkou spotřebou není nutné omezovat proud do LED přídavnými rezistory, výstup obvodu omezí proud sám. Tím odpadá nutnost osazovat 8 rezistorů ke každé sedmisegmentovce. Výhodou tohoto uspořádání je na rozdíl od předchozích zapojení využívajících dekodéry číslic v obvodech možnost zobrazit libovolnou kombinaci segmentů, tedy i písmena nebo mezeru, a samozřejmě malý počet obsazených výstupů mikrokontroléru, nevýhodou je o něco složitější obslužný program. Displej je statický z pohledu obsluhy i zobrazení. Příklad zobrazuje cyklicky čísla 00 až $FF.
REM LED dispej přes posuvný registr 4094 - PICAXE 20M2 ;desetinná tečka je zapojena jako osmý segment setfreq m32 do ;pošli postupně čísla 0 - $FF for b1=0 to $ff gosub zobraz pause 8000 next b1 loop zobraz: ;zobrazí na LED cislo uložené v b1 (2 místa) b0=b1/16 ;oddělit vyšší řád gosub prevod ;v b0 předá hex číslo na prevod b0=b1 and %00001111 ;oddělit nižší řád gosub prevod ;v b0 předá hex číslo na prevod return prevod: ;převod hodnoty 0-$F na sedmisegment do registru select case b0 case 0 b2=%11000000 ;znak 0 case 1 b2=%11111001 ;znak 1 case 2 b2=%10100100 ;znak 2 case 3 b2=%10110000 ;znak 3 case 4 b2=%10011001 ;znak 4 case 5 b2=%10010010 ;znak 5 case 6 b2=%10000010 ;znak 6 case 7 b2=%11111000 ;znak 7 case 8 b2=%10000000 ;znak 8 case 9 b2=%10010000 ;znak 9 case 10 b2=%10001000 ;znak A case 11 b2=%10000011 ;znak b case 12 b2=%11000110 ;znak C case 13 b2=%10100001 ;znak d case 14 b2=%10000110 ;znak E case 15 b2=%10001110 ;znak F endselect b3=%10000000 ;v b3 maska pro výběr bitu for b4=0 to 7 ;cyklus pro všechny bity b5=b2 and b3 ;vymaskovat bit if b5=0 then low b.0 else high b.0 endif ;data pulsout b.1,4 ;pulz hodin pro zápis dat b3=b3/2 ;maska pro další bit next b4 return
Protože tento způsob ovládání sedmisegmentovek je často vhodný a zvládne opravdu hodně míst displeje, uvedeme si ještě drobné vylepšení úpravou zapojení, které s minimem součástek a bez nároků na změnu programu potlačí bliknutí displeje při změně hodnoty. Místo toho displej na krátký okamžik zhasne, což je méně rušivé. Na snímku z osciloskopu je na černé stopě signál CLK z výstupu mikrokontroléru, červená stopa je vygenerovaný signál OE (zhášení displeje). Je-li k dispozici dostatek výstupních pinů, lze téhož dosáhnout tím, že spojené vstupy OE všech segmentovek po dobu zápisu na displej uvedeme do stavu L.
Obsluha displeje posuvnými registry je asi nejuniverzálnější a zvládá největší počet míst displeje nebo více displejů, ale samozřejmě za to něco vyžaduje, každá znakovka musí mít svůj obslužný obvod – posuvný registr.