Gå til innhold

C programmering Syvsegment


Anbefalte innlegg

http://www.it.hiof.no/datateknikk/notater/timeoppgave2-forslag.html

 

 

kan noen forklare meg hva dette har med bildet i oppg å gjøre?

 

case 0xFE: PORTB = 0xF9 ; /* bryter 1 */
break;
case 0xFD: PORTB = 0xA4; /* bryter 2 */
break;
case 0xFB: PORTB = 0xB0; /* bryter 3 */
break;
case 0xF7: PORTB = 0x99; /* bryter 4 */
break;
case 0xEF: PORTB = 0x92; /* bryter 5 */
break;
case 0xDF: PORTB = 0x83; /* bryter 6 */
break;
case 0xBF: PORTB = 0xF8; /* bryter 7 */
break;
case 0x7F: PORTB = 0X80; /* bryter 8 */
break;

default: PORTB= 0XCD;

 

klarer ikke forstå de heksadesimalene osv, skjønner ikke helt hvordan det illustrerer bilde i syvsegmentet.

Lenke til kommentar
Videoannonse
Annonse

Tips: Konverter heksadesimaltallene til binærtall og se om du forstår mer da.

 

case 0xFD: PORTB = 0xA4; /* bryter 2 */

break;

 

 

FD = 1111 1101 og A4 = 1010 0100 er dette i binære ..

 

men jeg klarer fortsatt ikke å forholde disse binære tallene med syvsegmentet, hadde vært bra om du kunne forklart meg! har grublet lenge på dette.

Lenke til kommentar

Tenk på 1 og 0 som av og på, så gir det mening.

 

case 0xFE: PORTB = 0xF9 ; /* bryter 1 */

vi endrer dette til

case 11111110: PORTB = 11111001

 

Legg merke til her at alle utenom den siste biten er 1. Dette er fordi noen har trykket på knappen som er er bundet til denne biten, dermed brutt kretsen (den er nå av) og dermed representert 0.

 

PORTB er outputen knyttet til selve 7-segmentet. Her er alle utenom B og C satt til 1. Ved å la kun B og C på 7-segmentet lyse vil man få et et-tall.

 

------------------------------

 

prøv å sett opp alle de andre tallene på samme måte i binær og sjekk hvilke lamper de forskjellige bitene på PORTB vil få til å lyse så kanskje det blir litt klarere. Og tenk deg at hver av bokstene represeres med enten en 1 eller 0 (og er derfor 1 bit).

 

----------

 

Tar en til for å være snill:

case 0xFD: <--- 11111101

Bryteren koblet til der det er en null trykket på, og siden det er bit nr.2 fra høyre som er null vet vi det er bryter 2 på tegningen, som er knyttet til denne biten. (husk at en enkel knapp er 1 bit med informasjon)

 

PORTB = 0xA4; <----- 10100100

Siden 0 her betyr at lampen lyser ser vi av tegningen at dette betyr at lampene: A, B, D, E og G må lyse. Dette vil da forme et 2-tall.

 

 

-----------

 

Oppgaven er forvirrende om du ser på heksadesimale-tall. Da det du egentlig holder på med ikke er tall, det er kun brytere som skal av og på. Hvor 1 betyr av og 0 betyr på. Så tenk binært og sett opp alle brukt i oppgaven Hex-verdiene som binær-tall på et kladdeark eller noe så blir det lettere å forstå.

Endret av etse
Lenke til kommentar

Tenk på 1 og 0 som av og på, så gir det mening.

 

case 0xFE: PORTB = 0xF9 ; /* bryter 1 */

vi endrer dette til

case 11111110: PORTB = 11111001

 

Legg merke til her at alle utenom den siste biten er 1. Dette er fordi noen har trykket på knappen som er er bundet til denne biten, dermed brutt kretsen (den er nå av) og dermed representert 0.

 

PORTB er outputen knyttet til selve 7-segmentet. Her er alle utenom B og C satt til 1. Ved å la kun B og C på 7-segmentet lyse vil man få et et-tall.

 

------------------------------

 

prøv å sett opp alle de andre tallene på samme måte i binær og sjekk hvilke lamper de forskjellige bitene på PORTB vil få til å lyse så kanskje det blir litt klarere. Og tenk deg at hver av bokstene represeres med enten en 1 eller 0 (og er derfor 1 bit).

 

----------

 

Tar en til for å være snill:

case 0xFD: <--- 11111101

Bryteren koblet til der det er en null trykket på, og siden det er bit nr.2 fra høyre som er null vet vi det er bryter 2 på tegningen, som er knyttet til denne biten. (husk at en enkel knapp er 1 bit med informasjon)

 

PORTB = 0xA4; <----- 10100100

Siden 0 her betyr at lampen lyser ser vi av tegningen at dette betyr at lampene: A, B, D, E og G må lyse. Dette vil da forme et 2-tall.

 

 

-----------

 

Oppgaven er forvirrende om du ser på heksadesimale-tall. Da det du egentlig holder på med ikke er tall, det er kun brytere som skal av og på. Hvor 1 betyr av og 0 betyr på. Så tenk binært og sett opp alle brukt i oppgaven Hex-verdiene som binær-tall på et kladdeark eller noe så blir det lettere å forstå.

 

 

Port B: 11111001

 

Tusen takk! så port B så er det egentlig tallene i rekkefølgen GFEDCBA?

 

Tenk på 1 og 0 som av og på, så gir det mening.

 

case 0xFE: PORTB = 0xF9 ; /* bryter 1 */

vi endrer dette til

case 11111110: PORTB = 11111001

 

Legg merke til her at alle utenom den siste biten er 1. Dette er fordi noen har trykket på knappen som er er bundet til denne biten, dermed brutt kretsen (den er nå av) og dermed representert 0.

 

PORTB er outputen knyttet til selve 7-segmentet. Her er alle utenom B og C satt til 1. Ved å la kun B og C på 7-segmentet lyse vil man få et et-tall.

 

------------------------------

 

prøv å sett opp alle de andre tallene på samme måte i binær og sjekk hvilke lamper de forskjellige bitene på PORTB vil få til å lyse så kanskje det blir litt klarere. Og tenk deg at hver av bokstene represeres med enten en 1 eller 0 (og er derfor 1 bit).

 

----------

 

Tar en til for å være snill:

case 0xFD: <--- 11111101

Bryteren koblet til der det er en null trykket på, og siden det er bit nr.2 fra høyre som er null vet vi det er bryter 2 på tegningen, som er knyttet til denne biten. (husk at en enkel knapp er 1 bit med informasjon)

 

PORTB = 0xA4; <----- 10100100

Siden 0 her betyr at lampen lyser ser vi av tegningen at dette betyr at lampene: A, B, D, E og G må lyse. Dette vil da forme et 2-tall.

 

 

-----------

 

Oppgaven er forvirrende om du ser på heksadesimale-tall. Da det du egentlig holder på med ikke er tall, det er kun brytere som skal av og på. Hvor 1 betyr av og 0 betyr på. Så tenk binært og sett opp alle brukt i oppgaven Hex-verdiene som binær-tall på et kladdeark eller noe så blir det lettere å forstå.

 

 

Port B: 11111001

 

Tusen takk! så port B så er det egentlig tallene i rekkefølgen GFEDCBA?

 

hvis vi skulle sammenlignet til hvilken plass hver bit hører til?

 

Lenke til kommentar

Port B: 11111001

 

Tusen takk! så port B så er det egentlig tallene i rekkefølgen GFEDCBA?

 

hvis vi skulle sammenlignet til hvilken plass hver bit hører til?

Se på tegningen. Det er det den er til for å vise. Du ser her at bitsene ligger koblet til i rekkefølgen "A B C D E F G", men bilde sier ikke om den første biten er den lengstil høyre eller om det er den lengst til venstre. Men vi gjør som oppgaven og definerer. I løsningsforslaget har de sagt at Bit 0 er A.

 

Så la oss si vi skal løse denne for tallet tre. Siden vi ønske å sjekke når knapp 3 er trykket inn har vi følgende på input:

PORTA = 0b1111011 = 0xFB

 

Vi ønsker å vise tallet tre og ser at for å få det til må diodene ABCDG lyse for å få dette til.(se på tegningene, lampene merket med de bokstavene vil forme et 3-tall).

 

Vi setter derfor outputen til disse bittene fil 0 mens de andre er 1

G F E D C B A

0 1 1 0 0 0 0

 

Dette gir oss:

PORTB = 0b0110000 = 0x30

 

I kode kan dette bli noe som:

if(PORTA == 0xFB)
    PORTB = 0x30;
forstod du tankegangen?

 

 

Og for å svare på spørsmålet ditt: så port B så er det egentlig tallene i rekkefølgen GFEDCBA? I løsningsforslaget er det sånn. Men du kunne fint definert det i morsatt rekkefølge med mindre oppgaveteksten sa at Bit0 skulle være A. I den virkelige verden ville dette vært bestemt av enten hvordan du koblet opp utstyret eller av spesifikasjonene til displayet.

 

(Og Bit0 betyr nummer 0 fra høyre, ikke fra venstre som man fort kan finne på å tenke)

Endret av etse
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...