Bonjour,
J’ai en ma possession un PIC32MX460F512L et d’un carte Explorer 16 de microchip.
J’ai téléchargé les programmes de microchip pour cette carte avec le PIC 24
J’ai tenté de les reprendre et de les adapter a mon PIC32 mais en vain !
Et dans le programme il y a des "Nop".. et il me fait des erreurs avec les nop....
Vous ne pourriez pas m’aider pour la programmation du LCD, pour que je puisse afficher un texte ?
Je laisse ci joint les programmes du PIC24 pour le LCD.
lcd.hCode:#include "p24HJ256GP610.h" #include "lcd.h" #include "delay.h" /* For Explorer 16 board, here are the data and control signal definitions RS -> RB15 E -> RD4 RW -> RD5 DATA -> RE0 - RE7 */ // Control signal data pins #define RW LATDbits.LATD5 // LCD R/W signal #define RS LATBbits.LATB15 // LCD RS signal #define E LATDbits.LATD4 // LCD E signal //#define E LATFbits.LATF1 // LCD E signal // Control signal pin direction #define RW_TRIS TRISDbits.TRISD5 #define RS_TRIS TRISBbits.TRISB15 #define E_TRIS TRISDbits.TRISD4 //#define E_TRIS TRISFbits.TRISF1 // Data signals and pin direction #define DATA LATE // Port for LCD data #define DATAPORT PORTE #define TRISDATA TRISE // I/O setup for data Port /****************************************************************************/ /***** LCD SUBROUTINE *****/ void Init_LCD( void ) // initialize LCD display { // 15mS delay after Vdd reaches nnVdc before proceeding with LCD initialization // not always required and is based on system Vdd rise rate Delay(Delay_15mS_Cnt); // 15ms delay /* set initial states for the data and control pins */ LATE &= 0xFF00; RW = 0; // R/W state set low RS = 0; // RS state set low E = 0; // E state set low /* set data and control pins to outputs */ TRISE &= 0xFF00; RW_TRIS = 0; // RW pin set as output RS_TRIS = 0; // RS pin set as output E_TRIS = 0; // E pin set as output /* 1st LCD initialization sequence */ DATA &= 0xFF00; DATA |= 0x0038; E = 1; Nop(); Nop(); Nop(); E = 0; // toggle E signal Delay(Delay_5mS_Cnt); // 5ms delay /* 2nd LCD initialization sequence */ DATA &= 0xFF00; DATA |= 0x0038; E = 1; Nop(); Nop(); Nop(); E = 0; // toggle E signal Delay_Us( Delay200uS_count ); // 200uS delay /* 3rd LCD initialization sequence */ DATA &= 0xFF00; DATA |= 0x0038; E = 1; Nop(); Nop(); Nop(); E = 0; // toggle E signal Delay_Us( Delay200uS_count ); // 200uS delay lcd_cmd( 0x38 ); // function set lcd_cmd( 0x0C ); // Display on/off control, cursor blink off (0x0C) lcd_cmd( 0x06 ); // entry mode set (0x06) } void lcd_cmd( char cmd ) // subroutiune for lcd commands { // TRISD &= 0xFF00; // ensure RD0 - RD7 are outputs DATA &= 0xFF00; // prepare RD0 - RD7 DATA |= cmd; // command byte to lcd RW = 0; // ensure RW is 0 RS = 0; E = 1; // toggle E line Nop(); Nop(); Nop(); E = 0; Delay(Delay_5mS_Cnt); // 5ms delay } void lcd_data( char data ) // subroutine for lcd data { // TRISD &= 0xFF00; // ensure RD0 - RD7 are outputs RW = 0; // ensure RW is 0 RS = 1; // assert register select to 1 DATA &= 0xFF00; // prepare RD0 - RD7 DATA |= data; // data byte to lcd E = 1; Nop(); Nop(); Nop(); E = 0; // toggle E signal RS = 0; // negate register select to 0 Delay_Us( Delay200uS_count ); // 200uS delay Delay_Us( Delay200uS_count ); // 200uS delay } void puts_lcd( unsigned char *data, unsigned char count ) { while ( count ) { lcd_data( *data++ ); count --; } }
et le delay.hCode:/****** LCD FUNCTION PROTOYPES ******/ void Init_LCD( void ); // initialize display void lcd_cmd( char cmd ); // write command to lcd void lcd_data( char data ); // write data to lcd void puts_lcd ( unsigned char *data, unsigned char count ); /***** LCD COMMAND FUCNTION PROTOTYPES *****/ #define cursor_right() lcd_cmd( 0x14 ) #define cursor_left() lcd_cmd( 0x10 ) #define display_shift() lcd_cmd( 0x1C ) #define home_clr() lcd_cmd( 0x01 ) #define home_it() lcd_cmd( 0x02 ) #define line_2() lcd_cmd( 0xC0 ) // (0xC0)
Code://#define Fcy 14754600 #define Fcy 16000000 void Delay( unsigned int delay_count ); void Delay_Us( unsigned int delayUs_count ); #define Delay200uS_count (Fcy * 0.0002) / 1080 #define Delay_1mS_Cnt (Fcy * 0.001) / 2950 #define Delay_2mS_Cnt (Fcy * 0.002) / 2950 #define Delay_5mS_Cnt (Fcy * 0.005) / 2950 #define Delay_15mS_Cnt (Fcy * 0.015) / 2950 #define Delay_1S_Cnt (Fcy * 1) / 2950
merci
-----