ACCUEIL  ACTUALITES  FORUMS  WIKI  TELECHARGEMENTS  LIENS
Menu principal
ATMEL AVR
PCB - CAO
ELECTRONIQUE
Qui est en ligne
5 utilisateur(s) en ligne

Membre(s): 0
Invité(s): 5

plus...
Infos du site
JELECTRONIQUE - CodeVision, LCD

[Utiliser un afficheur LCD]
[CodeVision]

Introduction

Je ne vais pas vous faire un tuto sur l’utilisation d’un afficheur LCD intéligent, vous en trouverez des tonnes en cherchant un peu sur google.
Par contre comment s’en servir en deux coups de cueillere à pot avec CodeVision c’est déjà plus intéressant.

CodeWizardAVR

Il permet de générer automatiquement une partie du code nécessaire à la gestion de l'afficheur.
Tools->CodeWizardAVR->LCD

1. Choisir Le port sur lequel l'afficheur sera connecté.
2. Choisir le nombre de caractères par ligne (LCD 2x16 =>16)
3. Le cablage qui doit être réalisé.

File -> Generate, Save and Exit

Le code qui est alors automatiquement généré :

#include <90s8535.h>


// Alphanumeric LCD Module functions

#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

// Declare your global variables here


void main(void)
{

// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;

DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;

DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;

TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;

TCCR2=0x00;
TCNT2=0x00;

OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off

GIMSK=0x00;
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off
ACSR=0x80;

// LCD module initialization
lcd_init(16);

while (1)
      {

      // Place your code here

      };
}

Schema

Brochage

Broche N° Nom Niveau Fonction
1 Vss 0V Alimentation
2 Vcc 5V Alimentation
3 V0 0 à 5V Contraste
4 RS H/L 0 = instruction 1 = caractère
5 R/W H/L 0 = écriture 1 = lecture
6 E H --> L Enable (front descendant)
7 D0 H/L Donnée LSB
8 D1 H/L Donnée
9 D2 D2 H/L Donnée
10 D3 H/L Donnée
11 D4 H/L Donnée
12 D5 H/L Donnée
13 D6 H/L Donnée
14 D7 H/L Donnée MSB
15 A 0 à 5V Anode - LED de rétro éclairage
16 K 0V Cathode - LED de rétro éclairage
Les fonctions

Fonction de niveau bas:

void _lcd_ready(void)

Attend que le LCD soit prêt à recevoir une commande.
Cette fonction doit être appelée avant l’envoi d’une commande au LCD avec la fonction _lcd_write_data.

void _lcd_write_data(unsigned char data)

Envoi une commande au LCD. Cette fonction peut être utilisée pour modifier la configuration du LCD.
EX:

/* Active l’affichage du curseur */
_lcd_ready();

_lcd_write_data(0xe);

La commande 0xe ou 1110b correspond à une commande Display on/off control avec D=1 (display on) C=1 (cursor on) B=0 (blink off)

ADDRESSES INSTRUCTION RS R/W D7 D6 D5 D4 D3 D2 D1 D0
Display clear 0 0 0 0 0 0 0 0 0 1
Cursor home 0 0 0 0 0 0 0 0 1 *
Entry mode set 0 0 0 0 0 0 0 1 I/D S
Display on/off control 0 0 0 0 0 0 1 D C B
Cursor display shift 0 0 0 0 0 1 S/C R/L * *
Function set 0 0 0 0 1 DL 1 0 * *
CG RAM address set 0 0 0 1 ACC
DD RAM address set 0 0 1 ADD
Busy flag/address read 0 1 BF AC
CG RAM/DD RAM data write 1 0 Write data
CG RAM/DD RAM data read 1 1 Read data

* = le niveau importe, donc la valeur du bit n'est pas prise en compte
ACC = adresse de la CG RAM
ADD = adresse de la DD RAM, correspond à l'adresse courante du curseur
AC = Address Counter, utilisé pour les adresses des DD et CG RAM
I/D = 1/0 : increment/decrement
S/C = 1/0 : display shift/cursor move
S = 1/0 : display shift/freeze
R/L = 1/0 : right/left shift
D = 1/0 : display on/off
DL = 1/0 : 8/4 bits data bus
C = 1/0 : cursor on/off
BF = 1/0 : during/end of internal operation
B = 1/0 : character at cursor position blinks/does not blinks

void lcd_write_byte(unsigned char addr, unsigned char data);

Ecrit un octet dans le générateur de caractère du LCD ou dans la RAM d’affichage.
EX:

#include <90s8535.h>

/*L'afficheur LCD est connecté au port C*/

#asm
   .equ __lcd_port=0x15 ;PORTC

#endasm 
#include <lcd.h>

typedef unsigned char byte;

/* La caractère qu'on veut créer (une flèche)*/
flash byte char0[8]={

0b0000000,
0b0001111,
0b0000011,

0b0000101,
0b0001001,
0b0010000,

0b0100000,

0b1000000};

/* La fonction utilisée pour définir le caractère */
void define_char(byte flash *pc,byte char_code)
{

byte i,a;

a=(char_code<<3) | 0x40;
for (i=0; i<8; i++) lcd_write_byte(a++,*pc++);
}

void main(void)
{
/* Initialisation de l'afficheur LCD 2 lignes 16 colonnes */
lcd_init(16);

/* Définit le caractère */

define_char(char0,0);

/* Affiche à partir de la ligne 0 et de la colonne 0
la chaîne de caractère */
lcd_gotoxy(0,0);

lcd_putsf("Caractere 0:");

/* Affiche le caractère */
lcd_putchar(0);

while (1); /* Boucle sans fin */

}

Fonction de niveau haut:

unsigned char lcd_read_byte(unsigned char addr);

Lit un octet dans le générateur de caractère du LCD ou dans la RAM d’affichage.

unsigned char lcd_init(unsigned char lcd_columns)

Initialise le LCD, efface l’afficheur et met le pointeur d’affichage sur la 1ere ligne et la 1ere colonne. Le nombre de colonnes doit être spécifié. Le curseur n’est pas affiché.
Cette fonction retourne 1 si le LCD est détecté et 0 si ce n’est pas le cas.
C’est la première fonction qui doit être appelée avant les autres fonctions de niveau haut.

void lcd_clear(void)

Efface l’afficheur et met le pointeur d’affichage sur la 1ere ligne et la 1ere colonne.

void lcd_gotoxy(unsigned char x, unsigned char y)

Déplace le pointeur d’affichage à la colonne x et la ligne y. La numérotation des lignes et des colonnes commence à 0.

void lcd_putchar(char c)

Affiche le caractère c à la position du pointeur d’affichage.

void lcd_puts(char *str)

Affiche la chaîne de caractère contenue dans la SRAM. A utiliser pour l'affichage de variables.
Pour afficher un entier ou un flottant, il doit être préalablement convertit en chaîne de caractère.
Pour ceci, utiliser les fonctions de conversion de la librairie stdlib.h comme floa pour la conversion de flottants ou itoa pour un entier.
EX:

ftoa (variable_float, 3, variable_str);  // Convertir la variable en une chaîne de caractères avec 3 décimales


lcd_puts(variable_str);         	// Affichage de la variable

void lcd_putsf(char flash *str)

Affiche la chaîne de caractère contenue dans la FLASH.

#include <90s8535.h>
#asm

   .equ __lcd_port=0x15 ;PORTC

#endasm 
#include <lcd.h>

void main(void)
{

lcd_init(16);

lcd_putsf("Jelectronique");

while (1); 

}