Devido a uma necessidade de um projeto antigo comecei a desenvolver esse código, mas durante meses ficou esquecido no fundo da gaveta, até que um grande amigo me questionou sobre como fazer uma comunicação LCD a 3 fios, com isso revolvi meu bau e encontrei esse código. Adaptei, mas não cheguei a testá-lo na vida real, porem com pequenos ajustes tenho certeza que funcionará perfeitamente.

Para funcionar no proteus, somente utilizar o arquivo .hex, o .cof não funciona.

Segue também os arquivos junto com um arquivo do proteus para testes.

Usar no Proteus 7.8 ou superior.


Fazer o download: [PIC][MIKROC][PROTEUS] Utilizando LCD com 3 Fios


Não esqueçam de comentar…

[sections] [section title=”Código Fonte”] [codesyntax lang=”c”] /*
DATEK Tecnologia
Exemplo: LCD com shift-register (3 fios)
Data: 14/12/2011

Compilador: MikroC PRO 5.3.0

Bibliotecas utilizadas:
– LCD_Constants;
*/

/* Estrutura para LCD com shift-register */

// CONTROLE DO LCD
sbit SHIFT_DATA at GP0_bit; // PINO DE DADOS
sbit SHIFT_CLK at GP1_bit; // PINO DE CLOCK
sbit SHIFT_STB at GP2_bit; // PINO DE STROBE

unsigned char STATUS_BACK;

sbit Enable_Backlight at STATUS_BACK.B0;

sbit SHIFT_DATA_Direction at TRISIO0_bit; // PINO DE DADOS
sbit SHIFT_CLK_Direction at TRISIO1_bit; // PINO DE CLOCK
sbit SHIFT_STB_Direction at TRISIO2_bit; // PINO DE STROBE
#define LCD_BACKLIGHT 0x80
#define LCD_ENABLE 0x10
#define LCD_RS 0x40
#define LCD_WR 0x20
#define DESLIGA 0
#define LIGA 1
#define ENTRADA 1
#define SAIDA 0
void ESCREVE_LCD_4094(unsigned char Value);
void lcd_cmd (unsigned char cmd);
void lcd_data (unsigned char dat);
void LCD_ESCREVE_STR(unsigned char Row, unsigned char Column, unsigned char* string);
void LCD_4094_INIT();

void main() {
CMCON0 = 7;
ANSEL = 0x00;
Delay_ms(10);
LCD_4094_INIT();
Enable_Backlight = 1;
LCD_ESCREVE_STR(1,1," DATEK TECNOLOGIA ");
LCD_ESCREVE_STR(2,1,"EXEMPLO LCD-SHIFT ");
LCD_ESCREVE_STR(3,1," DATA: 14/12/11 ");
LCD_ESCREVE_STR(4,1," REVISAO 00 ");
while(1);
}

void ESCREVE_LCD_4094(unsigned char Value)
{
unsigned char cont=0;
for(cont=0;cont<8;cont++)
{
SHIFT_DATA = ((Value & 0x80)==0x80);
SHIFT_CLK = DESLIGA;
Delay_us(10);
SHIFT_CLK = LIGA;
Value<<=1;
Delay_us(10);
}
SHIFT_STB = LIGA;
Delay_us(10);
SHIFT_STB = DESLIGA;
}
void lcd_cmd (unsigned char cmd)
{
ESCREVE_LCD_4094(((cmd >> 4) & 0x0F)|LCD_ENABLE|(Enable_Backlight==1?LCD_BACKLIGHT:0));
ESCREVE_LCD_4094(((cmd >> 4) & 0x0F)|(Enable_Backlight==1?LCD_BACKLIGHT:0));

ESCREVE_LCD_4094( (cmd & 0x0F)|LCD_ENABLE|(Enable_Backlight==1?LCD_BACKLIGHT:0));
ESCREVE_LCD_4094( (cmd & 0x0F)|(Enable_Backlight==1?LCD_BACKLIGHT:0));
}

void lcd_data (unsigned char dat)
{
ESCREVE_LCD_4094( (((dat >> 4) & 0x0F)|LCD_ENABLE|LCD_RS)|(Enable_Backlight==1?LCD_BACKLIGHT:0));
ESCREVE_LCD_4094((((dat >> 4) & 0x0F)|LCD_RS)|(Enable_Backlight==1?LCD_BACKLIGHT:0));

ESCREVE_LCD_4094( ((dat & 0x0F)|LCD_ENABLE|LCD_RS)|(Enable_Backlight==1?LCD_BACKLIGHT:0));
ESCREVE_LCD_4094( ((dat & 0x0F)|LCD_RS)|(Enable_Backlight==1?LCD_BACKLIGHT:0));
}
void LCD_ESCREVE_STR(unsigned char Row, unsigned char Column, unsigned char* string)
{
if(Column>1)
Column–;
if(!Row)
Row=1;

switch(Row)
{
case 1:
lcd_cmd(_LCD_FIRST_ROW+Column);
break;
case 2:
lcd_cmd(_LCD_SECOND_ROW+Column);
break;
case 3:
lcd_cmd(_LCD_THIRD_ROW+Column);
break;
case 4:
lcd_cmd(_LCD_FOURTH_ROW+Column);
break;
}
while(*string!=”)
{
lcd_data(*string++);
}
}

void LCD_4094_INIT()
{
// CONFIGURAÇÃO DOS PORTS
SHIFT_DATA_Direction = SAIDA; // PINO DE DADOS
SHIFT_CLK_Direction = SAIDA; // PINO DE CLOCK
SHIFT_STB_Direction = SAIDA; // PINO DE STROBE
lcd_cmd(0x03);
lcd_cmd(0x03);
lcd_cmd(0x03);
lcd_cmd(0x02);
lcd_cmd(0x28); // 4-bit mode – 2 line – 5×7 font.
lcd_cmd(0x0C); // Display no cursor – no blink.
lcd_cmd(0x06); // Automatic Increment – No Display shift.
lcd_cmd(0x80); // Address DDRAM with 0 offset 80h.
}
/* [fim] Estrutura para LCD com shift-register */
[/codesyntax] [/section] [section title=”Esquema Elétrico”]

Preview [PIC][MIKROC][PROTEUS] Utilizando LCD com 3 Fios
Preview [PIC][MIKROC][PROTEUS] Utilizando LCD com 3 Fios
[/section] [/sections]
Obrigado e até o próximo post.

DATEK Tecnologia Eletrônica
[PIC] Utilizando LCD com 3 Fios
Tags:                 

Deixe uma resposta

%d blogueiros gostam disto: