Autor Tópico: LCD DISPLAY - Protheus  (Lida 6134 vezes)

Description:

0 Membros e 1 Visitante estão vendo este tópico.

Offline Paulo_lumens

  • Hobby
  • ****
  • Posts: 269
  • Sexo: Masculino
  • GUIA CNC
  • Cidade - UF: Charqueada-SP
Re:LCD DISPLAY - Protheus
« Resposta #15 Online: 11 de Setembro de 2014, 14:38 »
Não acho que isto realmente importe. Mas, Mohini dasi é um nome religioso. Não, não sou fake.

pense bem se eu me cadastra-se como "pedra iluminada" e me apresenta-se como "João Luz das latas" sendo nenhum destes meu nome verdadeiro ficaria estranho. mas realmente isso não importa se puder trazer alguma contribuição ao grupo.
ps: seja bem vinda!!!ou bem vindo!!! nossa to meio perdido agora!

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:LCD DISPLAY - Protheus
« Resposta #16 Online: 11 de Setembro de 2014, 15:00 »
Ananda,

Ou seja lá qual for o seu nome....

Não acho que isto realmente importe. Mas, Mohini dasi é um nome religioso. Não, não sou fake.

Nada contra você usar nomes religiosos ou quaisquer outros nomes de sua preferência. Mas a turma daqui tem como costume:

(1) Usar o próprio nome ou parte do nome como "nickname" e informar o nome.
(2) Cadastar um "nickname" fantasia e informar o nome.
(3) Quem entra para este fórum, primeiramente se identifica e se apresenta.

São algumas "regrinhas saudáveis" deste fórum, que não fazem mal e ajudam a manter as coisas mais organizadas.

Não estou dizendo que seja o seu caso!!  Mas, em passado recente tivemos pessoas que faziam se passar por outras e até homem se fazendo passar por mulher para bagunçar o fórum e/ou ganhar maior atenção, tendo em vista que a maioria aqui são homens.
« Última modificação: 11 de Setembro de 2014, 15:04 por minilathe »

Offline Paulo_lumens

  • Hobby
  • ****
  • Posts: 269
  • Sexo: Masculino
  • GUIA CNC
  • Cidade - UF: Charqueada-SP
Re:LCD DISPLAY - Protheus
« Resposta #17 Online: 11 de Setembro de 2014, 15:20 »
vai aqui uma tela do proteus


Código: [Selecionar]
/* Código de exemplo de Leitura de temperatura com LM35 e PIC16F877A. Com *
 * apresentação em display LCD e porta serial. Compilado com o PICC-CCS   *
 * Autor: Nelson Camilo de Almeida                                        *
 * [url=http://www.pictronics.com.br]www.pictronics.com.br[/url]                                                  *
 * Data 28/03/2011                                                        */
#include <16F877A.h>
#device adc = 10  // Configura ADC para 10 Bits

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected

#use delay(clock = 4000000) // Configura clock do PIC
// Configura comunicação serial para 9600,8,N,1
#use rs232(baud = 9600, parity = N, xmit = PIN_C6, rcv = PIN_C7, bits = 8)
//#include "main_LM35+PIC.h"  // Biblioteca de configuração
#include "mod_lcd.c"        // Biblioteca para LCD

void main()
{
   int16 valor_anal, valor_temp; // Variáveis do programa
   
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);

   set_adc_channel(0); // Canal  do ADC
   
   lcd_ini();                          // inicializa o display
   lcd_escreve ("\f TempPictronics");  // Nome do Projeto no LCD
   printf ("TempPictronics\r");        // Nome do Projeto na Serial
   
   while (true)
   {
      valor_anal = read_adc();   // Lê o LM35
      valor_temp = 5.0 * valor_anal * 100.0 / 1023.0; // Converte em graus celsius
      lcd_pos_xy (1, 2);         // Posiciona o cursor no display
      // Escreve no display a Temperatura lida pelo ADC
      printf (lcd_escreve, "Temp: %2.1f%cC", (float)valor_temp, 0b11011111);
      // Envia para a porta serial a Temperatura lida do LM35
      printf("%2.1f\r", (float)valor_temp);
      delay_ms (500);   // Dá um tempinho
   }
}

Código: [Selecionar]
/************************************************************************/
/*  MOD_LCD.C - Biblioteca de manipulação de módulo LCD                 */
/*                                                                      */
/*  Autor: Fábio Pereira                                                */
/*                                                                      */
/************************************************************************/

// As definições a seguir são utilizadas para acesso aos pinos do display
// caso o pino RW não seja utilizado, comente a definição lcd_rw
#ifndef lcd_enable
   #define lcd_enable     pin_e1      // pino enable do LCD
   #define lcd_rs         pin_e0      // pino rs do LCD
   //#define lcd_rw      pin_e2      // pino rw do LCD
   #define lcd_d4         pin_d4      // pino de dados d4 do LCD
   #define lcd_d5         pin_d5      // pino de dados d5 do LCD
   #define lcd_d6         pin_d6      // pino de dados d6 do LCD
   #define lcd_d7         pin_d7      // pino de dados d7 do LCD
#endif

#define lcd_type 2           // 0=5x7, 1=5x10, 2=2 linhas
#define lcd_seg_lin 0x40    // Endereço da segunda linha na RAM do LCD

// a constante abaixo define a seqüência de inicialização do módulo LCD
byte CONST INI_LCD[4] = {0x20 | (lcd_type << 2), 0xf, 1, 6};

byte lcd_le_byte()
// lê um byte do LCD (somente com pino RW)
{
   byte dado;
   // configura os pinos de dados como entradas
   input(lcd_d4);
   input(lcd_d5);
   input(lcd_d6);
   input(lcd_d7);
   // se o pino rw for utilizado, coloca em 1
   #ifdef lcd_rw
      output_high(lcd_rw);
   #endif
   output_high(lcd_enable); // habilita display
   dado = 0;   // zera a variável de leitura
   // lê os quatro bits mais significativos
   if (input(lcd_d7)) bit_set(dado,7);
   if (input(lcd_d6)) bit_set(dado,6);
   if (input(lcd_d5)) bit_set(dado,5);
   if (input(lcd_d4)) bit_set(dado,4);
   // dá um pulso na linha enable
   output_low(lcd_enable);
   output_high(lcd_enable);
   // lê os quatro bits menos significativos
   if (input(lcd_d7)) bit_set(dado,3);
   if (input(lcd_d6)) bit_set(dado,2);
   if (input(lcd_d5)) bit_set(dado,1);
   if (input(lcd_d4)) bit_set(dado,0);
   output_low(lcd_enable);   // desabilita o display
   return dado;   // retorna o byte lido
}

void lcd_envia_nibble( byte dado )
// envia um dado de quatro bits para o display
{
   // coloca os quatro bits nas saidas
   output_bit(lcd_d4,bit_test(dado,0));
   output_bit(lcd_d5,bit_test(dado,1));
   output_bit(lcd_d6,bit_test(dado,2));
   output_bit(lcd_d7,bit_test(dado,3));
   // dá um pulso na linha enable
   output_high(lcd_enable);
   output_low(lcd_enable);
}


void lcd_envia_byte( boolean endereco, byte dado )
{
   // coloca a linha rs em 0
   output_low(lcd_rs);
   // aguarda o display ficar desocupado
   //while ( bit_test(lcd_le_byte(),7) ) ;
   // configura a linha rs dependendo do modo selecionado
   output_bit(lcd_rs,endereco);
   delay_us(100);   // aguarda 100 us
   // caso a linha rw esteja definida, coloca em 0
   #ifdef lcd_rw
      output_low(lcd_rw);
   #endif
   // desativa linha enable
   output_low(lcd_enable);
   // envia a primeira parte do byte
   lcd_envia_nibble(dado >> 4);
   // envia a segunda parte do byte
   lcd_envia_nibble(dado & 0x0f);
}


void lcd_ini()
// rotina de inicialização do display
{
   byte conta;
   output_low(lcd_d4);
   output_low(lcd_d5);
   output_low(lcd_d6);
   output_low(lcd_d7);
   output_low(lcd_rs);
   #ifdef lcd_rw
      output_high(lcd_rw);
   #endif
   output_low(lcd_enable);
   delay_ms(15);
   // envia uma seqüência de 3 vezes 0x03
   // e depois 0x02 para configurar o módulo
   // para modo de 4 bits
   for(conta=1;conta<=3;++conta)
   {
      lcd_envia_nibble(3);
      delay_ms(5);
   }
   lcd_envia_nibble(2);
   // envia string de inicialização do display
   for(conta=0;conta<=3;++conta) lcd_envia_byte(0,INI_LCD[conta]);
}

void lcd_pos_xy( byte x, byte y)
{
   byte endereco;
   if(y!=1)
      endereco = lcd_seg_lin;
   else
      endereco = 0;
   endereco += x-1;
   lcd_envia_byte(0,0x80|endereco);
}

void lcd_escreve( char c)
// envia caractere para o display
{
   switch (c)
   {
     case '\f'    :   lcd_envia_byte(0,1);
              delay_ms(2);
            break;
     case '\n'   :
     case '\r'    :   lcd_pos_xy(1,2);
              break;
     case '\b'    :   lcd_envia_byte(0,0x10);
              break;
     default   :   lcd_envia_byte(1,c);
              break;
   }
}

char lcd_le( byte x, byte y)
// le caractere do display
{
   char valor;
   // seleciona a posição do caractere
   lcd_pos_xy(x,y);
   // ativa rs
   output_high(lcd_rs);
   // lê o caractere
   valor = lcd_le_byte();
   // desativa rs
   output_low(lcd_rs);
   // retorna o valor do caractere
   return valor;
}

espero que ajude!!!

Offline Ananda

  • Novato
  • *
  • Posts: 7
  • Sexo: Feminino
  • GUIA CNC
  • Cidade - UF: SP
  • Nome:: Ananda Mohini Dasi
  • Profissão: Estudante de Eletrônica Industrial
Re:LCD DISPLAY - Protheus
« Resposta #18 Online: 13 de Setembro de 2014, 15:53 »
Ananda,

Ou seja lá qual for o seu nome....

Não acho que isto realmente importe. Mas, Mohini dasi é um nome religioso. Não, não sou fake.

Nada contra você usar nomes religiosos ou quaisquer outros nomes de sua preferência. Mas a turma daqui tem como costume:

(1) Usar o próprio nome ou parte do nome como "nickname" e informar o nome.
(2) Cadastar um "nickname" fantasia e informar o nome.
(3) Quem entra para este fórum, primeiramente se identifica e se apresenta.

São algumas "regrinhas saudáveis" deste fórum, que não fazem mal e ajudam a manter as coisas mais organizadas.

Não estou dizendo que seja o seu caso!!  Mas, em passado recente tivemos pessoas que faziam se passar por outras e até homem se fazendo passar por mulher para bagunçar o fórum e/ou ganhar maior atenção, tendo em vista que a maioria aqui são homens.

Entendo... Em fim, se serve de conforto, meu primeiro nome é Ananda mesmo, então acho que está tudo bem. Bom, não pretendo fazer bagunça, só trocar informações da nossa área mesmo!
 
Paulo Lumens, agradeço vou dar uma olhada mais atenta no esquema e na prog que você mandou, muito obrigada!

 

/** * */