![]() |
Beh... semplicemente ignoravo l'esistenza del tilde come operatore! :blink: Nel senso che, sono programmatore Asp.Net e nel C# non l'ho mai visto, poi ho iniziato a dedicarmi ai PIC prima con mickroBasic e poi con il C, quindi ho un po di lacune da colmare.. :wink: ps. posso dire quindi che è controproducente iniziare a programmare in basic per poi intraprendere la strada del C, meglio studiare direttamente il C, anche se apparentemente più ostico, alla lunga si risparmiano fatiche che tanto se si vuole programmare bene un PIC almeno il C è d'obbligo.. mia opinione! ^_^ |
Citazione:
|
Un altro possibile metodo per controllare a bit (byte) una porta od una variabile con il C18 Microchip (funziona in genere con qualsiasi micro) Codice: //define C18 p18f2320.h:yeah: |
ciao a tutti,pian pianino,imparo sempre qualcosa di nuovo con il linguaggio c e la compilazione dei pic,ma siamo ancora lontani dalla perfezione. pian painino provo nuovi programmi,li modifico e cerco di capirli meglio e provarli in 100 modi diversi ora sono ritornato sul lcd 16x2 so gia come far visualizzare le parole sul display,ma ora volevo creare uno stupido programma che ogni secondo mi aumenti di una unita la variabile evento e che me la mostri sul display,ma ho provato in mille modi differenti,riesco a vedere la parola CONTEGGIO=, vedo anche il cursore che dovrebbe mostrarmi i numeri in aumento,ma non succede nulla, DOVE SBAGLIO? uso pic 16f84a e mikroc ciao e grazie sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB6_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB6_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; int evento; char txt; void main() { Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); evento=0; while(1); { delay_ms(1000); evento=evento+1; } intToStr(evento, txt); LCD_Out(1,1,"CONTEGGIO="); Lcd_Out(1,12, txt); } |
Citazione:
Description : Function creates an output string out of a signed number (numerical value of int type). Output string has fixed width of 6 characters; remaining positions on the left (if any) are filled with blanks. Requires : The output string should be at least 7 characters in size. Mi pare che txt non sia una stringa ma sia un char; inoltre aggiorni il display FUORI dal while (1) (cioè non lo aggiornerai MAI :rolleyes:) |
grazie x la risposta,ma :( |
Citazione:
Invece di: char txt; devi scrivere: char txt[7]; La funzione trasforma un numero in una stringa di caratteri. Come faccio a traformare un numero, ad esempio 12, ed inserirlo in una variabile di tipo char come hai scritto tu? Un char è UN carattere, il numero 12 evidentemente ne ha 2; in realtà una volta trasformato in stringa ne ha 3: il carattere 1, il carattere 2 e il valore 0 che indica la fine della stringa. Se scrivi char txt[7] crei una stringa di 7 caratteri: 6 cifre numeriche terminata con uno zero. Il display tu lo aggiorni (si fa per dire :D) fuori dal while, while(1); { delay_ms(1000); evento=evento+1; } // fine del while(1) intToStr(evento, txt); // <-- QUI NON CI ARRIVA MAI!!! LCD_Out(1,1,"CONTEGGIO="); Lcd_Out(1,12, txt); La condizione while(1) è sempre vera e non arriverai mai ad eseguire l'aggiornamento del display. E' chiaro ora? le righe le porti dentro, così: while(1); { delay_ms(1000); evento=evento+1; // qui puoi anche scrivere: evento++; intToStr(evento, txt); LCD_Out(1,1,"CONTEGGIO="); Lcd_Out(1,12, txt); } |
ciao,scusa il ritardo,ma la bimba,stasera non aveva sonno. grazie mille x il tuo aiuto,ho dovuto creare anche la funzione anti repit,xchè appena premevo il tasto,la conta andava velocemente,ora tutto ok. //CONTA PEZZI 16F84A mikroc sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB6_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB6_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; char txt[3]; short conta; void main() { trisb.f0=1; Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); LCD_Out(1,1,"CONTEGGIO="); conta= 0; while(1) { if(portb.f0=1) { while(portb.f0=1) {}; conta++; } byteToStr (conta, txt); Lcd_Out(1,11, txt); } } |
Sino a quanto può arrivare la variabile conta? E' definita come short ma non sonon sicuro nel Mikroc quanti byte occupi uno short. Tieni presente che, salvo indicare la var come UNSIGNED, questa può variare da un minimo negativo ad un massimo positivo. Vedo che non controlli mai se raggiunge un massimo quindi preparati a qualcosa di... strano :rolleyes: Altra cosa: la stringa deve essere lunga come il massimo numero di cifre + 1 che sarà occupata dallo zero di fine stringa. Nel tuo caso, 3 mi sembra poco: sino al numero 99 va bene, ma a 100 lo zero di fine stringa non ci sta... :rolleyes: |
ciao,la conta arriva a 255,nella stringa ho provato a scrivere 7 ma anche con 3 è lo stesso....io non so se è mikroc che corregge qualcosa o mi va di culo. non considerare il mio programma o futuri come programmmi finiti x un unico scopo,ma li tengo come programmi base,da tener via come esempi e se in futuro serviranno x un preciso scopo allora verranno modificati.io da questo programma ho gia fatto svartiate modifiche....del tipo..appena arrivi a 20 ritorna a 0..oppure,appena arrivi a 10 accendi un led....ecc.ora questo programma lo conservo e vado avanti a studiarmi qualcosa di nuovo. x ora ho fatto -pwm a 10 velocità.. 0= 0% 10= 100% -conta secondi su lcd.. ogni secondo viene visuallizato sul lcd.....questo programma lo tirerò fuori piu avanti x fare un cronografo e in futuro un orologio regolabile tramite tasti...ma in futuro,prima studio,ci potrei fare anche un detonatore:fiu: -conta pezzi considera che ogni programma base è gia stato modificato varie volte x provare varie funzioni che x ora non mi servono,voglio proseguire lo "studio" con interrup,analogico digitale,epron e mi piacerebbe anche l uso della seriale......ma piano piano.una bel passatempo serale che magari mi servirà in un futuro....quello che di sicuro devo imparare a creare è leggere il segnale dalla ricevente di un modello x creare un interuttore o giochi di luce gestiti durante il volo dalla radio. |
| Tutti gli orari sono GMT +2. Adesso sono le 03:03. |
Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2026
www.baronerosso.it - www.toymagazine.it