Bonjour,
Je suis nouveau sur ce forum donc bonjour à tous. Je possédais une carte qui ne fonctionne plus avec un pic 16f877 (message posté en octobre). J'ai récupéré depuis peu une carte avec un pic 16f876 et un LCD NHD‐C0220AZ‐FSW‐FTW. Je suis débutant en programmation de PIC mais je souhaiterais pouvoir commencer par écrire sur ce LCD. J'utilise Mplab IDE 8.92 et le compilateur Hi-Tech Lite 9.83. Sur cette carte, le micro était programmé en basic mai je souhaiterais le faire en C mais sans succès pour le moment. Les caractéristiques sont:
DATA B0, B1, B2 et B3
E B4
RS B5
Backlight C2
J'ai écrit ce code (ci_joint) mais je ne sais plus quoi tester pour m'en sortir. Pouvez-vous m'aider ou me donner des pistes ? Je vous remercie par avance.
Code://---------------------------------E/S et variables generales--------------------- #include <htc.h> #include "pic.h" #include "pic16f876.h" //-------------------------------Déclaration de fonction------------------------- void init_PIC(void); void lcd_init(void); void lcd_write(unsigned char c); void lcd_clear(void); void lcd_puts(const char * s); void lcd_putch(char c); void lcd_goto(unsigned char pos); //-------------------------------Définition des I/O------------------------------ #define RT1 RA2 #define LCD_DATA PORTB #define LCD_EN RB4 #define LCD_RS RB5 #define LCD_STROBE() ((LCD_EN = 1),(LCD_EN=0)) void main(void) { init_PIC(); RT1=1; __delay_ms(1000); lcd_init(); for(;;) { lcd_goto(0); // select first line lcd_puts("Hello world"); } } void lcd_init() { char init_value; init_value = 0x3; LCD_RS = 0; LCD_EN = 0; //LCD_RW = 0; __delay_ms(15); // wait 15mSec after power applied, LCD_DATA = init_value; LCD_STROBE(); __delay_ms(5); LCD_STROBE(); __delay_us(200); LCD_STROBE(); __delay_us(200); LCD_DATA = 2; // Four bit mode LCD_STROBE(); lcd_write(0x28); // Set interface length lcd_write(0xF); // Display On, Cursor On, Cursor Blink lcd_clear(); // Clear screen lcd_write(0x6); // Set entry Mode } void lcd_write(unsigned char c) { __delay_us(40); LCD_DATA = ( ( c >> 4 ) & 0x0F ); //LCD_DATA = ( ( c >> 4 ) & 0xFE ); LCD_STROBE(); LCD_DATA = ( c & 0x0F ); //LCD_DATA = ( c & 0xFE ); LCD_STROBE(); } void lcd_clear(void) { LCD_RS = 0; lcd_write(0x1); __delay_ms(2); } void lcd_puts(const char * s) { LCD_RS = 1; // write characters while(*s) lcd_write(*s++); } void lcd_putch(char c) { LCD_RS = 1; // write characters lcd_write( c ); } void lcd_goto(unsigned char pos) { LCD_RS = 0; lcd_write(0x80+pos); } void init_PIC(void) { // OSCCON = 0b01010110; // 250kHz ADCON1=0b00000100; INTCON=0b10000000; TRISA2=0; RA2=1; TRISC3=1; TRISC2=0; RC2=1; //PORTA = 0; //TRISA = 0b00000000; // RA0 = AN0 => Entrée Ana => TRISA.0 = 1 PORTB = 0; TRISB = 0b00000000; //PORTC = 0; //TRISC = 0b01000000; //PORTD = 0; //TRISD = 0b11110000; }
-----