MikroC kod
Moderators: pedja089, stojke369, [eDo], trax
-
- Posts: 6
- Joined: 18-03-2010, 09:19
MikroC kod
Bok, molio bih za malu pomoc oko jednog zadatka, za koji sam ja dosta posla uradio, ali uvijek negdje pogrijesim, tako da ne dobijem rezultat koji hocu.Zadatak je slijedeci:
Tastaturu spojiti, segmente displeja na dekoder, ulaze čipa
A,B,C,D na port A mikrokontrolera, RA0=A...
Program skenira tastaturu, rezultat se pohranjuje na PORTA, dekoder
pretvara BCD-8421 kod u kod pogodan za ispis na 7-seg displej.
Zajednička anoda je spojena na 5V.
ZADATAK JE NAPRAVITI SIMULACIJSKI MODEL I NAPISATI PROGRAM, TESTIRATI ISPRAVNOST
PROGRAMA NA MODELU. KORISTITI DATASHEET 74LS47N.
Promijeniti dekodiranje u programu tako da se, kad nijedna tipka nije pritisnuta,
na displeju ne ispisuje ništa, a kad se pritisne 0 da se 0 i ispiše.
Ja sam u Proteusu poslozio dijelove, to nije problem, ali kod me muci.Evo dokle sam stigao:
http://hotfile.com/dl/37235705/4ea3c9c/" onclick="window.open(this.href);return false; ... d.txt.html
pa ako mi mozete ikako pomoci, bio bih vam stvarno zahvalan.Hvala jos jednom
Tastaturu spojiti, segmente displeja na dekoder, ulaze čipa
A,B,C,D na port A mikrokontrolera, RA0=A...
Program skenira tastaturu, rezultat se pohranjuje na PORTA, dekoder
pretvara BCD-8421 kod u kod pogodan za ispis na 7-seg displej.
Zajednička anoda je spojena na 5V.
ZADATAK JE NAPRAVITI SIMULACIJSKI MODEL I NAPISATI PROGRAM, TESTIRATI ISPRAVNOST
PROGRAMA NA MODELU. KORISTITI DATASHEET 74LS47N.
Promijeniti dekodiranje u programu tako da se, kad nijedna tipka nije pritisnuta,
na displeju ne ispisuje ništa, a kad se pritisne 0 da se 0 i ispiše.
Ja sam u Proteusu poslozio dijelove, to nije problem, ali kod me muci.Evo dokle sam stigao:
http://hotfile.com/dl/37235705/4ea3c9c/" onclick="window.open(this.href);return false; ... d.txt.html
pa ako mi mozete ikako pomoci, bio bih vam stvarno zahvalan.Hvala jos jednom
Re: MikroC kod
1. Popravi link (stavi ga u code blok)
2. Koji se PIC koristi u aplikaciji?
2. Koji se PIC koristi u aplikaciji?
Re: MikroC kod
Evo Solid Snake kod.
Code: Select all
unsigned short keyscan();
void main() {
TRISB.F1=1;
TRISB.F2=1;
TRISB.F3=1; // kolone 1,2,3 ulazni pinovi
TRISB.F4=0;
TRISB.F5=0;
TRISB.F6=0;
TRISB.F7=0; // redovi A,B,C,D izlazni pinovi
PORTB.F4=0;
PORTB.F5=0;
PORTB.F6=0;
PORTB.F7=0; // redovi su inicijalno 0
TRISA=0; // portA je izlazni
PORTA=0; // portA je inicijalno 0
// beskonaèna petlja
do {
PORTA=keyscan();
} while(1);
}
// funkcija keyscan
unsigned short keyscan() {
unsigned short i;
PORTB.F4=0; // ispitujemo red A na RB4
for (i=1; i<4; i++) {
if(Button(&PORTB,i,1,0)) {PORTB.F4=1; return i;}
}
PORTB.F4=1;
PORTB.F5=0; // ispitujemo red B na RB5
for (i=1; i<4; i++) {
if(Button(&PORTB,i,1,0)) {PORTB.F5=1; return i+3;}
}
PORTB.F5=1;
PORTB.F6=0; // ispitujemo red C na RB6
for (i=1; i<4; i++) {
if(Button(&PORTB,i,1,0)) {PORTB.F6=1; return i+6;}
}
PORTB.F6=1;
PORTB.F7=0; // ispitujemo red D na RB7
for (i=1; i<4; i++) {
if(Button(&PORTB,i,1,0)) {PORTB.F7=1; return i+9;}
}
PORTB.F7=1;
}
Re: MikroC kod
Mi koji neradimo sa tim C kompajlerom tesko da ti mozemo nesto pomoci jer koristis funkciju Button za koju ne znamo sta radi.
Pretpostavljam da skeniras tatstaturu i odmah je dekodiras u znak koji ocitavas.
Imas dosta primjera na netu, vecinom se radi sa dvije funkcije jedna skenira tastaturu dok druga dekodira koji je broj ili slovo pritisnuto.
Pretpostavljam da skeniras tatstaturu i odmah je dekodiras u znak koji ocitavas.
Imas dosta primjera na netu, vecinom se radi sa dvije funkcije jedna skenira tastaturu dok druga dekodira koji je broj ili slovo pritisnuto.
-
- Posts: 6
- Joined: 18-03-2010, 09:19
Re: MikroC kod
DA li bi ste mi mogli jos malo pomoci, jer sam stvarno zapeo na ovom problemu, pa ako me mozete malo uputiti na neke primjere ili savjeteabc wrote:Mi koji neradimo sa tim C kompajlerom tesko da ti mozemo nesto pomoci jer koristis funkciju Button za koju ne znamo sta radi.
Pretpostavljam da skeniras tatstaturu i odmah je dekodiras u znak koji ocitavas.
Imas dosta primjera na netu, vecinom se radi sa dvije funkcije jedna skenira tastaturu dok druga dekodira koji je broj ili slovo pritisnuto.

Re: MikroC kod
Eo' ti ga na! 

- Attachments
-
- tastatura.zip
- keypad - 16f84 - 74ls47 - 7segCA
- (45.73 KiB) Downloaded 201 times
-
- Posts: 6
- Joined: 18-03-2010, 09:19
Re: MikroC kod
Hvala ti puno, sad sam uvidio gdje sam pogrijesio, nikad se ne bi sjetio toga
.Hvala ti puno 


Re: MikroC kod
Ajde da malo analiziramo taj tvoj ili vec ciji kod jer mi nije bas najjasnije kako radi:
******************************************************************
PORTB.F4=0; // ispitujemo red A na RB4
for (i=1; i<4; i++) {
if(Button(&PORTB,i,1,0)) {PORTB.F4=1; return i;}
}
********************************************************************
Da pocnemo , na pocetku si inicijalizovao PORTB.F4=0; i sad opet na pocetku svake petlje to radis. Kako mozes da ispitas matricnu tastaturu ako nemas na ni jednom izlaznom pinu napon? , PORTB.F4=0; portb4 ti je na LO upisao si 0 u njega. Kako ces da kad pritisnes tipku taj napon detektujes na nekom od tri ulazna pina? kad nemas nista na ulazu tastature.
Ulazimo u petlju, for petlja poveca varijablu do 1<4 i ispada van jer "if" nece nikada biti izvrsena jer pretpostavljam funkcija buton za koju neznamo ni sta radi ne moze detektovati napon ni na jednom ulaznom pinu jer ga ne moze biti i ako pritisnes neku tipku jer napona nema ni na jednom od 4 pina matricne tastature.
*********************************************************************
PORTB.F4=1;
PORTB.F5=0; // ispitujemo red B na RB5
for (i=1; i<4; i++) {
if(Button(&PORTB,i,1,0)) {PORTB.F5=1; return i+3;}
}
***********************************************************************
Ovjde vec napredujes PORTB.F4=1; ali u pogresnom trenutku rekao bih.
***********************************************************************************************
PORTB.F4=1;
PORTB.F5=0; // ispitujemo red B na RB5
for (i=1; i<4; i++) {
if(Button(&PORTB,i,1,0)) {PORTB.F5=1; return i+3;}
}
PORTB.F5=1;
PORTB.F6=0; // ispitujemo red C na RB6
for (i=1; i<4; i++) {
if(Button(&PORTB,i,1,0)) {PORTB.F6=1; return i+6;}
}
PORTB.F6=1;
PORTB.F7=0; // ispitujemo red D na RB7
for (i=1; i<4; i++) {
if(Button(&PORTB,i,1,0)) {PORTB.F7=1; return i+9;}
}
PORTB.F7=1;
}
**********************************************************************************
Kad dodjes do kraja podignes na visoki nivo sve pinove koji su setovani kao izlazni.
Sada su ti RB4, RB5,RB6,RB7 na visokom nivou.
Sada ulazi drugi puta u petlju i gasis RB4 a ostala tri pina su ti na visokom nivou, Razmisli sam da li to moze da radi.
Onaj drugi kod koji je poslao neko drugi malo drugacije izgleda ali ima gresku
u jednoj if(Button(&PORTB,i,1,0))..... umjesti i ima upisano 2.
Meni se uopste nesvidja ideja kako se utvrdjuje tipka koja je pritisnuta, seljaci kad broje krave onda broje glave ili citave krave da bi doznali broj krava ovi programi mi lice da broje sise pa onda utvrdjuju broj krava iz broja sisa, bez uvrede, rekao sam ima na netu jednostavnijih i boljih rjesenja kako se to radi ali kako se ceka sve servirano gotovo, nastaju problemi
.
******************************************************************
PORTB.F4=0; // ispitujemo red A na RB4
for (i=1; i<4; i++) {
if(Button(&PORTB,i,1,0)) {PORTB.F4=1; return i;}
}
********************************************************************
Da pocnemo , na pocetku si inicijalizovao PORTB.F4=0; i sad opet na pocetku svake petlje to radis. Kako mozes da ispitas matricnu tastaturu ako nemas na ni jednom izlaznom pinu napon? , PORTB.F4=0; portb4 ti je na LO upisao si 0 u njega. Kako ces da kad pritisnes tipku taj napon detektujes na nekom od tri ulazna pina? kad nemas nista na ulazu tastature.
Ulazimo u petlju, for petlja poveca varijablu do 1<4 i ispada van jer "if" nece nikada biti izvrsena jer pretpostavljam funkcija buton za koju neznamo ni sta radi ne moze detektovati napon ni na jednom ulaznom pinu jer ga ne moze biti i ako pritisnes neku tipku jer napona nema ni na jednom od 4 pina matricne tastature.
*********************************************************************
PORTB.F4=1;
PORTB.F5=0; // ispitujemo red B na RB5
for (i=1; i<4; i++) {
if(Button(&PORTB,i,1,0)) {PORTB.F5=1; return i+3;}
}
***********************************************************************
Ovjde vec napredujes PORTB.F4=1; ali u pogresnom trenutku rekao bih.
***********************************************************************************************
PORTB.F4=1;
PORTB.F5=0; // ispitujemo red B na RB5
for (i=1; i<4; i++) {
if(Button(&PORTB,i,1,0)) {PORTB.F5=1; return i+3;}
}
PORTB.F5=1;
PORTB.F6=0; // ispitujemo red C na RB6
for (i=1; i<4; i++) {
if(Button(&PORTB,i,1,0)) {PORTB.F6=1; return i+6;}
}
PORTB.F6=1;
PORTB.F7=0; // ispitujemo red D na RB7
for (i=1; i<4; i++) {
if(Button(&PORTB,i,1,0)) {PORTB.F7=1; return i+9;}
}
PORTB.F7=1;
}
**********************************************************************************
Kad dodjes do kraja podignes na visoki nivo sve pinove koji su setovani kao izlazni.
Sada su ti RB4, RB5,RB6,RB7 na visokom nivou.
Sada ulazi drugi puta u petlju i gasis RB4 a ostala tri pina su ti na visokom nivou, Razmisli sam da li to moze da radi.
Onaj drugi kod koji je poslao neko drugi malo drugacije izgleda ali ima gresku
u jednoj if(Button(&PORTB,i,1,0))..... umjesti i ima upisano 2.
Meni se uopste nesvidja ideja kako se utvrdjuje tipka koja je pritisnuta, seljaci kad broje krave onda broje glave ili citave krave da bi doznali broj krava ovi programi mi lice da broje sise pa onda utvrdjuju broj krava iz broja sisa, bez uvrede, rekao sam ima na netu jednostavnijih i boljih rjesenja kako se to radi ali kako se ceka sve servirano gotovo, nastaju problemi

-
- Posts: 6
- Joined: 18-03-2010, 09:19
Re: MikroC kod
Vjeruj mi nije mi bilo ni na kraj pameti cekati tuđi kod, jer ja sam se stvarno potrudio koliko mogu sa mojim znanjem, ali vidio sam ja da nesto ne stima kod koda, jer sam tek nedavno poceo u njemu raditi 

Re: MikroC kod
Ta dvica nam govori da naćemo obraćati pažnju na znakove "#" i "*" , znači da ćemo se u zadnjem redu tastature usredotočiti samo na nulu "0" .abc wrote:Onaj drugi kod koji je poslao neko drugi malo drugacije izgleda ali ima gresku
u jednoj if(Button(&PORTB,i,1,0))..... umjesti i ima upisano 2.
---------
A što se tiče funkcije Button:
Prototip: unsigned short Button(unsigned short *port, unsigned short pin, unsigned short time, unsigned short active_state);
Citiram:
Function eliminates the influence of contact flickering upon pressing a button (debouncing).
Parameter port specifies the location of the button; parameter pin is the pin number on designated port and goes from 0..7; parameter time is a debounce period in milliseconds; parameter active_state can be either 0 or 1, and it determines if the button is active upon logical zero or logical one.
Re: MikroC kod
@Solid Snake , probaj onaj kod sto je postao scroller.
Re: MikroC kod



Pa probao je, vidiš da se zahvalio poslije tog posta gdje sam stavio kod!

Re: MikroC kod
Ajde kad ste rijesili problem da ja objasnim kako to rjesavam. 4 pina koristim ujedno i za pogon 7 segmentnog displeja skeniranje tastature. Kad ocitam portove pozovem samo funkciju za dekodiranje sta je pritisnuto. Vrlo jednostavno.scroller wrote:![]()
Scooliraj se...
![]()
Pa probao je, vidiš da se zahvalio poslije tog posta gdje sam stavio kod!
if(PORTD>15){
if(tmr3_brojac>20){ //obrada tastature
tmr3_brojac=0;
nova_vrednost=PORTD & 0b11110000;
if(stara_vrednost != nova_vrednost){
stara_vrednost=nova_vrednost;
KeyPressed=0;
}
if(stara_vrednost == nova_vrednost){
temp2=PORTC >>4;
KeyPressed=nova_vrednost | temp2;
}
}
}
char DecodeKey(char keycode)
{
switch(keycode)
{
case 33:
return(0);
case 40:
return(2);
case 36:
return(5);
case 34:
return(8);
case 17:
return(100);
case 72:
return(3);
case 68:
return(6);
case 66:
return(9);
case 65:
return(101);
case 24:
return(1);
case 20:
return(4);
case 18:
return(7);
default:
break;
}
return(21);
}
Re: MikroC kod
OK
A što si ga ovoliko raširio brate ?!
i daj kad pišeš kod, stavi ga u Code block koji je i namjenjen za to !
A što si ga ovoliko raširio brate ?!


i daj kad pišeš kod, stavi ga u Code block koji je i namjenjen za to !

Re: MikroC kod
Rasiren je, ali kad se kompajlira onda se vrlo suziscroller wrote:OK
A što si ga ovoliko raširio brate ?!![]()
![]()
i daj kad pišeš kod, stavi ga u Code block koji je i namjenjen za to !
