Salut !
Je cherche à utilise mon afficheur LCD à l'aide d'un PIC18F45K22.
J'ai essayé d'utiliser des quelques bibliothèques sous deux différents compilateur mais cela ne fonctionne pas.
J'ai donc finalement créé mes propres fonctions pour mieux cerner le problème mais l'afficheur n'affiche toujours rien à part une ligne dont la luminosité se modifie bien avec le potentiomètre.
J'ai regardé l'état des pins de l'afficheur et ils semblent corrects. Pour afficher un '0' j'ai RS = 1 / RW = 0 / E = 0 / D[7:0] = "00110000".
J'utilise MPLABX avec un ICD 3.
Compilateur : XC8.
Le schéma :
Le code :
J'essayerais Lundi un autre afficheur mais cela me paraitrai bizarre qu'il soient mort alors qu'il s'allume.Code:#define _XTAL_FREQ 16000000 #define LCD_RS LATBbits.LATB5 #define LCD_RW LATBbits.LATB4 #define LCD_E LATBbits.LATB3 #define LCD_D LATA #define LCD_D0 LATAbits.LATA0 #define LCD_D1 LATAbits.LATA1 #define LCD_D2 LATAbits.LATA2 #define LCD_D3 LATAbits.LATA3 #define LCD_D4 LATAbits.LATA4 #define LCD_D5 LATAbits.LATA5 #define LCD_D6 LATAbits.LATA6 #define LCD_D7 LATAbits.LATA7 #include <xc.h> #pragma config FOSC = INTIO67 // Oscillator Selection bits (Internal oscillator block) void delay_ms(unsigned int X); void LCD_Init(); void LCD_Busy(); void LCD_Write(char c); void LCD_SetPos(char c); int main() { TRISA = 0x00; TRISB = 0x00; OSCCON = 0b01110111; LCD_Init(); LCD_SetPos(0x80); LCD_Write(0x30); while(1); } void delay_ms(unsigned int X) { do{ X--; __delay_ms(1); } while(X > 0); } void LCD_Busy(){ LCD_RW = 1; LCD_RS = 0; LCD_E = 1; delay_ms(1); while(LCD_D7 = 1); // Busy Flag LCD_E = 0; } void LCD_Write(char c){ LCD_Busy(); LCD_RW = 0; LCD_RS = 1; LCD_D = c; LCD_E = 1; delay_ms(1); LCD_E = 0; } void LCD_SetPos(char c){ LCD_Busy(); LCD_RW = 0; LCD_RS = 0; LCD_D = c; LCD_E = 1; delay_ms(1); LCD_E = 0; } void LCD_Init(){ // 8 bits / 2 lignes / Fonte 5x8 LCD_Busy(); LCD_D = 0x38; LCD_E = 1; delay_ms(1); LCD_E = 0; // Aff ON / Curseur OFF / Pas de clign. LCD_Busy(); LCD_D = 0x0C; LCD_E = 1; delay_ms(1); LCD_E = 0; // Incrément de G à D / Pas de scroll LCD_Busy(); LCD_D = 0x06; LCD_E = 1; delay_ms(1); LCD_E = 0; }
Merci d'avance !
-----