Segédletek.hu
Segédletek weblap szerkesztéshez!
Fórum:
Postaláda:
Szavazás:
Hány éves vagy?
Segédletek:
Linkek:
7 szegmenses kijelző:
Sorozat - Kijelzők:
Aki látta annak idején a Sliders című amerikai sorozatot (és szerette is), annak különleges csemegével szolgálhatok.
A hét szegmenses kijelző lényege, hogy a decimális számokat hét különböző vonallal kirajzolni, hogy azok még hasonlítsanak is arab társaikra (aminek, mint megtudtam, semmi köze Arábiához:))
A script kirajzol egy számsort ilyen formában...
Akkor lássuk a medvét!
Először is tisztában kell lenni a kijelző felépítésével.

Mint láthatjuk, ez egy 8-ast alkot. Nézzük az összes számot.

Ha a felső vonaltól óramutató járása szerint megyünk, felcímkézhetjük a vonalakat.

És ezzel már el is jutottunk oda, hogy meghatározhatjuk, mely szegmens melyik számban szerepel
No, látható, hogy a számok kicsit megdöntve vannak (ha jól számoltam, akkor 72 fokosak, és nem pálinka... de kár). Ez egy kis nehezítés, de most nem fogom levezetni a számításokat, amivel kiszámoltam a vonalak kezdeti- és végpontját.
No, most már tisztában vagyunk a méretekkel, felépítésekkel, kezdődhet a programozás.
Természetesen meghívni egy másik oldalból az <img src="... formában tudjátok.
Remélem sikerült érthetően kommentezni... mindenesetre pár hozzáfűznivaló:
Az $s változó tartalmát bárhonnan be lehet hívni, csak arra figyelni kell, hogy string típusú legyen.
Amint azt említettem, 72 fokos a dőlésszöge a szegmenseknek, de ha érzitek magatokban az erőt, a D függvényben átírhatjátok a számokat Mint látjátok, 40 széles, és 80 magas egy szegmens (90 fok esetén), de mivel eldől, egymás fölé dőlnek, így azt is bele kell számolni, hogy nehogy lefedjék egymást. Az $i=$pos*40+5; részben a +5 pont ezt hivatott kivédeni. Ha egymásba nyúlnak, ennek növelésével tudjátok orvosolni a problémát.
A másik, hogy van még pár karakter, amit könnyűszerrel bele lehet rakni. Sajna a hexadecimal karakterek kiesnek, mert a D-hez szükséges szegmensek ugyanazok, mint a 0-é. (Vagy a B és a 8)
De még itt sem állunk meg&... ki mondta, hogy 7 szegmens kell?
Egy kis módosítással akár szöveget is jeleníthetünk meg konstans szegmensekkel (ferde vonalakkal bővülnek a lehetőségeink)... de egy már egy másik történet.
Először is tisztában kell lenni a kijelző felépítésével.
Mint láthatjuk, ez egy 8-ast alkot. Nézzük az összes számot.

Ha a felső vonaltól óramutató járása szerint megyünk, felcímkézhetjük a vonalakat.
És ezzel már el is jutottunk oda, hogy meghatározhatjuk, mely szegmens melyik számban szerepel
Érték Világító szegmensek
0 123456
1 23
2 12 45 7
3 1234 7
4 23 67
5 1 34 67
6 1 34567
7 123
8 1234567
9 1234 67
No, látható, hogy a számok kicsit megdöntve vannak (ha jól számoltam, akkor 72 fokosak, és nem pálinka... de kár). Ez egy kis nehezítés, de most nem fogom levezetni a számításokat, amivel kiszámoltam a vonalak kezdeti- és végpontját.
Sz Xb Yb Xe Ye
1 15 10 40 10
2 43 12 38 37
3 37 42 32 67
4 4 70 29 70
5 6 42 1 67
6 12 12 7 37
7 10 40 35 40
No, most már tisztában vagyunk a méretekkel, felépítésekkel, kezdődhet a programozás.
<?php
////////////////////////////////////////////////////////
// Számlálót megjelenítő script //
// Készítette: Needback //
// //
// Ez a script lehetőséget nyújt arra, hogy számokat //
// jelenítsünk meg egy 7 szegmenses kijelzősoron. //
// A script jellegzetessége, hogy egyedileg testre //
// szabható. Mind méretileg, mind színileg, mind //
// hosszilag. //
// //
////////////////////////////////////////////////////////
// Szerkesztés innentől... //
// ////////////////////////////////
$bgca= array(0,0,0); //háttér színe //
$pirosa= array(255,0,0); //világító szegmens színe //
$darkreda=array(64,0,0); //nem világító szegmens színe //
$odd=0.5; //méretarány //
$numcount=6; //szegmensek száma (minimum) //
$s='0'; //megjelenített számsorozat //
// ////////////////////////////////
//... idáig //
////////////////////////////////////////////////////////
//Innentől jön a kód //
// //
//Szerkeszteni mindenkinek csak saját felelősségére!!!//
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
$numcount=max($numcount,strlen($s)); //először is be kell állítani a kijelző hosszát
for ($i=strlen($s);$i<$numcount;$i++) { $s='0'.$s; } //a szegmensek száma csak a minimumot állítja be
header('Content-type: image/jpeg'); //mivel rajzolni szeretnénk, egy képet kell használnunk
$img=imageCreate($odd*(40*$numcount+10)+2,$odd*80); //a mérete arányos a megadott méretaránnyal ($odd)
$bgc= imageColorAllocate($img, $bgca[0], $bgca[1], $bgca[2]); //színek definiálása
$piros= imageColorAllocate($img, $pirosa[0], $pirosa[1], $pirosa[2]);
$darkred=imageColorAllocate($img,$darkreda[0],$darkreda[1],$darkreda[2]);
imagesetthickness($img,$odd*6); //és a vonalvastagság
for ($i=0;$i<$numcount;$i++) { //és akkor rajzoljunk
DrawDigit($s{$i},$i); //elemenként...
}
imagejpeg($img); //majd kép küldése a böngészőnek
function DrawDigit($digit,$pos) { //itt határozzuk meg, hogy az adott érték milyen vonalakat rajzoltat ki
$i=$pos*40+5; //a pozíció pedig, hogy helyileg hol helyezkedik el
switch ($digit) { //itt található az első táblázat kódokra bontva. először mindig a sötét vonalakat rajzoltajuk ki
case '0': D(7,$i,1); D(1,$i,0); D(2,$i,0); D(3,$i,0); D(4,$i,0); D(5,$i,0); D(6,$i,0); break;
case '1': D(1,$i,1); D(4,$i,1); D(5,$i,1); D(6,$i,1); D(7,$i,1); D(2,$i,0); D(3,$i,0); break;
case '2': D(3,$i,1); D(6,$i,1); D(1,$i,0); D(2,$i,0); D(4,$i,0); D(5,$i,0); D(7,$i,0); break;
case '3': D(5,$i,1); D(6,$i,1); D(1,$i,0); D(2,$i,0); D(3,$i,0); D(4,$i,0); D(7,$i,0); break;
case '4': D(1,$i,1); D(4,$i,1); D(5,$i,1); D(2,$i,0); D(3,$i,0); D(6,$i,0); D(7,$i,0); break;
case '5': D(2,$i,1); D(5,$i,1); D(1,$i,0); D(3,$i,0); D(4,$i,0); D(6,$i,0); D(7,$i,0); break;
case '6': D(2,$i,1); D(1,$i,0); D(3,$i,0); D(4,$i,0); D(5,$i,0); D(6,$i,0); D(7,$i,0); break;
case '7': D(4,$i,1); D(5,$i,1); D(6,$i,1); D(7,$i,1); D(1,$i,0); D(2,$i,0); D(3,$i,0); break;
case '8': D(1,$i,0); D(2,$i,0); D(3,$i,0); D(4,$i,0); D(5,$i,0); D(6,$i,0); D(7,$i,0); break;
case '9': D(5,$i,1); D(1,$i,0); D(2,$i,0); D(3,$i,0); D(4,$i,0); D(6,$i,0); D(7,$i,0); break;
default: D(1,$i,1); D(2,$i,1); D(3,$i,1); D(4,$i,1); D(5,$i,1); D(6,$i,1); D(7,$i,0); break; //ha az $s-ben nem csak decimális számok lennének
}
}
function D($line,$left,$t) { //itt már azt nézzük, hogy a vonal hol helyezkedik el
switch ($line) { //és a második táblázat kódolva...
case 1: DrL($left+15,10,$left+40,10,$t); break;
case 2: DrL($left+43,12,$left+38,37,$t); break;
case 3: DrL($left+37,42,$left+32,67,$t); break;
case 4: DrL($left+04,70,$left+29,70,$t); break;
case 5: DrL($left+06,42,$left+01,67,$t); break;
case 6: DrL($left+12,12,$left+07,37,$t); break;
case 7: DrL($left+10,40,$left+35,40,$t); break;
}
}
function DrL($fx,$fy,$tx,$ty,$t) { //na, a tényleges rajzolás, már tudjuk hova, mit
global $img, $piros, $darkred, $odd; //gyorsan behívjuk a színeket, a képet és az arányt globálisba
$cl=($t==0)?$piros:$darkred; //majd megnézzük milyen színt kell használni
ImageLine($img,Floor($odd*$fx),Floor($odd*$fy),Floor($odd*$tx),Floor($odd*$ty),$cl); //és rajzolunk (huhh... megvan :))
}
?>
Remélem sikerült érthetően kommentezni... mindenesetre pár hozzáfűznivaló:
Az $s változó tartalmát bárhonnan be lehet hívni, csak arra figyelni kell, hogy string típusú legyen.
Amint azt említettem, 72 fokos a dőlésszöge a szegmenseknek, de ha érzitek magatokban az erőt, a D függvényben átírhatjátok a számokat Mint látjátok, 40 széles, és 80 magas egy szegmens (90 fok esetén), de mivel eldől, egymás fölé dőlnek, így azt is bele kell számolni, hogy nehogy lefedjék egymást. Az $i=$pos*40+5; részben a +5 pont ezt hivatott kivédeni. Ha egymásba nyúlnak, ennek növelésével tudjátok orvosolni a problémát.
A másik, hogy van még pár karakter, amit könnyűszerrel bele lehet rakni. Sajna a hexadecimal karakterek kiesnek, mert a D-hez szükséges szegmensek ugyanazok, mint a 0-é. (Vagy a B és a 8)
De még itt sem állunk meg&... ki mondta, hogy 7 szegmens kell?
Egy kis módosítással akár szöveget is jeleníthetünk meg konstans szegmensekkel (ferde vonalakkal bővülnek a lehetőségeink)... de egy már egy másik történet.
Írta: Needback - 2007-12-07 15:41:44
* Nem vagy bejelentkezve!* Nem töltheted le a segédlet forrását egyben!
* Nem szavazhatsz a segédletre!
* Nem írhatsz a segédlethez tartozó fórum témába!
| requiem | 2007-12-07 00:00:00 |
| Király a cikk, bár annyira nincs túlrészletezve a használata. Akkor egy kis segítség hozzá, ha esetleg valakinek nem lenne világos, itt egy példa: Legyen a script neve: szamlalo.php a $s='0' sort cseréld ki erre: $s=$_GET['s'] Ezután egy html fájlban: <img src="szamlalo.php?s=12345" /> ... Tetszik ez a cumó, királyos :D |
|

