si miras mandamos los datos negados , ya que la salida del bufer los
niega otra vez.
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "IOPort"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
TLCD *LCD;
TLCD::TLCD(void)
{
}
//---------------------------------------------------------------------------
void TLCD::inicializacion(void)
{
instruccion(0xcf);
Sleep(20);
instruccion(0xcf);
Sleep(20);
instruccion(0xcf);
Sleep(20);
instruccion(0xc7);
Sleep(20);
instruccion(0xf7);
Sleep(20);
instruccion(0xfe); //clear
Sleep(20);
instruccion(0xf8);
Sleep(20);
instruccion(0xfd);
Sleep(20);
}
//---------------------------------------------------------------------------
void TLCD::instruccion(BYTE dato)
{
Form1->IOPort1->PortByte[0x37A]=0x00;
enviar(dato);
}
//---------------------------------------------------------------------------
void TLCD::dato(byte dato)
{
Form1->IOPort1->PortByte[0x37A]=0x01;
enviar(dato);
}
//---------------------------------------------------------------------------
void TLCD::enviar(byte dato)
{
Sleep(1);
Form1->IOPort1->PortByte[0x378]=dato;
Sleep(1);
Form1->IOPort1->PortByte[0x37A]=Form1->IOPort1->PortByte[0x37A]|0xFE;
Sleep(1);
Form1->IOPort1->PortByte[0x37A]=Form1->IOPort1->PortByte[0x37A]&0xFD;
Sleep(1);
}
//---------------------------------------------------------------------------
void TLCD::cadena(AnsiString cadena)
{
for(int i=1;i<=cadena.Length();i++)
{
dato(cadena[i]);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
LCD->inicializacion();
LCD->instruccion(0x80);
LCD->dato('v');
}
//---------------------------------------------------------------------------