Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
php
/
Sources
:
afiicheur_LCD._c
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
#define IRWRIN *(unsigned char volatile*)(_IO_BASE+0x60) #define DR_WRITIN *(unsigned char volatile*)(_IO_BASE+0x61) #define right 1 #define left 0 #define LIGNE_1 0x80 // position de la ligne 1 #define LIGNE_2 0xC0 // position de la ligne 2 #define LIGNE_3 0x94 // position de la ligne 3 #define LIGNE_4 0xD4 // position de la ligne 4 // I/O Port Addresses #define _LCD_BASE 0x4000 #define LCDcmmd *(unsigned char volatile *)(_LCD_BASE + 0x00) #define LCDdata *(unsigned char volatile *)(_LCD_BASE + 0x01) void InitLCD() #define LCD_CMD *(unsigned char *)(_IO_BASE + 0xA5F0) #define LCD_DAT *(unsigned char *)(_IO_BASE + 0xA5F1) #define AUX_A *(unsigned char *)(_IO_BASE + 0xA5F4) #define AUX_C *(unsigned char *)(_IO_BASE + 0xA5F6) #define AUX_CON *(unsigned char *)(_IO_BASE + 0xA5F7) /* * Commands that can be sent to the LCD */ #define LCD_CLEAR 0x01 #define LCD_HOME 0x02 #define LCD_ENTRY_MODE 0x04 #define LCD_ENTRY_CURSOR_RIGHT 0x02 #define LCD_ENTRY_DISPLAY_SCROLL 0x01 #define LCD_CTRL_ON 0x0C #define LCD_CTRL_CURSOR 0x0A #define LCD_CTRL_BLINK 0x09 #define LCD_SCROLL_CURSOR 0x10 #define LCD_SCROLL_DISPLAY 0x18 #define LCD_SCROLL_RIGHT 0x04 #define LCD_SCROLL_LEFT 0x00 /* for completeness */ #define LCD_FCN_8BIT 0x30 #define LCD_FCN_4BIT 0x20 #define LCD_FCN_DUTY 0x08 #define LCD_FCN_BIG 0x04 #define LCD_CHAR_ADDR 0x40 #define LCD_CHAR_MASK 0x3F #define LCD_DISP_ADDR 0x80 #define LCD_DISP_MASK 0x7F #define LCD_16X1 0 #define LCD_16X2 1 #define LCD_20X1 2 #define LCD_20X2 3 #define LCD_20X4 4 #define LCD_40X2 5 // Passage en mode 4 bits $20 // 8 bits // Effacement $01 // Retour au d�but de ligne $02 // Pas de curseur $0C // Curseur se d�place vers la droite $06 // Passage en ligne suivante $C0 // Retour en premi�re ligne $80 // Curseur clignotant 0F void lcd_initialise(void); //void rtn_home(void); //void lcd_on(void); //void lcd_off(void); //void lcd_shift(char nb_sh); //void lcdwait(int cnt); //void status(void); //void lcd_cls(void); //void curs_on(void); //void curs_off(void); //char getkey(void); void lcd_initialise(void) { IRWRIN=0x38; /* mode 8 bits */ lcd_tempo(3); IRWRIN=0x06; /* mode */ lcd_efface(); /* efface tout l'afficheur */ retour_chariot(); } void retour_chariot(void) { status(); IRWRIN=0x02; } void lcd_on(void) { status(); IRWRIN=0x0C; /* disp on */ } void lcd_off(void) { status(); IRWRIN=0xB; /* disp off */ } void curseur_ON(void) { status(); IRWRIN=0x0F; } void curseur_off(void) { status(); IRWRIN=0x0C; } void lcd_shift(char nbsh) { lcdwait(10); if (nb_sh) { status(); IRWRIN=0x18; /* shift � gauche */ } else { status(); IRWRIN=0x1F; /* shift � droite */ } } void status(void) /* attend que l'afficheur soit pret � recevoir une commande */ { while ((IRWRIN & 0x80)==0x80); /* attente busy */ return; } void lcd_efface(void) /* effacement de l'afficheur */ { status(); IRWRIN=1; } void lcd_tempo(int cnt) { int i; for(;cnt;cnt--) for(i=0;i<1000;i++); } ////////////////////////////////////////////////////////////////////// void main(void) { // Initialize the LCD LCD_Commande(0x3C); // initialize command LCD_Commande(0x0C); // display on, cursor off LCD_Commande(0x06); LCD_Commande(0x01); // Display Header Information on LCD LCD_Command(LINE_1); // goto lcd line 1 LCDprint("Keypad Test"); LCD_Command(LINE_2); // goto lcd line 2 LCDprint("Press Keys"); LCD_Command(LINE_3); // goto lcd line 3 // main loop .. endless for( ; ;){ if(kbhit()){ // if new key pressed cprint(NewKey); // display it } } } /**************************************************************************/ /* Initialisation de l'afficheur */ /**************************************************************************/ void LCD_initialise(void) { LCD_Commande (0x38) ; // modes 8 bits + 2 lignes // LCD_Commande (0x30) ; // modes 8 bits + 1 lignes LCD_Commande(0x0C); // display on, cursor off LCD_Commande (0x14) ; LCD_Commande (0x0e) ; LCD_Commande (0x06) ; LCD_Commande (0x01) ; // efface tout l'�cran } /************************************************************/ /* Envoi d'une commande � l'afficheur */ /************************************************************/ void LCD_Commande(unsigned char cval) { LCD_busy(); LCD_CMD = cval; } /************************************************************/ /* Attend que l'afficheur rende la main */ /************************************************************/ void LCD_busy() { while ((LCD_CMD & 0x80) != 0x00) ; // on peut �crire aussi (LCD_CMD & 0x80) == 0x80); } /************************************************************/ /* Affiche une cha�ne de caract�re */ /************************************************************/ void affiche_chaine(char *sptr) { while( *sptr ) { affiche_caractere(*sptr); ++sptr; } } /************************************************************/ /* Affiche un caract�re */ /************************************************************/ void affiche_caractere(char dval) { LCD_busy(); LCD_DAT = dval; } /********************************************************************************/ /* Commande d'effacement de l'afficheur (curseur au d�but de la ligne 1) */ /********************************************************************************/ void efface_LCD(void) { LCD_Commande(0x01); } /********************************************************************************/ /* Commande de d�calage du curseur � gauche */ /********************************************************************************/ void DECALE_GAUCHE(unsigned char Nbr_de_decalage) { do { AFFICHEC (0x10) ; Nbr_de_decalage -- ; } while (Nbr_de_decalage > 0) ; } /********************************************************************************/ /* Commande de d�calage du curseur � droite */ /********************************************************************************/ void DECALE_DROITE(unsigned char Nbr_de_decalage) { do { AFFICHEC (0x14) ; Nbr_de_decalage -- ; } while (Nbr_de_decalage > 0) ; } /********************************************************************************/ /* Affichage d'une chaine de caract�re � la position actuelle du curseur */ /********************************************************************************/ void CHAINE(unsigned char *chaine_de_caractere) { unsigned char nbr = 0, valeur_a_afficher ; while (chaine_de_caractere[nbr] != 0x00) { AFFICHED (chaine_de_caractere[nbr]) ; nbr ++ ; } } /********************************************************************************/ /* Positionnement du curseur */ /********************************************************************************/ void gotoxy(unsigned char x, unsigned char y) { x -- ; y -- ; AFFICHEC (0x80 + x + (y * 0x40)) ; } /********************************************************************************/ /* Active le curseur */ /********************************************************************************/ void curseur_ON(void) { LCD_Commande(0x0F); } /********************************************************************************/ /* Cache le curseur */ /********************************************************************************/ void curseur_OFF(void) { LCD_Commande(0x0C); }