Bonjour a tous,
En vu d'un projet en cours, je dois afficher un texte sur un afficheur LCD que j'ai monté en 8 bits. Sa puce est une S6A0069.
Je programme sous CCS, et la compilation ne pose aucun soucis.
Cependant lorsque j'essaye d'afficher un caractère, il se reproduis plusieurs fois et pas du tout la où il serait censé s'afficher.
Je ne sais donc pas si cela viens de l'initialisation du lcd, de mon sous programme qui gere le placement des char. ou bien le prog. principal ...
Je vous met monprogramme en espérant que vous pourrez m'aider. Je vous en remercie d'avance.
Si il y a des questions, bien évidement il n'y a pas de soucis
Code:#include "LCD.h" #define LCD_RS PIN_E0 #define LCD_RW PIN_E1 #define LCD_E PIN_E2 #define clear_display 0x01 #define return_home 0x02 #define function_set 0x30 #define display_ON 0x0C #define display_OFF 0x08 #define add_zero_ddram 0x80 void lcd_com(char c) { output_low (LCD_E); output_low(LCD_RS); // Met le RS à 0 : mode commande output_d (c); // Envoie la commande dans le port D output_high (LCD_E); // Set du Enable pour activer l'envoie delay_us(100); output_low (LCD_E); // Met E au niveau 0 pour prochaine envoie delay_us(100); set_tris_d(0x00); output_d(0x00); } void lcd_char(char c) { output_high(LCD_RS); // Met le RS à 1 : mode charactere output_D(c); // Envoie les characteres voulus dans D output_high (LCD_E); // Set du Enable pour activer l'envoie delay_us(50); output_low (LCD_E); // Met E au niveau 0 pour prochaine envoie delay_us(130); } void lcd_init() { delay_ms(30); output_low(LCD_RW); output_low(LCD_E); output_low(LCD_RS); lcd_com(function_set); delay_ms(6); lcd_com(function_set); delay_us(150); lcd_com(function_set); delay_us(150); lcd_com(clear_display); delay_ms(3); lcd_com(add_zero_ddram); delay_us(1700); lcd_com(display_ON); delay_us(1700); // lcd_com(0x06); // delay_us(1700); // lcd_com(return_home); // delay_us(1700); } void goto_xy(int8 row,int8 col) { int8 i; switch (row) { case 1: lcd_com(0x02); //cuseur home for(i=1;i<col;i++) { lcd_com(0x14); //move curseur right } break; case 2: lcd_com(0x02); //cuseur home for(i=1;i<(16+col);i++) { lcd_com(0x14); //move curseur right } break; case 3: lcd_com(0x02); //cuseur home for(i=1;i<(32+col);i++) { lcd_com(0x14); //move curseur right } break; case 4: lcd_com(0x02); //cuseur home for(i=1;i<(48+col);i++) { lcd_com(0x14); //move curseur right } break; } } void main() { setup_adc_ports(NO_ANALOGS|VSS_VDD); setup_adc(ADC_OFF); setup_spi(FALSE); setup_wdt(WDT_OFF); setup_timer_0(RTCC_INTERNAL); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_timer_3(T3_DISABLED|T3_DIV_BY_1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); lcd_init(); lcd_com(clear_display); delay_us(1700); while (1) { goto_xy(1,1); lcd_char("1"); goto_xy(1,16); lcd_char("AR"); goto_xy(4,16); lcd_char("3"); goto_xy(4,1); lcd_char("4"); delay_ms(10); output_high (PIN_A0); } }
-----