| |
| | #1 (permalink) Top | |
| User Data registr.: 06-08-2007 Residenza: Empoli
Messaggi: 1.813
| Citazione:
Codice: switch(PORTA){
case 1:
freccia[nf] = 1;
break;
case 2:
freccia[nf] = 2;
break;
case 4:
freccia[nf] = 3;
break;
case ecc...
} Codice: freccia[nf] = PORTA;
__________________ ....... | |
| | |
| | #2 (permalink) Top |
| User Data registr.: 16-11-2008 Residenza: Riva del Garda - TN
Messaggi: 429
|
uhm... ci sto riflettendo, per ora posso dirti che non posso fare come fai tu perchè in realtà (come avrai sicuramente capito) i numeri lì rappresentati sono le traduzioni in decimale dei numeri binari. potrei però fare una cosa un po complicata con un array giusto? in caso dovrei dichiarare un int con 128 elementi? ma se io richiamo PORTA il valore mi ritorna in decimali o binario? ![]() non ci ho mai provato, certo risparmierei un sacco di righe ciao lol21 |
| | |
| | #3 (permalink) Top | |
| User Data registr.: 06-08-2007 Residenza: Empoli
Messaggi: 1.813
| Citazione:
![]() Non capisco il tuo discorso... che differenza fa se leggi una porta in binario o vedi quel numero come decimale, esadecimale, ottale etc??? ![]() al limite prova a buttare qui un pezzo di codice e lo vediamo insieme
__________________ ....... | |
| | |
| | #4 (permalink) Top |
| User Data registr.: 16-11-2008 Residenza: Riva del Garda - TN
Messaggi: 429
|
ad esempio al posto degli switch scrivere così; Codice: int val[128]; val[1] = 1; val[2] = 2; val[4] = 3; ... freccia[nf] = val[PORTA]; se PORTA risulta 0b00000001 ovvero 1 allora il valore della freccia è 1. se PORTA risulta 0b00000100 ovvero 4 allora il valore della freccia è 3. spero di essere stato chiaro, io lo switch lo richiamo in totale 5 volte dunque un sistema così effettivamente sarebbe decisamente più comodo. ciao lol21 |
| | |
| | #5 (permalink) Top | |
| User Data registr.: 06-08-2007 Residenza: Empoli
Messaggi: 1.813
| Citazione:
Se la chiami 5 volte, l'hai messa in una funzione a parte verooo???
__________________ ....... | |
| | |
| | #6 (permalink) Top |
| User Data registr.: 16-11-2008 Residenza: Riva del Garda - TN
Messaggi: 429
|
i cicli di switch sono in un while e alla fine incremento il numero della freccia da inserire. uso un while e non un for perchè così vi è la possibilità di cancellare la freccia (infatti in caso di pressione del tasto canc si diminuisce di uno il numero della freccia da modificare e resetta il valore della freccia. visto che non riesco a spiegare bene allego i codici ![]() virtus.c Codice: #include <header.h>
#define d 129
// Lcd pinout settings
sbit LCD_RS at RB7_bit;
sbit LCD_EN at RB6_bit;
sbit LCD_D7 at RB5_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D4 at RB0_bit;
// Pin direction
sbit LCD_RS_Direction at TRISB7_bit;
sbit LCD_EN_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB0_bit;
void main() {
TRISA = 0b11111111 ; // PORTE A come entrate
//int ini;
Soft_UART_Init(&PORTB, 1, 2, 9600, 0); // apertura porta COM RS-232
/* inizio a usare l'LCD */
Lcd_init();
Lcd_Cmd(_LCD_TURN_ON);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1, 1, "Paglione A conferma");
/* LCD settato, ora inizia la funzione per cui si sceglie il paglione */
while(PORTA != 17) { // finche non si preme il tasto A
switch(PORTA) {
case 1:
paglione = 1;
break;
case 2:
paglione = 2;
break;
case 4:
paglione = 3;
break;
case 8:
paglione = 4;
break;
case 16:
paglione = 5;
break;
case 32:
paglione = 6;
break;
case 64:
paglione = 7;
break;
case 128:
paglione = 8;
break;
case 3:
paglione = 9;
break;
case 5:
paglione = 10;
break;
}
Lcd_Out(1, 1, paglione); // stampo a video il paglione usato
Delay_ms(200);
}
while(1) {
while(Soft_UART_Read(&error) != paglione) {
switch(PORTA) {
case 17:
while(frea == 3) {
switch(PORTA) {
case 1:
arcierea[frea] = 1;
break;
case 2:
arcierea[frea] = 2;
break;
case 4:
arcierea[frea] = 3;
break;
case 8:
arcierea[frea] = 4;
break;
case 16:
arcierea[frea] = 5;
break;
case 32:
arcierea[frea] = 6;
break;
case 64:
arcierea[frea] = 7;
break;
case 128:
arcierea[frea] = 8;
break;
case 3:
arcierea[frea] = 9;
break;
case 5:
arcierea[frea] = 10;
break;
case 9:
arcierea[frea] = 0;
break;
case 6:
arcierea[frea] = 0;
frea = frea-1;
break;
}
for(i=0; i=10; i++) result = strcat(result, lcdresult[i]);
result = strcat(result, paglione);
result = strcat(result, 'A');
result = strcat(result, ' ');
result = strcat(result, ' ');
result = strcat(result, volee);
Lcd_Out(1, 1, result);
result = 0;
result = strcat(result, arcierea[0]);
result = strcat(result, ' ');
result = strcat(result, arcierea[1]);
result = strcat(result, ' ');
result = strcat(result, arcierea[2]);
result = strcat(result, ' ');
result = strcat(result, (arcierea[0]+arcierea[1]+arcierea[2]));
Lcd_Out(2, 1, result);
}
volee++;
break;
case 33:
while(freb == 3) {
switch(PORTA) {
case 1:
arciereb[freb] = 1;
break;
case 2:
arciereb[freb] = 2;
break;
case 4:
arciereb[freb] = 3;
break;
case 8:
arciereb[freb] = 4;
break;
case 16:
arciereb[freb] = 5;
break;
case 32:
arciereb[freb] = 6;
break;
case 64:
arciereb[freb] = 7;
break;
case 128:
arciereb[freb] = 8;
break;
case 3:
arciereb[freb] = 9;
break;
case 5:
arciereb[freb] = 10;
break;
case 9:
arciereb[freb] = 0;
break;
case 6:
arciereb[freb] = 0;
freb = freb-1;
break;
}
for(i=0; i=10; i++) result = strcat(result, lcdresult[i]);
result = strcat(result, paglione);
result = strcat(result, 'A');
result = strcat(result, ' ');
result = strcat(result, ' ');
result = strcat(result, volee);
Lcd_Out(1, 1, result);
result = 0;
result = strcat(result, arciereb[0]);
result = strcat(result, ' ');
result = strcat(result, arciereb[1]);
result = strcat(result, ' ');
result = strcat(result, arciereb[2]);
result = strcat(result, ' ');
result = strcat(result, (arciereb[0]+arciereb[1]+arciereb[2]));
Lcd_Out(2, 1, result);
}
volee++;
break;
/* case 65: */
}
} // fine switch
}
} Codice: int arcierea[2];
int arciereb[2];
int arcierec[2];
int arciered[2];
int paglione;
int volee = 1;
int frea = 1;
int freb = 1;
int frec = 1;
int fred = 1;
char *lcdresult[10] = {'B', 'e', 'r', 's', 'a', 'g', 'l', 'i', 'o', ' '};
char *result;
char *error;
int i; ![]() ciao lol21 |
| | |
| | #7 (permalink) Top |
| User Data registr.: 29-11-2002 Residenza: Mountain View, CA
Messaggi: 4.390
|
Fai un ciclo, e in ciascun passo confronti la variabile con una maschera a bit, che sposti di volta in volta con l'operatore di spostamento bitwise a sinistra. Quando trovi che l'AND bitwise è 1, hai trovato quale bit è acceso, quindi quale paglione.
__________________ The number you dialed is imaginary. Please rotate your phone 90 degrees and redial. |
| | |
![]() |
| Bookmarks |
| |
Discussioni simili | ||||
| Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
| alimentatore insufficiente??? | molale81 | Batterie e Caricabatterie | 2 | 10 aprile 09 00:35 |