 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
LoLek Član

Pridružen-a: Sre 25 Feb 2004 12:46 Prispevkov: 343 Aktiv.: 1.45
|
Objavljeno: Čet Jan 19, 2006 5:38 pm Naslov sporočila: Sestavljanje prebranih cifer s tipkovnice |
|
|
Imam priključeno tipkovnico na PIC. S tipkovnice preberem cifro in jo zapišem na LCD, ko vtipkam drugo cifro LCD enostavno šifta in jo napiše za prejšnjo. Se pravi, če npr. vtipkam 1 2 3, dobim na LCD-ju noramlno izpisano 123 (sto triindvajset).
Problem pa se pojavi pri uporabi teh cifer za preračunavanje. Namreč te cifre bi moral sestaviti v 123 oz. v hex ekvivalent 7B. Tukaj pa nastopijo težave s katerimi se že cel dan ubadam.
Če kdo ve kako to sestaviti oz. pretvoriti v hex...
Programiram pa v ansi C-ju.
hvala 
Nazadnje urejal/a LoLek Čet Jan 19, 2006 7:09 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
Djurodrljaca Član

Pridružen-a: Pet 19 Dec 2003 16:31 Prispevkov: 393 Aktiv.: 1.66 Kraj: Mengeš
|
Objavljeno: Čet Jan 19, 2006 5:52 pm Naslov sporočila: |
|
|
Najprej bi to moral pretvoriti v binarno vrednost (stotice*100 + desetice*10 + enice), potem pa preko maske (& 00001111) in (& 11110000) dobiš spodnjo in zgornjo cifro v hex (od 0 do 15). Potem pa vrednosti večje od 9 pretvoriš v črke od A do F (npr. vrednost - 10 + 'A') ostale pa povečaš za '0'. |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Čet Jan 19, 2006 5:52 pm Naslov sporočila: |
|
|
Ne vem sicer kako v C-ju V assemblerju bi napisal enostavno proceduro.
Cifre se začnejo (če pišem desetiško) 0=48,1=49 .... torej procedura bi od prejetega karakterja odštela 48. Če je rezultat v mejah 0-9 bi vrnila vrednost 0-9 sicer pritisnjena tipka ni numerična. Enoštevilčnih vrednosti sedaj ni problem sešteti. Če bodo večštevilčne pa bo potrebno napisati še kako proceduro. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Čet Jan 19, 2006 7:22 pm Naslov sporočila: |
|
|
Koda: |
int16 PreberiStevilo()
{
char buffer[5]=0;
int index=0, n;
int osnova;
int16 stevilo=0;
while (keyCode=PreberiTipko()!=13)
{
buffer[index++]=keyCode-'0';
}
if (!index) return 0;
osnova=1;
stevilo=0;
for (n=index; n; n--)
{
stevilo += buffer[n-1]*osnova;
osnova *= 10;
}
return stevilo;
} |
edit: sem moral malce popraviti.
Tale procedura sprejme do 5 znakov in jih pretvori. Vpis se konča z enter
Nazadnje urejal/a NeoTO Čet Jan 19, 2006 7:31 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
LoLek Član

Pridružen-a: Sre 25 Feb 2004 12:46 Prispevkov: 343 Aktiv.: 1.45
|
Objavljeno: Čet Jan 19, 2006 7:31 pm Naslov sporočila: |
|
|
Hvala Djurodrljaca za namig. Naredil sem sledeče: vhodne cifre sem vpisal v polja tipa char. Prvo polje sem pomnožil s 100, drugo z 10. Ta polja sem nato samo seštel.
Včasih imaš rešitev na dlani pa je ne vidiš. Potrebuješ samo majhen namig.
Najbolj me [cenzurirano] v C-ju, ker ne vem kakšne vrste podatkov se skrivajo pod določenimi tipi spremenljivk.  |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Čet Jan 19, 2006 7:32 pm Naslov sporočila: |
|
|
Če sem sam razumel ni to, ampak tisto kar sem jaz napisal. Tipkovnica namreč vrača ASCI vrednosti. Te lahko tudi direktno pošlješ na LCD. Če hočeš z njimi računati jih je pa treba pretvoriti. Tipkovnica namreč vrne recimo za pritisnjeno tipko "1" = 0x31 oz 49 desetiško. Z tem ne moreš računat dokler vrednost ne pretvoriš v dejansko vrednost. K sreči si asci znaki sledijo en za drugim... kot sem napisal v predhodnem sporočilu. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Čet Jan 19, 2006 7:35 pm Naslov sporočila: |
|
|
LoLek: kaj pa če vneseš enomestno ali dvomestno cifro? |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Čet Jan 19, 2006 7:38 pm Naslov sporočila: |
|
|
Kot je napisal Silvo - ce dobis ASCII kodo, potem jo sicer lahko spravis v spremenljivko tipa char (ker je "char", en znak torej, velik en bajt), ampak to ne bo primerno za racunanje, saj koda stevilke (recimo nicle) ni 0x00, temvec 0x30 (ASCII tabela).
Ce torej dobis ASCII kode znakov 1, 2 in 3 (0x31. 0x32 in 0x33), ter jih pomnozis prvega s sto, drugega z deset in potem sestejes, bos dobil eno zmedo. Prepricaj se torej, da res dobis stevilske vrednosti (0 = 0x00, 1 = 0x01, itd). |
|
Nazaj na vrh |
|
 |
LoLek Član

Pridružen-a: Sre 25 Feb 2004 12:46 Prispevkov: 343 Aktiv.: 1.45
|
Objavljeno: Čet Jan 19, 2006 8:16 pm Naslov sporočila: |
|
|
Se opravičujem, ker na začetku nisem omenil, da je to navadna numerična tastatura. Jaz lovim samo signal je pritisnjena ali ni. Temu signalu pa jaz potem priredim kar hočem.
Saj zdaj sem problem rešil. Hvala vsem.  |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|