 |

|
|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2025 12 21, 02:52. Visos datos yra GMT + 2 valandos.
|
|
|
 |
Forumas » Mikrovaldikliai » 3x4 klaviatūra
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
 |
3x4 klaviatūra |
Parašytas: 2006 12 07, 17:41 |
|
|
|
|
Nu ponas Mindaugai, kaip Jum negeda mane su Gate`su lygint? fuuu  |
|
_________________ Akis už akį, postas už postą!! |
|
|
|
 |
3x4 klaviatūra |
Parašytas: 2006 12 07, 17:52 |
|
|
|
|
Gal koki pavyzduka ar linka, paskaityt apie pertraukimus, nes nerandu nieko, arba ieškoti nemoku  |
|
|
|
|
|
 |
3x4 klaviatūra |
Parašytas: 2006 12 07, 19:40 |
|
|
|
|
nelabai yra ka ten skaityti, tam yra procesoriaus datasheetas.
tiesiog funkcija kaip ir bet kuti kita C kalbos funkcija kuri ivygdoma kai ivyksta pertraukimas. tuo metu esanti procesoriaus busena issaugoma, o pabaigus pertraukimo funkcija, vel pratesiama tas kas buvo daroma.
viskas atrodo kaip windows multitaskingas. |
|
|
|
|
|
 |
3x4 klaviatūra |
Parašytas: 2006 12 08, 18:46 |
|
|
|
|
| hmm,neaiškūs tie pertraukimai man... Gal ta koda kokiu kitu būdu galima įrašyti i mcu? |
|
|
|
|
|
 |
3x4 klaviatūra |
Parašytas: 2006 12 08, 22:06 |
|
|
|
|
pertraukimai niekuo nesiskiria nuo kitu C funkciju, tik tiek kad ta funkcija iskvieciama ne programiskai.
juos naudoti nera butina, nes pradedanciajam butu pagrindine problema juos ijungti. bet su pertraukimais oprograma iseina paprastesne ir greitesne. |
|
|
|
|
|
 |
 |
3x4 klaviatūra |
Parašytas: 2006 12 20, 20:39 |
|
|
|
|
Na štai pasirašęs turiu programėlę kuri skanuoja ir duoda ivest 3 skaičių kodą, jį ivedus užsidega led. Norėčiau padaryti, kad po maždaug 20-30s tas led išsijungtu. Kai naudojau duoble for funkcija programa gavosi 8KB Šis kodas su nuimta for funkcija
Kaip suktis?
| Kodas: |
#include <avr/io.h>
int main()
{
DDRB=0x0F;
DDRD=0xff;
while (1){
PORTB =0b00001000; //Pirma eilute
if (bit_is_set(PINB, 6)) {PORTD=255;} else {PORTD=0;} //Skaicius 1
if (bit_is_set(PINB, 5)) {PORTD=255;} else {PORTD=0;} //Skaicius 2
if (bit_is_set(PINB, 4)) {PORTD=255;} else {PORTD=0;} //Skaicius 3
PORTB =0b00000100; //Antra eilute
if (bit_is_set(PINB, 6)) {PORTD=255;} else {PORTD=0;} //Skaicius 4
if (bit_is_set(PINB, 5)) {PORTD=255;} else {PORTD=0;} //Skaicius 5
if (bit_is_set(PINB, 4)) {PORTD=255;} else {PORTD=0;} //Skaicius 6
PORTB =0b00000010; //Trecia eilute
if (bit_is_set(PINB, 6)) {PORTD=255;} else {PORTD=0;} //Skaicius 7
if (bit_is_set(PINB, 5)) {PORTD=255;} else {PORTD=0;} //Skaicius 8
if (bit_is_set(PINB, 4)) {PORTD=255;} else {PORTD=0;} //Skaicius 9
PORTB =0b00000001; //Ketvirta eilute
if (bit_is_set(PINB, 6)) {goto kodas;} else {PORTD=8;}; //Skaicius *
if (bit_is_set(PINB, 5)) {PORTD=255;} else {PORTD=0;}; //Skaicius 0
if (bit_is_set(PINB, 4)) {PORTD=255;} else {PORTD=0;}; //Skaicius #
}
kodas:
while(1){
PORTB =0b00001000; //Pirma eilute
if (bit_is_set(PINB, 6)) {goto antras;} //Paspaustas sk 1
}
antras:
while(1){
PORTB =0b00001000; //Pirma eilute
if (bit_is_set(PINB, 5)) {goto trecias;} //Paspaustas sk 2
}
trecias:
while(1){
PORTB =0b00001000; //Pirma eilute
if (bit_is_set(PINB, 4)) {PORTD=32;} //Paspaustas sk 3
}} |
|
|
|
|
|
|
 |
 |
3x4 klaviatūra |
Parašytas: 2006 12 20, 22:23 |
|
|
|
|
ka turejo daryti ta nuimta for funkcija?
va cia ir prasideda problemos kai nor kelis darbus vienu metu daryti.
jei tau led uzsidege ir tiesiog nori palaukti 30 sek tai gali ideti kokia delay funkcija ir nebus problemu.
bet jei tuo laukimo metu reikia ka nors dar daryti, kad ir toliau skanuoti klaviatura ar dar kazka tai jau bus daug sunkiau be pertraukimu, bet galima.
todel jei nori rimtesnes pagalbos reikia apie visa programa mastyti, netinka sukurti gabala ir meginti ji sujungti su kazkuo kitu. nes gali prireikti visai kito principo. |
|
|
|
|
|
 |
3x4 klaviatūra |
Parašytas: 2006 12 20, 23:00 |
|
|
|
|
for turėjo užlaikyma padaryti, naudojau double kintamaji.
Man daugiau nieko nereikia tik kad PORTD=32 po ~20-30s i6sijungtu ir programa nuo pradžių prasidetų |
|
|
|
|
|
 |
3x4 klaviatūra |
Parašytas: 2006 12 20, 23:24 |
|
|
|
|
tai cia visai menkniekis, uzlaikyma padaryti.
yra gatavu funkciju bibliotekoje turbut tik paieskoti reikia,
jei nera tai galima kelis ciklus viena i kita sudeti.
ir naudok int (arba char tipa jei nori dar mazesnes programos).
zinoma unsigned int maksimumas 65000 o unsigned char 255
siaip duoble kintamasis neturetu taip padidinti programos labai didina float tipas. |
|
|
|
|
|
 |
3x4 klaviatūra |
Parašytas: 2006 12 21, 08:00 |
|
|
|
|
| Manau gera mintis avr'am užlaikyma daryti su __delay_cycles(n); |
|
_________________ -----
That's what she said. |
|
|
|
 |
3x4 klaviatūra |
Parašytas: 2006 12 21, 14:26 |
|
|
|
|
hmm, manau, kažkur buvai suklydęs, kad net 8Kb užėmė, neturėtų tiek užimt. pabandyk dar kartą paprastai parašyt viską, nes man tai kelia abejonių  |
|
_________________ nepamirškit, klysti žmogiška
privatas - privatiems klausimams
arch linux  |
|
|
|
 |
 |
3x4 klaviatūra |
Parašytas: 2006 12 27, 23:11 |
|
|
|
|
Štai ir vėl aš Mėginau su delay.h biblioteka padaryti uzlaikyma, mat mindaugasu saite užtikau kaip jis dar valdyma su su at90s2313: http://www.dreifas.net/elektronikos-projektai/uv-80.html
Bet man sukompiliavus gaunas 11kb hex'as nors uždedu tik vienoj vietoj delay... (pačioj pabaigoj)
| Kodas: |
#include <avr/io.h>
#include <delay.h>
int main()
{
DDRB=0x0F;
DDRD=0xff;
/******************************************************************
/ Klaviaturos skenavimas /
/******************************************************************/
while (1){
PORTB =0b00001000; //Pirma eilute
if (bit_is_set(PINB, 6)) {PORTD=255;} else {PORTD=0;} //Skaicius 1
if (bit_is_set(PINB, 5)) {PORTD=255;} else {PORTD=0;} //Skaicius 2
if (bit_is_set(PINB, 4)) {PORTD=255;} else {PORTD=0;} //Skaicius 3
PORTB =0b00000100; //Antra eilute
if (bit_is_set(PINB, 6)) {PORTD=255;} else {PORTD=0;} //Skaicius 4
if (bit_is_set(PINB, 5)) {PORTD=255;} else {PORTD=0;} //Skaicius 5
if (bit_is_set(PINB, 4)) {PORTD=255;} else {PORTD=0;} //Skaicius 6
PORTB =0b00000010; //Trecia eilute
if (bit_is_set(PINB, 6)) {PORTD=255;} else {PORTD=0;} //Skaicius 7
if (bit_is_set(PINB, 5)) {PORTD=255;} else {PORTD=0;} //Skaicius 8
if (bit_is_set(PINB, 4)) {PORTD=255;} else {PORTD=0;} //Skaicius 9
PORTB =0b00000001; //Ketvirta eilute
if (bit_is_set(PINB, 6)) {goto kodas;} else {PORTD=8;}; //Skaicius *
if (bit_is_set(PINB, 5)) {PORTD=255;} else {PORTD=0;}; //Skaicius 0
if (bit_is_set(PINB, 4)) {PORTD=255;} else {PORTD=0;}; //Skaicius #
}
/******************************************************************
/ Kodo vykdymas /
/******************************************************************/
kodas:
while(1)
{
PORTB =0b00001000; //Pirma eilute
if (bit_is_set(PINB, 6)) {goto antras;} //Paspaustas 1
}
antras:
while(1)
{
PORTB =0b00001000; //Pirma eilute
if (bit_is_set(PINB, 5)) {goto trecias;} //Paspaustas 2
}
trecias:
while(1)
{
PORTB =0b00001000; //Pirma eilute
if (bit_is_set(PINB, 4))
{PORTD=32;
__delay_cycles(200);
//Paspaustas 3
PORTD =0b00000000;
}}}
|
|
|
|
|
|
|
 |
 |
3x4 klaviatūra |
Parašytas: 2006 12 28, 00:41 |
|
|
|
|
tai nera kos tebetis hex failo dydziu ten tesktinis formataskuris bent 3 kartus didesnis us tai las yra is tikruju
kitas dalukas kad __delay_cycles(200); tai tik kazkur 200us velinimas
geraiu daryk taip:
unsigned char a,b,c,d;
for (a=velinimas; a!=0;c++)
for (b=1; b!=0;c++)
for (c=1; c!=0;c++)
sita programa tikrai pati turbut maziausia is imanomu |
|
|
|
|
|
 |
3x4 klaviatūra |
Parašytas: 2006 12 28, 10:32 |
|
|
|
|
for (a=velinimas; a!=0;c++)
for (b=1; b!=0;c++)
for (c=1; c!=0;c++)
man rodos šičia inf. loop ?
mano nuomone turėtų būti taip:
for (a=velinimas; a!=0;a--)
for (b=1; b!=0;b--)
for (c=1; c!=0;c--) |
|
_________________ -----
That's what she said. |
|
|
|
 |
 |
3x4 klaviatūra |
Parašytas: 2006 12 28, 13:26 |
|
|
|
|
Žiūrint į parašytą kodą man raibsta akys
Pirmoje kodo dalyje nustatoma, ar iš vis buvo paspaustas bet koks klavišas, ir jei taip - PORTD=255; jei ne - PORTD=0. Tiesa, viskas patalpinta while(1){..} cikle, iš kurio išėjimo taško aš nematau. Ir aplamai, nors aš ir nerašau su C/C++, bet šis kodas galėtų būti trumpesnis. PVZ:
byte ZeroKey=PINB; //kai niekas nepaspausta
byte IsKeyDown(){
byte temp=0;
PORTB =0b00001000;
if (PINB!=ZeroKey) inc(temp);
PORTB =0b00000100; //Antra eilute
if (PINB!=ZeroKey) inc(temp);
PORTB =0b00000010; //Trecia eilute
if (PINB!=ZeroKey) inc(temp);
if (temp) return(1); else return(0);
}
// Kažkur toliau programoje:
If (IsKeyDown) { čia nustatom kuris key paspaustas ar dar kažką.. };
Kaip sakiau, aš rašau asmu, o C kodą parašiau iš 'lempos'. Tuo labiau kad tokią programulką rašyti asmu žymiai patogiau. |
|
|
|
|
|
|
 |
Google paieška forume |
|
|
 |
Naujos temos forume |
|
 |
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
 |
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
 |
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
 |
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
 |
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
 |
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
 |
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
 |
Must have farming mods
Farming simulator modhub,
Best farming simulator mods |
|

|
 |