[ miros21k @ 29.03.2004. 16:39 ] @
| E narode, ako neko moze da pomogne jako bi bio zahvalan.
Stvar je sledeca: radimo u skoli na nekim kompovima koji su povezani sa nekom LED tablom.
Na toj tabli ima 8 LEDs (lampica), i mi moramo da napravimo program koji ce brojati od 1 do 255 (pokazujuci brojeve u binarnom na lampicama) ako se stisne na tastaturi U, a ako se stisne D onda ce da broji u nazad.
Radimo u parovima i moj partner zna vise programianje nego ja i dosli smo do sledeceg koda.
Ovaj kod nam broji sve kako mi hocemo unapred i unazad ali moramo stalno stiskati U ili D da bi nastavio da broji unapred ili unazad (umesto da nastavlja sam).
Ovako kod izgleda, pa ako neko ima neke sugestije bilo bi super.
#include <conio.h>
#include <stdio.h>
#include <dos.h>
#define CONTROL 0x1B7
#define PORTA 0x1B4
#define PORTB 0x1B5
#define SETUP 0x82
int main(void)
{
outportb(CONTROL,SETUP);
while(!kbhit())
{
int a=0;
char key;
key=getch();
if (key=='d')
{
a--;
outportb(PORTA,a);
delay(1000);
}
if (key=='u')
{
a++;
outportb(PORTA,a);
delay(1000);
}
}
return(0);
}
Hvala !
|
[ yooyo @ 29.03.2004. 19:12 ] @
Problam je bio u getch(). Program jednostavno stane i ceka da nesto dodje sa tastature. Morate da to izbegnete. Nadam se da ce sledeci code resiti problem...
Code:
int main(void)
{
int dir = 0; /* pravac -1 za dole 1 za gore*/
int quit = 0; /* flag za kraj programa*/
int pos=0; /* trenutno stanje brojaca */
outportb(CONTROL,SETUP);
while(!quit)
{
if (kbhit()) /* Da se desio neki dogadjaj sa tastature? */
{
char key;
key=getch(); /* Koji je taster pritisnut */
if (key == 'd') dir = -1; /* promeni dir na -1*/
else if (key == 'u') dir = 1; /* promeni dir na 1*/
else if (key == 'q') quit = 1; /* signaliziraj kraj*/
}
outportb(PORTA,pos);
pos += dir;
if (pos > 255) pos = 0;
if (pos < 0) pos = 255;
delay(1000);
}
return(0);
}
[ miros21k @ 30.03.2004. 02:03 ] @
Iako slabo se razumem u C, mislim da vidim sta si uradio.
Samo za brojanje 1..pa 2..pa 3..itd receno nam je da koristimo "increment"
a za unatrag 5..pa 4...pa 3 (naprimer) da koristimo "decrement", zato smo mi u kodu imali a++ i a--
(Da li bi se nekako moglo to staviti umesto onog tvog dir = 1 i dir = -1 ?)
Isto tako ne samo "q" taster da gasi program vec bilo koji sa tastature (osim naravno "d" i "u"). (Kako bi se to izvelo?)
Hvala ti puno.
P.S. Ovaj zadatak je "part 2" od jednog veceg pitanja i cim mi partner posalje "part 1" koji nam radi, postiracu ga ovde da vidis princip na kome radimo (jer ovaj part 2 je samo nadogradnja pd "part 1").
[ DeepInBrain @ 30.03.2004. 14:05 ] @
evo da se i ja umesam :)
koliko vidim covek je koristio ono dir kao skracenicu od direction. Znaci da je to smer u kojem se tvoj brojac krece (nepred-nazad).
Ono pos += dir; sabira pos sa dir, tako da ti dir predstavlja ono ++ i --, jer je ili 1 ili -1. Ako bas zelis preko -- i ++, morao bi malo da zakomplikujes uvodjenjem uslova.
U stvari mozda i ne bi, probaj ovako:
//-------------------------------------------------------------------
while(!quit)
{
outportb(PORTA,pos); // PREMESTEN !!!
if (kbhit()) /* Da se desio neki dogadjaj sa tastature? */
{
char key;
key=getch(); /* Koji je taster pritisnut */
if (key == 'd') pos--;
else if (key == 'u') pos++;
else if (key == 'q') quit = 1; /* signaliziraj kraj*/
}
if (pos > 255) pos = 0;
if (pos < 0) pos = 255;
delay(1000);
}
//========================================================
Nisam ovo probao, tako da mozda ima sint. greski...
[ miros21k @ 01.04.2004. 00:15 ] @
Hvala svima.
Kao sto sam reko evo "part 1" pa vidite na njega samo treba da se nadogradi "part 2".
Part 1 je samo da se broji u binarnom od 1-255 na tih 8 LEDs i ovako smo uradili.
Code:
/* a program that counts up in binary on the eight LEDs*/
#include <conio.h>
#include <stdio.h>
#include <dos.h>
#define CONTROL 0x1B7
#define PORTA 0x1B4
#define PORTB 0x1B5
#define SETUP 0x82
int main (void)
{
int i=0;
outportb(CONTROL,SETUP);
while (!kbhit())
{
outportb(PORTA,i++);
delay (1000);
}
return (0);
}
Partnerka kaze da je uspela da sredi "part 2" za koji sam ja ovde potrazio pomoc, ali mi izgleda malo predugacak, pa ako neko moze ikako da proveri dal valja i dal moze da se skrati. bio bi jako jako zahvalan.
Part 2:
Code:
#include <conio.h>
#include <stdio.h>
#include <dos.h>
#define CONTROL 0x1B7
#define PORTA 0x1B4
#define PORTB 0x1B5
#define SETUP 0x82
int getCountUp();
int getCountDown();
int main (void)
{
char Uletter;
outportb(CONTROL,SETUP);
Uletter = getchar();
switch (Uletter)
{
case 'U':
getCountUp();
break;
case 'u':
getCountUp();
delay (1000);
break;
case 'D':
getCountDown();
break;
case 'd':
getCountDown();
delay (1000);
break;
}
return (0);
}
int getCountUp ()
{
int i = 0;
while (!kbhit())
{
outportb(PORTA,i++);
delay (1000);
}
return (0);
}
int getCountDown()
{
int i=128;
while (!kbhit())
{
outportb(PORTA,i--);
delay (1000);
}
return (0);
}
[ spaka-s @ 01.04.2004. 15:40 ] @
Ma koliko sam ja vidio kod je OK, mada ga nisam probao.
To sto se tebi cini da je "velik" , nema veze.Koristila je klasicne f-je uz pomoc switch naredbe,odnosno ono njeno Uletter se dobija sa tastature /*gechar()*/ i samo ga prosledjuje doslovce prevedeno kao svic.Ako uneses taster ...uradi ovo, ako uneses...uradi ovo :) Ono osnovno za digitron :)
Poz!
[ miros21k @ 20.04.2004. 09:45 ] @
Svaka cast svima sto su pomogli sa svojim odgovorima, ali juce tek sam bio na ocenjivanju tog programa i prvi program sto je YOOYO napisao je radio, ovi ostali su izbacivali neke error koje ja nisam IMO POJMA kako da resim.
Thanx jos jednom. POZ !
[ slavkot @ 22.04.2004. 19:12 ] @
Pozdrav,da ne zapocinjem novu temu,zasto gore navedeni program ne radi
u dev-cpp,javlja se sledeca greska:
[Linker error] undefined reference to "outportb"
[Linker error] undefined reference to "outportb"
[Linker error] undefined reference to "delay"
[ yooyo @ 22.04.2004. 19:25 ] @
Tvoj program moze da radi samo pod DOS-om i da se prevede sa kompajlerima koji mogu da generisu .EXE za DOS. Funkcija outportb upisuje na neki port neku vrednost. To pod Windowsima ili Linuxom nije dozvoljeno. Pristut portovima je u potpunosti drugaciji u Windowsima i u Linuxu u odnosu na DOS.
Dev-cpp je kompajler za Linux (nisam siguran za Linux  ) ili Windows i nije u stanju da prevede tvoj program jer ne postoje odgovarajuci headeri i biblioteke koje sadrze doticnu funkciju.
yooyo
[ slavkot @ 22.04.2004. 19:49 ] @
Jel to znaci da pomocu njega ne mogu nikako ostvariti komunikaciju sa portovima?
[ Dragi Tata @ 22.04.2004. 20:18 ] @
Ovo smo objašnjavali već x puta. Koristi malo opciju "pretraga" na C/C++ forumu i naći ćeš dosta dobre odgovore na ovo pitanje.
[ slavkot @ 23.04.2004. 17:20 ] @
Opet ja,sad sam uzeo kompajler Turbo c++ i iskompajlirao gore navedeni kod,
nema gresaka ni upozorenja,pokrenem ga,ali opet nemam nikakvog signala na portu,
da ne treba tu dodati neki drajver ili nesto slicno ili na valja XP ?
[ Dragi Tata @ 23.04.2004. 18:54 ] @
Jesi li ti uopšte pogledao teme koje sam pomenuo malopre? Uradi potragu za reč "port" i naći ćeš gomilu tema koje lepo objašnjavaju zašto se to dešava.
[ slavkot @ 23.04.2004. 19:17 ] @
Pa trazio sam vec 15 puta,ali nema nista konkretno, sta se ljutis
[ yooyo @ 23.04.2004. 19:35 ] @
Program ce ti raditi samo pod DOS-om. Ako je XP u pozadini on ce spreciti bilo kakav pristup portu. Znaci... potrazi diskete sa DOS-om, napravi particiju, instaliraj DOS i testiraj program...
yooyo
[ slavkot @ 23.04.2004. 19:44 ] @
Tako objasni da se zna sta i kako , hvala na odgovoru
[ Dragi Tata @ 23.04.2004. 20:18 ] @
Citat: slavkot:
Pa trazio sam vec 15 puta,ali nema nista konkretno, sta se ljutis
Ima:
http://www.elitesecurity.org/tema/27954
Ne ljutim se, samo ne volim da se forum zatrpava ponavljanjem starih pitanja.
[ slavkot @ 24.04.2004. 01:00 ] @
U pravu si,moja greska,sorry
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|