Powertip PC1604A

OP #3023337
Lesenswert?

Habe folgenden Code geschrieben für PIC18F4550 in C

...Konfigurationen für PIC(alle schon einmal getestet!)

#include "p18f4550.h"
#include "delays.h"

#define LCD_RS   LATBbits.LATB2
#define LCD_EN   LATBbits.LATB3
#define LCD_D4   LATBbits.LATB4
#define LCD_D5   LATBbits.LATB5
#define LCD_D6   LATBbits.LATB6
#define LCD_D7   LATBbits.LATB7

#define LCD_RS_Dir  TRISBbits.TRISB2
#define LCD_EN_Dir  TRISBbits.TRISB3
#define LCD_D4_Dir  TRISBbits.TRISB4
#define LCD_D5_Dir  TRISBbits.TRISB5
#define LCD_D6_Dir  TRISBbits.TRISB6
#define LCD_D7_Dir  TRISBbits.TRISB7

#define Enable Delay10TCYx(1); LCD_EN=1; Delay10TCYx(1); LCD_EN=0; 
Delay10TCYx(1);

void LCD_Init(void);
void LCD_Send(unsigned char chr);
void LCD_DDRAM_Addr(unsigned char addr);
void LCD_CGRAM_Addr(unsigned char addr);
void LCD_Char(unsigned char row, unsigned char column, unsigned char 
text);
void LCD_Text(unsigned char row, unsigned char column, unsigned char 
*text);
void LCD_Gen_Char(unsigned char number, unsigned char *code);


void OSC_Init(void)
{
  OSCCONbits.IRCF2 = 1;
  OSCCONbits.IRCF1 = 1;
  OSCCONbits.IRCF0 = 0;
}

void Ports_Init(void)
{
  LATB = 0x00;
  TRISB = 0x00;        // Alles Ausgänge


}

unsigned char txt[]="Hallo Welt";
unsigned char smilie[] = {0,10,0,4,4,17,14,0};
unsigned char i;

void main (void)
{ int i;

  OSC_Init();
  Ports_Init();
  LCD_Init();

  LCD_Text(1,1,txt);
  LCD_Text(2,1,txt);
  LCD_Text(3,1,txt);
  LCD_Text(4,1,txt);


  LCD_Gen_Char(0, smilie);
  LCD_Char(1,13,0x00);

  while(1);
}

void LCD_Init(void)
{
  LCD_RS_Dir=0;    //Set Pins to Outpur
  LCD_EN_Dir=0;
  LCD_D4_Dir=0;
  LCD_D5_Dir=0;
  LCD_D6_Dir=0;
  LCD_D7_Dir=0;

  Delay10KTCYx(20);  //Delay 40ms

  LCD_RS=0;

  LCD_D7=0;      //Function Set 8-bit
  LCD_D6=0;
  LCD_D5=1;
  LCD_D4=1;
  Enable
  Delay10KTCYx(21);  //Delay ca. 4.2ms

  LCD_D7=0;      //Function Set 8-bit
  LCD_D6=0;
  LCD_D5=1;
  LCD_D4=1;
  Enable
  Delay10TCYx(50);  //Delay ca. 100us

  LCD_D7=0;       //Function Set 8-bit
  LCD_D6=0;
  LCD_D5=1;
  LCD_D4=1;
  Enable
  Delay10TCYx(19);  //Delay ca. 38us

  LCD_D7=0;       //Function Set 4-bit
  LCD_D6=0;
  LCD_D5=1;
  LCD_D4=0;
  Enable
  Delay10TCYx(19);  //Delay ca. 38us

  LCD_D7=0;       //Function Set
  LCD_D6=0;
  LCD_D5=1;
  LCD_D4=0;      //DL=0
  Enable
  LCD_D7=1;       //N = 1
  LCD_D6=0;      //F = 0
  LCD_D5=0;      //x
  LCD_D4=0;      //x
  Enable
  Delay10TCYx(19);  //Delay ca. 38us

  LCD_D7=0;       //Display ON/OFF
  LCD_D6=0;
  LCD_D5=0;
  LCD_D4=0;
  Enable
  LCD_D7=1;
  LCD_D6=1;      //D=1  (D=1:Display ON)
  LCD_D5=0;      //C=0  (C=1:Under-line cursor ON)
  LCD_D4=0;      //B=0  (B=1:Block cursor ON)
  Enable
  Delay10TCYx(19);  //Delay ca. 38us

  LCD_D7=0;       //Clear Display
  LCD_D6=0;
  LCD_D5=0;
  LCD_D4=0;
  Enable
  LCD_D7=0;
  LCD_D6=0;
  LCD_D5=0;
  LCD_D4=1;
  Enable
  Delay100TCYx(80);  //Delay ca. 1.6ms

  LCD_D7=0;       //Entry Mode
  LCD_D6=0;
  LCD_D5=0;
  LCD_D4=0;
  Enable
  LCD_D7=0;
  LCD_D6=1;
  LCD_D5=1;      //ID = 1
  LCD_D4=0;      //S = 0
  Enable
  Delay100TCYx(19);  //Delay ca. 38us

  LCD_DDRAM_Addr(0x00);

}

void LCD_Send(unsigned char chr)
{
  LCD_D7=(chr&0b10000000) ? 1:0;
  LCD_D6=(chr&0b01000000) ? 1:0;
  LCD_D5=(chr&0b00100000) ? 1:0;
  LCD_D4=(chr&0b00010000) ? 1:0;
  Enable
  LCD_D7=(chr&0b00001000) ? 1:0;
  LCD_D6=(chr&0b00000100) ? 1:0;
  LCD_D5=(chr&0b00000010) ? 1:0;
  LCD_D4=chr&0x01;
  Enable
  Delay10TCYx(20);  //Delay ca. 38us
}

void LCD_DDRAM_Addr(unsigned char addr)
{
  LCD_RS=0;
  LCD_Send(addr|0x80);
}

void LCD_CGRAM_Addr(unsigned char addr)
{
  LCD_RS=0;
  LCD_Send((addr&0x3F)|0x40);
}

void LCD_Char(unsigned char row, unsigned char column, unsigned char 
text)
{
  column--;
  if(row==2)
  {
    column=column+0x40;
  }
  if(row==3)
  {
    column=column+0x14;
  }
  if(row==4)
  {
    column=column+0x54;
  }

  LCD_DDRAM_Addr(column);
  LCD_RS=1;
    LCD_Send(text);
}

void LCD_Text(unsigned char row, unsigned char column, unsigned char * 
text)
{
  unsigned char counter;
  LCD_Char(row, column, text[0]);

    for(counter=1; text[counter]; counter++)
  {
      LCD_Send(text[counter]);
    }
}

void LCD_Gen_Char(unsigned char number, unsigned char *code)
{
  unsigned char i;
  LCD_RS=0;
  number=number<<3;
  LCD_CGRAM_Addr(number);
  LCD_RS=1;
  for(i=0;i<8;i++)
  {
    LCD_Send(code[i]);
  }
}


funzt aber nicht habe alle Verbindungen richtig angeschlossen mit 
Spannungsversorgung

Für Kontrastspannung habe ich ein 100k ohm Poti zwischen Plus und Masse 
genommen habe daran rumgedereht aber funzt trotzdem nicht!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren