Je dois donc commander un LCD( dont voici la doc : http://www.spezial.de/doc/cctech/cmc216-01.pdf )
Et j'arrive enfin à afficher quelquechose, cependant je ne comprends pas comment !!
En effet le bit RS est utilisé pour choisir d'envoyer une donnée ou bien une instruction. Et je me suis rendu compte mais même lorsque je ne le gere pas, j'arrive à afficher quelquechose. Donc c'est assez incroyable.
Voici mon prgramme :
Code : Tout sélectionner
while(1)
{
init_aff();
delay(20000000);
lcd_write("pfou");
delay(2000000);
lcd_write("marre");
}
void init_aff(void) /*faire l'init de l'afficheur*/
{
int i=0 ;
delay(20000); //delay de 15 ms
for(i=0;i<3;i++)
{
lcd_data(0x38); // 8 bits, 2 lignes, 5*8 font
delay(20000); //delay de 15ms
}
lcd_data(0x0C) ; // display on et cursor off
delay(5000); //delay de 43us
lcd_data(0x06) ; // set mode to increment
delay(5000);
lcd_data(0x01) ; // clear screen
delay(5000);
lcd_data(0x02) ; // return cursor to home position
delay(20000);
}
void lcd_instru(char infodata) /*transformer une valeur hexa en 8 bits pour DO à D7 */
{
IO0CLR = LCD_RS;
IO0CLR = LCD_RW;
IO0DIR = 0xFEFFB705; // D0 à D7 en sortie
LOCAL_BUS = infodata ; //port D0 à D7 = infodata
enable(6000); // 1 ns = 0.012 donc 250 ns = 3
}
void lcd_write (char *word)
{
char car ;
unsigned char n=0 ;
unsigned char i=0;
while(word[n]!=0)
{
n++; //nombre de caractères de word
}
for(i=0;i<n;i++)// boucle qui dure autant de cycle ke de caractère
{
car = word[i] ; // sélectionne le caractère numéro i de word
lcd_data(car) ;
delay(50);
}
}
void lcd_data(char infodata) /*transformer une valeur hexa en 8 bits pour DO à D7 */
{ IO0SET = LCD_RS;
IO0CLR = LCD_RW;
IO0DIR = 0xFEFFB705; // D0 à D7 en sortie
LOCAL_BUS = infodata ;
enable(6000); // 1 ns = 0.012 donc 250 ns = 3
}
Et donc j'ai remarqué que même en supprimant les lignes qui gèrent RS et RW j'arrivais quand même à envoyer des instructions et à afficher.
C'est donc assez bizarre.
De plus il y'a certaines commandes qui ne marchent pas.
Bref, kkn aurait-il une idée ?
Merci