Chiunque può sapere come i dati sul mio display LCD?

O

ooicheesan

Guest
Attualmente sto facendo la comunicazione seriale tra il mio VB comm a 1 e la PICDEM 2 PENSIONE .. mi chiedo il motivo per cui i cant inviare i miei dati per illuminare il display LCD a mio bordo? Utilizzando il MPLAB ICD2? Qui i presentare il merluzzo efor di avere uno sguardo se i got perdere qualcosa o no? grazie ...

# include <p18f452.h>
# include <xlcd.h>
# include <delays.h>
# include <usart.h>char dati [2];

Initialise_Serial_Port_Pin nullo (void)
(
/ / Di serie TX
e Rx configurazione pin.
/ / TX - porto C 6 pin
TRISCbits.TRISC6 = 0;

/ / Rx - porto C 7 pin
TRISCbits.TRISC7 = 1;
)

PROCESS_INFORMATION nullo (void)
(

switch (dati [0]) (
case 'A':
PORTA = dati [1];
break;

case 'B':

PORTB = dati [1];
break;

case 'C':
PORTC = Dati [1];
break;

default:
putrsUSART ( "Errore!");
andata e ritorno;

);

putrsUSART ( "Ok");

)

char getcharusart ()
(
while (! PIR1bits.RCIF)
continuare;

PIR1bits.RCIF = 0;

RCREG andata e ritorno;
)

DelayFor18TCY nullo (void)
(
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
)
DelayPORXLCD nullo (void)
(
Delay1KTCYx (60); / / Ritardo di 15ms
andata e ritorno;
)
DelayXLCD nullo (void)
(
Delay1KTCYx (20); / / Ritardo di 5 ms
andata e ritorno;
)
void main ()
(
unsigned char count = 0;
char temp;/ / Di serie TX
e Rx configurazione pin.
Initialise_Serial_Port_Pin ();/ / Configure esterno LCD
OpenXLCD (EIGHT_BIT & LINES_5X7);/ / Configure USART
OpenUSART (USART_TX_INT_OFF &
USART_RX_INT_OFF & / / USART configurazione
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH, 25);while (1)
(
temp = getcharusart ();
Dati [count ] = temp;
if (count == 2)
(
PROCESS_INFORMATION ();
putsXLCD (temp);
count = 0;
)
)(
CloseUSART ();
)
)

 
Prima di tutto devo dire che non sto usando Microchip C 18 ...

Quando guardo il tuo codice nella principale non sono sicuro che ho capito quello che vuoi fare qui:

while (1)
(
temp = getcharusart ();
Dati [count ] = temp;
if (count == 2)
(
PROCESS_INFORMATION ();
putsXLCD (temp);
count = 0;
)
)

Penso putsXLCD stampe una stringa per l'LCD, se si desidera stampare temp a LCD in decimali si dovrà convertire in una stringa prima stampabile.

Qualcosa di simile a questo dovrebbe funzionare:

# include <stdlib.h>
char buffer [10];
putsXLCD (btoa (temperatura, & buffer));

È anche possibile utilizzare:
putcXLCD (temp);

Ma questo avrebbe messo il valore binario di temperatura per il vostro LCD che potrebbero non essere molto utile.

È inoltre necessario azzerare il display ogni volta prima di stampare il valore ...

speriamo che questo aiuta e migliori saluti

 
Grazie per il vostro aiuto ... ci vogliono solo per dirvi come il programma di lavoro qui ..
temp = getcharusart (); / / per ottenere i dati e memorizzare in temp
Dati [count ] = temp; / /
recupero dei dati e il secondo negozio a temp
if (count == 2) / / se 2 poi confrontare i dati ricevuti si porta A, B o C
(
PROCESS_INFORMATION (); / / Un confronto, quindi, [02] o etc
putsXLCD (btoa (temperatura, & buffer));
count = 0;

Allora .. ho provato a mettere in putsXLCD (btoa (temperatura, & buffer)); e comprendono <stdlib.h> e, inoltre, dichiarare il carattere temporaneo, buffer [10], nel mio progetto e ancora
doesnt lavoro di cui si mostra il valore sul mio LCD .. così la speranza di poter dare
un'occhiata al mio programma di nuovo qui .. i Submitt è ancora una volta, dopo la modifica .. grazie ..

# include <p18f452.h>
# include <xlcd.h>
# include <delays.h>
# include <usart.h>
# include <stdlib.h>

char dati [2];

Initialise_Serial_Port_Pin nullo (void)
(
/ / Di serie TX
e Rx configurazione pin.
/ / TX - porto C 6 pin
TRISCbits.TRISC6 = 0;

/ / Rx - porto C 7 pin
TRISCbits.TRISC7 = 1;
)

PROCESS_INFORMATION nullo (void)
(

switch (dati [0]) (
case 'A':
PORTA = dati [1];
break;

case 'B':

PORTB = dati [1];
break;

case 'C':
PORTC = Dati [1];
break;

default:
putrsUSART ( "Errore!");
andata e ritorno;

);

putrsUSART ( "Ok");

)

char getcharusart ()
(
while (! PIR1bits.RCIF)
continuare;

PIR1bits.RCIF = 0;

RCREG andata e ritorno;
)

DelayFor18TCY nullo (void)
(
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
)
DelayPORXLCD nullo (void)
(
Delay1KTCYx (60); / / Ritardo di 15ms
andata e ritorno;
)
DelayXLCD nullo (void)
(
Delay1KTCYx (20); / / Ritardo di 5 ms
andata e ritorno;
)
void main ()
(
unsigned char count = 0;
char temp, buffer [10];/ / Di serie TX
e Rx configurazione pin.
Initialise_Serial_Port_Pin ();/ / Configure esterno LCD
OpenXLCD (EIGHT_BIT & LINES_5X7);/ / Configure USART
OpenUSART (USART_TX_INT_OFF &
USART_RX_INT_OFF & / / USART configurazione
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH, 25);while (1)
(
temp = getcharusart ();
Dati [count ] = temp;
if (count == 2)
(
PROCESS_INFORMATION ();
putsXLCD (btoa (temperatura, & buffer));
count = 0;
)

)(
CloseUSART ();
)
)

 
Scusa non vedo alcun problema in questo momento.

Sei sicuro che si riceve qualcosa dal vostro PC?

È il baudrate corretto?

Una cosa positiva è quella di verificare la presenza di superamento, perché questa condizione consente di disattivare il tuo USART ricezione.

char getcharusart ()
(
while (! PIR1bits.RCIF)
continuare;

if (RCSTAbits.OERR)
(
RCSTAbits.CREN = FALSE;
RCSTAbits.CREN = TRUE;
)

PIR1bits.RCIF = 0;
RCREG andata e ritorno;
)

Forse qualcuno che utilizza Microchip C18 può avere uno sguardo al vostro programma?
: do you really nead to open another thread with exactly the same question?

Modifica:
fare davvero nead di aprire un altro thread con esattamente la stessa domanda?
http://www.edaboard.com/viewtopic.php?t=93893&highlight =

con i migliori saluti

 
C Ya ... .. gli uomini possono ricevere i dati da inviare al mio Vb bordo perché usare il HyperTerminal per controllare il DTA inviato da VB, così chiedo come faccio a visualizzare i dati per gli esempi A [02] al mio LCD su questo PICDEM 2 PLUS bordo? o il suono che veramente strano per voi .. vorrei porle una domanda per quanto riguarda la putsUSART () e putrsUSART () funzioni nel MPLAB ICD 2 ... ho capito che questa funzione scrivere stringhe null compreso il carattere di diritto ..? allora per esempio se ho voluto inviare un "ok" per la mia HyperTerminal o Vb al comm 1 Come faccio a scrivere il codice? Ho provato writitng da putc ( "ok") , ma poi ci ha dichiarato il compilatore
Errore - Impossibile trovare la definizione del simbolo 'putc' nel file 'C: \ mcc18 \ Myproj \ Code.o'.

Allora .. Come faccio a inviare il "ok" allora? Speranza di poter aiutare ..

 
Il modo più semplice sarebbe quella di utilizzare il costruito nel putcUSART () funzione:
putcUSART ( 'o');
putcUSART ( 'k');

Si può anche scrivere una stringa -> USART funzione ...

con i migliori saluti

 
Thanks a lot C uomo ... i got a visualizzare il 'OK' per la mia Vb già .. allora posso consentire a ritardare i tempi per chiedere i messaggi di errore .. quindi il problema è il modo per visualizzare i dati immettere i da visualizzare sul mio LCD ... ho presentato il codice già allora, ma quando ho eseguito e compilarlo ... lo schermo LCD si accende, ma poi ... niente
didnt mostrare così la speranza che si può aiutare ... grazie ..

 
Io ancora non riesce a trovare un problema, tranne quando si entra per esempio la vostra routine B1 scrive PORTB, ma il display LCD è collegato a questa porta PORTB così non può essere utilizzato per qualsiasi altra cosa, per evitare di scrivere PORTB quando si utilizza il display LCD.

Potete anche non impostare i dati per la direzione e PORTC PORTA, queste sono le porte di default, ma ingressi che si desidera utilizzare come uscite!

È possibile testare l'LCD utilizzando uno dei programmi di esempio dal C18 libreria documentazione.

# include <p18C452.h>
# include <xlcd.h>
# include <delays.h>
# include <usart.h>
DelayFor18TCY nullo (void)
(
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
NOP ();
)
DelayPORXLCD nullo (void)
(
Delay1KTCYx (60); / / Ritardo di 15ms
andata e ritorno;
)
DelayXLCD nullo (void)
(
Delay1KTCYx (20); / / Ritardo di 5 ms
andata e ritorno;
)
void main (void)
(
char dati;
/ / Configure esterno LCD
OpenXLCD (EIGHT_BIT & LINES_5X7);
/ / Configure USART
OpenUSART (USART_TX_INT_OFF & USART_RX_INT_OFF &
USART_ASYNCH_MODE & USART_EIGHT_BIT &
USART_CONT_RX,
25);
while (1)
(
while (! DataRdyUSART ()); / / attesa per i dati
dati = ReadUSART (); / / leggere i dati
WriteDataXLCD (dati); / / scrivere a LCD
if (dati == 'Q')
break;
)
CloseUSART ();
)

con i migliori saluti

 
Ciao vi ...in merito a ciò che hai scritto per me i dati che sono l'invio non è la porta B è solo che si tratta di confrontare se si è 'B' solo e la cosa importante che voglio fare è quello di mostrare il carattere B02 sul mio LCD .. così non che io sia l'invio dei dati ci porta a B. .. perché la porta è la porta dati D.. così ho provato a cambiare la porta e spille impostazione sulla Xlcd.h e si cerca di ricompilare. .. il programma che tu mi hai mandato è quello incluso nel MCC 18 esempi .. così ho provato prima, ma penso di si ricompilare e impostare tutti gli I / O pins in. h il file prima di xlcd. h potrebbe funzionare .. sentire da voi allora ..

 
OK così come lo si collega il display LCD per il film e ciò che è collegato al contrasto pin (penso che sia pin3) del display LCD?

E come io non uso Microchip C18 potete PM me il necessario codice sorgente di XLCD. C e. H che si sta utilizzando in modo che io possa dare
un'occhiata a questo articolo?

con i migliori saluti

 
ya .. ora io vi mando il codice xlcd.h e anche il mio lcd.c codice, che cosa devo fare ora è di definire le
# ifndef __XLCD_H
# define __XLCD_H
per vostra informazione ho cambiato il codice nel codice DATA_PORT e la CTRL_PORT.I sto usando __18CXX parte solo in modo che non hanno bisogno di assistenza per gli altri ....
un'altra cosa è che ho bisogno di ricompilare il file poi p18f452.lib
makeonep.bat trovare un file nel tuo mcc18/src dir quindi iniziare con questo parametro:
makeonep.bat 18f452
i p18f452.lib inviare il file anche a voi .. così mi potete diretta come definire la # ifndef __XLCD_H
# define __XLCD_H
e anche ricompilare il p18f452.lib file quindi trovare un file makeonep.bat perché ho provato e non vi è ancora lì ... errore così thanks a lot ....

QUESTO E 'IL XLCD.H file ......

# ifndef __XLCD_H
# define __XLCD_H

/ * PIC 17Cxxx e 18Cxxx XLCD periferiche routine.
*
* Note:
* - Queste librerie routine sono scritte a sostegno della
* LCD Hitachi HD44780 controller.
* - L'utente deve definire i seguenti elementi:
* - L'interfaccia di tipo LCD (4 - o 8-bit)
* - Se la modalità 4-bit
* - Se utilizzando la parte superiore o inferiore a sgranocchiare
* - La porta dati
* - Il tris di registro porta dati
* - Il segnale di controllo dei porti e spille
* - Il segnale di controllo porta tris e spille
* - L'utente deve fornire tre ritardo routine:
* - DelayFor18TCY () fornisce un ritardo 18 Tcy
* - DelayPORXLCD () fornisce almeno 15ms ritardo
* - DelayXLCD () prevede almeno 5 ms ritardo
* /

/ * Tipo di interfaccia a 8-bit, o 4-bit
* Per il funzionamento a 8-bit decommenta il # define BIT8
* /
/ * # Define BIT8 * /

/ * In caso di 4-bit di interfaccia di definire se il dato è in alto
* O inferiore a sgranocchiare.Per abbassare sgranocchiare, il commento # define SUPERIORE
* /
/ * # Define TOMAIA * /

/ * DATA_PORT definisce la porta a cui LCD linee dati sono collegate * /
# se __18CXX
# define DATA_PORT PORTD
# define TRIS_DATA_PORT TRISD
# else / * 17CXX * /
# define DATA_PORT PORTC
# define TRIS_DATA_PORT DDRC
# endif

/ * CTRL_PORT definisce il porto in cui le linee di controllo sono collegati.
* Questi sono solo i campioni, cambiare per soddisfare la tua richiesta.
* /
# se __18CXX
# define RW_PIN PORTBbits.RA2 / * PORTO per RW * /
# define TRIS_RW DDRAbits.RA2 / * TRIS per RW * /
# define RS_PIN PORTAbits.RA3 / * PORTO per RS * /
# define TRIS_RS DDRAbits.RA3 / * TRIS per RS * /
# define E_PIN PORTAbits.RA1 / * PORTO E * /
# define TRIS_E DDRAbits.RA1 / TRIS * E * /
# else / * 17CXX * /
# define RW_PIN PORTCbits.RC5 / * Porto per RW * /
# define TRIS_RW DDRCbits.RC5 / * TRIS per RW * /
# define RS_PIN PORTCbits.RC4 / * Porto per RS * /
# define TRIS_RS DDRCbits.RC4 / * TRIS per RS * /
# define E_PIN PORTCbits.RC6 / * PORTO E * /
# define TRIS_E DDRCbits.RC6 / TRIS * E * /
# endif

/ * Display ON / OFF Control definisce * /
# define DON 0b00001111 / * Mostra il * /
# define DOFF 0b00001011 / * Display off * /
# define CURSOR_ON 0b00001111 / * cursore su * /
# define CURSOR_OFF 0b00001101 / * Cursore off * /
# define BLINK_ON 0b00001111 / * Cursor Blink * /
# define BLINK_OFF 0b00001110 / * Cursor Blink
n. * /

/ * Cursore o Mostra Maiusc definisce * /
# define SHIFT_CUR_LEFT 0b00010011 / * Cursore sposta a sinistra * /
# define SHIFT_CUR_RIGHT 0b00010111 / * Cursore sposta a destra * /
# define SHIFT_DISP_LEFT 0b00011011 / * Mostra sposta a sinistra * /
# define SHIFT_DISP_RIGHT 0b00011111 / * Mostra sposta a destra * /

/ * Set di Funzioni definisce * /
# define FOUR_BIT 0b00101111 / * 4-bit Interfaccia * /
# define EIGHT_BIT 0b00111111 / * 8-bit Interfaccia * /
# define LINE_5X7 0b00110011 / * 5x7 caratteri, singola linea * /
# define LINE_5X10 0b00110111 / * 5x10 caratteri * /
# define LINES_5X7 0b00111011 / * 5x7 caratteri multipli linea * /

# se __18CXX
# define PARAM_SCLASS auto
# define MEM_MODEL lontano / * Cambia l'opzione per vicino modello per le piccole memoria * /
# else / * 17CXX * /
# define PARAM_SCLASS statica
# define MEM_MODEL
# endif

/ * OpenXLCD
Configura * I / O pin per display LCD esterno
* /
void OpenXLCD (PARAM_SCLASS unsigned char);

/ * SetCGRamAddr
* Imposta il carattere generatore di indirizzo
* /
void SetCGRamAddr (PARAM_SCLASS unsigned char);

/ * SetDDRamAddr
* Imposta la visualizzazione dei dati indirizzo
* /
void SetDDRamAddr (PARAM_SCLASS unsigned char);

/ * BusyXLCD
* Restituisce il occupato lo stato del display LCD
* /
unsigned char BusyXLCD (void);

/ * ReadAddrXLCD
* Legge l'attuale indirizzo
* /
unsigned char ReadAddrXLCD (void);

/ * ReadDataXLCD
* Legge un byte di dati
* /
char ReadDataXLCD (void);

/ * WriteCmdXLCD
* Scrive un comando LCD
* /
void WriteCmdXLCD (PARAM_SCLASS unsigned char);

/ * WriteDataXLCD
* Scrive un byte di dati per schermo LCD
* /
void WriteDataXLCD (PARAM_SCLASS char);

/ * PutcXLCD
* Un putc è una scrittura
* /
# define putcXLCD WriteDataXLCD

/ * PutsXLCD
* Scrive una stringa di caratteri per lo schermo LCD
* /
void putsXLCD (PARAM_SCLASS char *);

/ * PutrsXLCD
* Scrive una stringa di caratteri in ROM per l'LCD
* /
void putrsXLCD (MEM_MODEL rom PARAM_SCLASS const char *);

/ * L'utente definisce questi routine secondo la frequenza di oscillatore * /
# se __18CXX
extern void DelayFor18TCY (void);
extern void DelayPORXLCD (void);
extern void DelayXLCD (void);
# else / * 17CXX * /
extern void DelayFor18TCY lontano (void);
extern void DelayPORXLCD lontano (void);
extern void DelayXLCD lontano (void);
# endif

# endif

i cant inviare il p18f452.lib .... a voi in modo da avere uno sguardo sulla prima parte che definisce poi lasciatemelo dire la procedura per la definizione e il passo a ricompilare il file poi p18f452.lib
makeonep.bat trovare un file ...

<img src="http://www.edaboard.com/images/smiles/icon_sad.gif" alt="Triste" border="0" />
 
OK, come si usa per guidare PORTA schermo linee di controllo si dovrebbe sapere che porta fino al potere è configurato come tutti i analogici e non è possibile utilizzarlo come I / O digitali (vedi l'allegato pagina del manuale)

<img src="http://www.edaboard.com/images/smiles/icon_sad.gif" alt="Triste" border="0" />Come ho già detto io non uso (e che) Microchip C18 in modo che non ha molto senso per mandarmi file batch ...

Tutto quello che fare e 'leggere il manuale biblioteca C18 (scaricabile dal sito microchip) e cercare di aiutarvi.

Forse si potrebbe usare OpenADC (ADC_0ANA_0REF, ADC_INT_OFF) per configurare come tutti PORTA digitale e cercare di continuare ad ottenere il vostro programma in esecuzione.

con i migliori saluti
Siamo spiacenti, ma è necessario il login per visualizzare questo attaccamento

 
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Fresco" border="0" />

...Grazie davvero per il vostro aiuto .. anche se non si utilizza il mcc18 .. ma ora ..Ho capito che il codice ci deve essere il cambiamento DATA_PORT .. quindi ora vi LCD corre .. e si vede attivato parole sulla prima riga e dei dati sulla seconda riga ... ma poi la cosa strana è questa .. i dati che ho inviato è B02 viene visualizzato solo in 2 .. e mi domando come faccio a visualizzare la 'B' Infront carattere di byte inviati .... perché quando i debug attraverso il programma in ICD2 mostra che i dati B è la cattura e ho perso da qualche parte per la visualizzazione fuori .. quindi qui i sottoporre la parte del codice per voi di dare
un'occhiata ... grazie ..PROCESS_INFORMATION nullo (void)
(

switch (dati [0]) (

case 'A':
PORTA = dati [1];

break;

case 'B':

PORTB = dati [1];

break;

case 'C':
PORTC = Dati [1];

break;

default:

putrsUSART ((const char * rom), "Errore!");
andata e ritorno;

);
putcUSART ( 'o');
putcUSART ( 'k');

)

char getcharusart (void)
(
while (! PIR1bits.RCIF)
continuare;

PIR1bits.RCIF = 0;

RCREG andata e ritorno;
)void main ()
(
unsigned char count = 0;
char temp, buffer [10];

char start_msg [] = "attivo";/ / Di serie TX
e Rx configurazione pin.
Initialise_Serial_Port_Pin ();/ / Configure esterno LCD

ADCON1 = 0b00001110; / / set PORTA pin 0 per il resto DIGITALE analogico I / O
LCD_init (); / / configure LCD/ / Configure USART
OpenUSART (USART_TX_INT_OFF &
USART_RX_INT_OFF & / / USART configurazione
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH, 25);

LCD_display (1, 1, start_msg);while (1)
(
temp = getcharusart ();
Dati [count ] = temp;

if (count == 2)
(

PROCESS_INFORMATION ();
btoa (temperatura, buffer);

/ / LCD_display (2, 1, port_A);
LCD_display (2, 2, buffer); / / visualizzare sulla seconda riga del display LCD
count = 0;
)

)(
CloseUSART ();
)
)

 
Che su questo:
if (count == 2)
(
PROCESS_INFORMATION ();
buffer [0] = dati [0]
btoa (temperatura, & buffer [1]);
LCD_display (2, 2, buffer); / / visualizzare sulla seconda riga del display LCD
count = 0;
)

Si dovrebbe anche dare
un'occhiata al vostro PROCESS_INFORMATION () di routine come questa routine utilizza o PORTA PORTB o PORTC come destinazione e il display è collegato alla PORTA questo potrebbe portare ad un malfunzionamento del dsiplay.

con i migliori saluti

 
<img src="http://www.edaboard.com/images/smiles/icon_surprised.gif" alt="Sorpresa" border="0" />

...Hey there C uomo ... grazie molto per il vostro codice .. ma poi ho scoperto in che modo è possibile visualizzare la B2 sul display LCD .. così ora vi è un problema che è qui .. Come faccio a visualizzare i dati inviare a LCD e continuamente come A2B2C etc e di cui vogliamo che sia così .. sovrascrivere speranza di sentire da voi allora ...

 
ooicheesan ha scritto:

<img src="http://www.edaboard.com/images/smiles/icon_surprised.gif" alt="Sorpresa" border="0" /> ...
Hey there C uomo ... grazie molto per il vostro codice .. ma poi ho scoperto in che modo è possibile visualizzare la B2 sul display LCD .. così ora vi è un problema che è qui .. Come faccio a visualizzare i dati inviare a LCD e continuamente come A2B2C etc e di cui vogliamo che sia così .. sovrascrivere speranza di sentire da voi allora ...
 
<img src="http://www.edaboard.com/images/smiles/icon_eek.gif" alt="Shocked" border="0" />

..Grazie poi .. vorrei provare a guardare per il codice e cercare lavoro, su invio di dati e la visualizzazione in sequenza ...
e poi l'altra cosa è che quando i B64 inviare i dati dopo che, quando tentano di inviare i B4 quindi il display sovrascrivere i dati e la seconda a sinistra
c'è il terzo ..per gli esempi che dimostrano B44 invece B4 dopo i inviare B64 ..vi è comunque in modo di scrivere il terzo dati ..... così la speranza di sentire da voi allora ...

 

Welcome to EDABoard.com

Sponsor

Back
Top