terça-feira, 2 de outubro de 2012

Programa para LCD


 #include <REGX52.H>

#define LCD_data P2
#define LCD_rs P1_0
#define LCD_rw P1_1
#define LCD_en P1_2


void LCD_busy(void);
void LCD_poweron(void);
void LCD_command(unsigned char var);
void LCD_senddata(unsigned char var);
void LCD_sendstring(unsigned char *var);
void LCD_init(void);

void main(void)
{
        unsigned char msg[] ="Escola America";
        LCD_poweron();    // tempo de 15ms
                LCD_init();
                LCD_command (0x80);     // Seta endereço de comando no CGRAM do LCD
       LCD_sendstring(msg);
                while(1);
}

void LCD_busy()
{
    unsigned char i,j;
        for(i=0;i<50;i++)
                for(j=0;j<255;j++); //tempos para escrever no display
}
void LCD_poweron()
{
unsigned int i;
for (i=0;i<22500; i++); //tempo  que define velocidade da mensagem
}
void LCD_command(unsigned char var)
{
     LCD_data  = var;      //Function set: define par o lcd duas linhas, 8-bit, e tamanho do caracter 5x8 dots
     LCD_rs   = 0;        //Seleta comando RS comand register
     LCD_rw   = 0;        //instruçao de registro de leitura e escrita
     LCD_en   = 1;        //habilita em 1 desabilita em 0 Enable H->L
     LCD_en   = 0;
     LCD_busy();          //espera o lcd  processar suas informaçoes
}

void LCD_sendstring(unsigned char *var)
{
     while(*var)              //espera fim da string - till string ends
       LCD_senddata(*var++);  //envia os caracteres uma vez - send characters one by one
}

void LCD_senddata(unsigned char var)
{
     P2  = var;      //Coloca os dados 0 a7 na P2 - Function set: 2 Line, 8-bit, 5x7 dots
     LCD_rs   = 1;        //Seleciona o registro de dados - Selected data register
     LCD_rw   = 0;        //Seleciona LCD para escrever - We are writing
     LCD_en   = 1;        //habilita LCD - Enable H->L
     LCD_en   = 0;
     LCD_busy();          //Espera o lcd processar seus dados - Wait for LCD to process the command
}

void LCD_init(void)
{
     LCD_data = 0x38;     //Function set: 2 Line, 8-bit, 5x8 dots
     LCD_rs   = 0;        //Selected command register
     LCD_rw   = 0;        //We are writing in data register
     LCD_en   = 1;        //Enable H->L
     LCD_en   = 0;
     LCD_busy();          //Wait for LCD to process the command
     LCD_data  = 0x0F;     //Display ligado e cursor piscando - Display on, Curson blinking command
     LCD_rs   = 0;        //Selected command register
     LCD_rw   = 0;        //We are writing in data register
     LCD_en   = 1;        //Enable H->L
     LCD_en   = 0;
     LCD_busy();          //Wait for LCD to process the command
     LCD_data  = 0x01;     //limpa lcd - Clear LCD
     LCD_rs   = 0;        //Selected command register
     LCD_rw   = 0;        //We are writing in data register
     LCD_en   = 1;        //Enable H->L
     LCD_en   = 0;
     LCD_busy();          //Wait for LCD to process the command
     LCD_data  = 0x06;     //Entra no modo deslocamento dos caracterres - Entry mode, auto increment with no shift
     LCD_rs   = 0;        //Selected command register
     LCD_rw   = 0;        //We are writing in data register
     LCD_en   = 1;        //Enable H->L
         LCD_en   = 0;        //Enable H->L
     LCD_busy();
}

Nenhum comentário:

Postar um comentário