/************************************************************ Arquivo:lcdlib.c Autor:Fred Cox Junior Data:02/02/2003 Descrição:biblioteca de funções para display LCD baseado no controlador HD44780 (linguagem C para 8051) *************************************************************/ /**********************************************************/ /*Colocar aqui os includes*/ #include #include #include /*********************************************************/ /*** Definição de pinos de controle do LCD ***/ #define LCDEN P3_6 //Pino que habilita o LCD //LCDEN=1 Display habilitado //LCDEN=0 Display Desabilitado #define LCDRW P3_7 //Pino de leitura e escrita do LCD //LCDRW=1 Leitura no LCD //LCDRW=0 Escrita no LCD #define LCDRS P3_2 //Pino do registrador de Instrução/Dados //LCDRS=1 Seleciona registrador de instrução //LCDRS=0 Seleciona registrador de Dados #define LCDDados P2 //Barramento de dados do LCD /*************************************************************/ /************* Declaração de Funções *************/ void LCDClear(void); void delayms(int ms); void autentica(void); void init_display(void); void LCDCursorOff(void); void LCDCursorOn(void); void LCDEscreve(char *texto); void LCDXY(int X,int Y); void Fonte5x10(void); /******* Funções *******************************/ //Função que seleciona matriz de 5x10 void Fonte5x10(void){ LCDDados=0x3C; //Seleciona: // Fonte de 5x10 dots pixels // Barramento de 8 bis // 2 linhas autentica(); } /*********************************************************/ //Função que escreve uma ponteiro de caracteres no display void LCDEscreve(char *texto){ unsigned int i; //Variável local utilizada como indice LCDRS=1; //Seleciona registrador de dados LCDRW=0; //Seleciona escrita no LCD i=0; //Zera variável de índice while(texto[i]!=0x00){ LCDDados=texto[i]; autentica(); //Escreve no display i++; } } /*********************************************************/ //desliga o cursor void LCDCursorOff(void){ LCDRS=0; LCDRW=0; LCDDados=0x0C; //Liga: //O cursor //o Display autentica(); } /*********************************************************/ //liga o cursor void LCDCursorOn(void){ LCDRS=0; LCDRW=0; LCDDados=0x0F; //Liga: //O cursor //o Display autentica(); } /*************************************************************/ //Função para posicionar o cursor X=linha Y=Coluna void LCDXY(int X,int Y){ LCDRS=0; LCDRW=0; //Verificando a linha correspondente if (X==1){ LCDDados=0x80; //Linha 0 coluna 0 autentica(); } if (X==2){ LCDDados=0xC0; //Linha 0 coluna 0 autentica(); } //Escrevendo na coluna LCDDados=LCDDados+Y; //Soma o valor da linha com a coluna autentica(); } //Função para inicializar o LCD void init_display(void){ //Apagando o display delayms(1); delayms(1); LCDRS=0; //Seleciona registrador de instrução LCDRW=0; //Seleciona modo de escrita LCDDados=0x01; //Carrega comando para apagar autentica(); // Autentica comando //Fazendo seleção de função LCDDados=0x38; //Seleciona: // Fonte de 5x7 dots pixels // Barramento de 8 bis // 2 linhas autentica(); //Controlando display on/off LCDDados=0x0F; //Liga: //O cursor //o Display autentica(); //Controlando o modo de entrada de dados LCDDados=0x06; autentica(); LCDDados=0x01; //Carrega comando para apagar autentica(); // Autentica comando LCDDados=0x80; //Linha 0 coluna 0 autentica(); } /*********************************************************/ //Função que atrasa o processamento em millisegundos void delayms(int ms){ unsigned int tms=0; //Variável local de índice TMOD=0X01; //Timer0 no modo 1 while(tms<=ms){ TH0=0xFC; TL0=0x17; TR0=1; //Liga o timer while(!TF0){} //Fica esperando overflow TR0=0; TF0=0; tms++; } } //Função que Apaga o display void LCDClear(void){ delayms(1); delayms(1); LCDRS=0; //Seleciona registrador de instrução LCDRW=0; //Seleciona modo de escrita LCDDados=0x01; //Carrega comando para apagar autentica(); // Autentica comando LCDDados=0x80; //Linha 0 coluna 0 autentica(); } /*********************************************************/ //Função para autenticar comandos no LCD void autentica(void){ LCDEN=0; delayms(1); LCDEN=1; } /*******************************************************************/