/************************************************************
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 <AT898252.h>
#include <ctype.h>
#include <stdio.h>
/*********************************************************/
/*** 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ção para autenticar comandos
no LCD
void autentica(void){
LCDEN=0;
delayms(1);
LCDEN=1;
}
/*******************************************************************/
/*********************************************************/
//Função que escreve um 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 que escreve um caracter
customizado
void LCD_Esc_Custom(char cod[7],int end,int
lin,int col){
int i; //Variável de índice
//Variável contendo os endereços
da CGRAM
char endereco[6];
endereco[0]=64;
endereco[1]=72;
endereco[2]=80;
endereco[3]=88;
endereco[4]=96;
endereco[5]=104;
endereco[6]=112;
//Definindo um caracter customizado
LCDRS=0; //prepara o LCD para receber instruções
LCDRW=0;
LCDDados=endereco[end]; //Carrega endereco
da CGRAM
autentica();
LCDRS=1; //prepara para escrever dados na
CGRAM
i=0; //Zera veriável de índice
for (i=0;i<=7;i++){
LCDDados=cod[i];
autentica();
}
//Escrevendo dados na DDRAM
LCDXY(lin,col); //Linha 1 coluna 0
LCDRS=1;
LCDRW=0;
LCDDados=end;
autentica();
}
|