Prikazivanje binarnih brojeva

Kao što postoji prikaz brojeva u bazi 10 što znači da se brojevi zapisuju na ovaj način:

123=1*10^2+2*10^1+3*10^0=1*100+2*10+3*1

postoji i prikazivanje brojeva u drugim bazama. U digitalnoj logici se brojevi prikazuju u bazi 2 odnosno u binarnom obliku jer postoje dva različita stanja “0” i “1”.

Binarni broj

0(2)=0*2^0=0(10)
1(2)=1*2^0=1(10)
10(2)=1*2^1+0*2^0=2+0=2(10)
.
.
.
101010=1*2^5+0*2^4+1*2^3+0*2^2+1*2^1+0*2^0=32+0+8+0+2+0=42
.
.
.

Iz primjera se može zaključiti da se bilokoji cijeli broj u dekadskom sustavu može zapisati i u
binarnom sustavu.

Ideja je da pomoću svjetlećih dioda prikazujemo brojeve u binarnom obliku. Upaljena svjetleća dioda će predstavljati jedinicu, a ugašena dioda će predstavljati nulu.

Na četiri digitalna pina 12,11,10 i 9 ćemo staviti četiri svjetleće diode. Dulju nožicu od svake diode
ćemo staviti u zaseban digitalni pin, dok ćemo kraću nožicu spojiti na uzemljenje. To je zasad sve od električnog kruga, preostalo je napisati program.

U programu ćemo si sami na početku zadati neki prirodni broj u dekadskom sustavu, pretvorit ćemo ga u binarni sustav i poslati rezultat na svjetleće diode.

Pretvaranje iz dekadskog u binarni sustav:

Binarni broj dobivamo iz dekadskog tako da ga dijelimo s 2. Ostatak nakon svakog dijeljenja zapisujemo sa stanje i ponovno dijelimo rezultat iz prethodnog dijeljenja. Opisani postupak prikazan je primjerom za broj 37.

37/2=18 i ostatak 1     36|1
18/2=9  i ostatak 0      18|0
9/2=4   i ostatak 1         9|1
4/2=2   i ostatak 0         4|0
2/2=1   i ostatak 0         2|0
1/2=0   i ostatak 1         1|1
0

Broj 37 zapisan u binarnom obliku dobivamo ako stupac s nulama i jedinicama pročitamo odozdo prema gore: 100101.

Možemo se uvjeriti u ispravnost rješenja ako pretvorimo binarni broj u dekadski:
1*2^5+0*2^4+0*2^3+1*2^2+0*2^1+1*2^0=32+4+1=37

Kako bi u programu ostvarili uzastopno dijeljenje morat ćemo korisititi nešto što se zove petlja. Petlja je blok programa koji se uzvršava više puta sve dok se ne ispuni određeni uvijet.
Dvije najpoznatije petlje su for i while. Kako ćemo u programu korisiti samo while petlju, zasad ćemo samo nju opisati.

While petlja ponavlja dio koda koji se nalazi u njenom bloku sve dok se uvijek dan na početku ne ispuni. Na primjer ako napišemo
—————————————-
a=1
while (a<10){
Serial.println(a);
a=a+1
}
—————————————–

While petlja će na početku provjeravati da li je u varijabli a broj manji od 10 i ponovo će se vrtiti dvije linije koda koje se nalaze u vitičastim zagradama sve dok je u varijabli a broj manji od 10.
U trenutku kada u varijabli a bude broj 10 while petlja će u ispitivanju uvjeta to primjetiti i neće više izvršavati kod u vitičastim zagradama nego će nastaviti kod koji se nalazi dalje u programu.

Imamo četiri svjetleće diode pa će najveći broj koji možemo prikazati biti 1111(2) odnosno 15(10). Pretpostavit ćemo da je broj manji ili jedank 15 unesen i nećemo to dodatno provjeravati u programskom kodu.

Program:
———————————–

int pin;
int broj;

void setup(){
pinMode(9, ‘OUTPUT’);
digitalWrite(9,0);
pinMode(10, ‘OUTPUT’);
digitalWrite(10,0);
pinMode(11, ‘OUTPUT’);
digitalWrite(11,0);
pinMode(12, ‘OUTPUT’);
digitalWrite(12,0);

}

void loop(){
pin=9;
broj=7;

while (broj!=0){             //ispitivanje uvjeta da li se uzastopnim djeljenjem došlo do nule
digitalWrite(pin,broj%2);  //cjelobrojni ostatak dijeljenja da 2 (broj%2) se postavlja
//  na izlaz  zapisna u varijabli “pin”
broj=broj/2;               //broj se dijeli sa 2
pin=pin+1;                 //mijenja se pin na koji će se postavljati vrijednost cjelobrojnog djeljenja u
//sljedećem koraku
}
delay(1000);
}
———————————–

Na početku programa su se deklarirale varijabla i u setup() bloku koda su se pinovi na koje su spojene svjetleće diode proglasile izlaznim pinovima. Želimo da su sve diode u početku ugašene pa ih
postavljamo na nulu.
U loop bloku koda se izvršava glavni dio programa. Na početku se postavlja vrijednost najnižeg pina na kojem se nalazi svjetleća dioda. Zatim se zadaje broj koji će se prikazivati na svjetlećim diodama.
Nakon toga dolazimo do while petlje koja dijeli varijablu “broj” sve dok ona ne bude nula (ispituje se uvijet broj!=0 odnosno da li je vrijednost u varijabli “broj” različita od 0).
Cjelobrojni ostatak dijeljenja dobivamo operacijom “modulo 2”, no nakon te operacije se vrijednost u varijabli “broj” ne mjenja, već moramo poslije toga podijeliti “broj” sa 2.
Na kraju while petlje uvećavamo vrijednost varijable “pin” kako vi se u sljedećem koraku cjelobrojni ostatak upisao na sljedeću svjetleću diodu.
Nakon što se izvrši while petlja program čeka jednu sekudnu i ponovno izvršava program, no kako se će dioda koja je upaljena u prvom krugu ostati upaljena i u sljedećem krugu petlje “loop”, a dioda
koja je bila ugašena će i ostati ugašena, nećemo primjetiti nikakvu razliku u svjetljenju dioda nakon što se petlja “loop” prvi puta izvrši.

Leave a comment