Part Number: TMS320F28027F
Other Parts Discussed in Thread: TMS320F28027
Hello Guys ,
This is regarding the Interfacing of 1602A LCD with TMS320F28027 ,so after a litlle stuggle and study finally I have a code of LCD which is working properly and would like to share here for future refrence for everyone .Please note this a code for 8 bit mode and soon i will also upload the code for 4 bit mode and also the working video link.The code is as following:-
Connection is (D0-D7)->(GPIO0-Gpio7)/(RS->GPIO12/EN->GPIO19)
#include "F2802x_Device.h"
#include "f2802x_examples.h"
void Gpio_select(void);
void SendByte(unsigned char Value);
void WriteCommandLCD(unsigned char CommandByte);
void DisplayLCD(char* textptr);
void InitializeLCD(void);
void lcd_gotoxy(int x, int y);
void main(void)
{
memcpy(&RamfuncsRunStart,&RamfuncsLoadStart,(size_t)&RamfuncsLoadSize);
Gpio_select();
InitializeLCD();
for(;;)
{
lcd_gotoxy(0, 1);
DisplayLCD("WELCOME TO");
DELAY_US(1000000);
}
}
void SendByte(unsigned char Value)
{
if((Value & 0x01) == 0x01)
GpioDataRegs.GPASET.bit.GPIO0 =1;
else
GpioDataRegs.GPACLEAR.bit.GPIO0 =1;
if((Value & 0x02) == 0x02)
GpioDataRegs.GPASET.bit.GPIO1 =1;
else
GpioDataRegs.GPACLEAR.bit.GPIO1 =1;
if((Value & 0x04) == 0x04)
GpioDataRegs.GPASET.bit.GPIO2 =1;
else
GpioDataRegs.GPACLEAR.bit.GPIO2 =1;
if((Value & 0x08) == 0x08)
GpioDataRegs.GPASET.bit.GPIO3 =1;
else
GpioDataRegs.GPACLEAR.bit.GPIO3 =1;
if((Value & 0x10) == 0x10)
GpioDataRegs.GPASET.bit.GPIO4 =1;
else
GpioDataRegs.GPACLEAR.bit.GPIO4 =1;
if((Value & 0x20) == 0x20)
GpioDataRegs.GPASET.bit.GPIO5 =1;
else
GpioDataRegs.GPACLEAR.bit.GPIO5 =1;
if((Value & 0x40) == 0x40)
GpioDataRegs.GPASET.bit.GPIO6 =1;
else
GpioDataRegs.GPACLEAR.bit.GPIO6 =1;
if((Value & 0x80) == 0x80)
GpioDataRegs.GPASET.bit.GPIO7 =1;
else
GpioDataRegs.GPACLEAR.bit.GPIO7 =1;
GpioDataRegs.GPASET.bit.GPIO19 =1;
DELAY_US(1);
GpioDataRegs.GPACLEAR.bit.GPIO19 =1;
DELAY_US(500);
};
void WriteCommandLCD(unsigned char CommandByte)
{
GpioDataRegs.GPACLEAR.bit.GPIO12=1;
SendByte(CommandByte);
GpioDataRegs.GPASET.bit.GPIO19=1;
DELAY_US(1);
GpioDataRegs.GPACLEAR.bit.GPIO19=1;
DELAY_US(3000);
};
void DisplayLCD(char* textptr)
{
for(; *textptr != '\0'; ++textptr)
{
GpioDataRegs.GPASET.bit.GPIO12=1;
SendByte(*textptr);
}
};
void InitializeLCD(void)
{
DELAY_US(100000);
WriteCommandLCD(0x30);
DELAY_US(5000);
WriteCommandLCD(0x30);
DELAY_US(100);
WriteCommandLCD(0x30);
WriteCommandLCD(0x3C);
DELAY_US(10);
WriteCommandLCD(0x08);
DELAY_US(10);
WriteCommandLCD(0x01);
DELAY_US(10);
WriteCommandLCD(0x06);
DELAY_US(10);
WriteCommandLCD(0x0E);
DELAY_US(10);
};
void Gpio_select(void)
{
EALLOW;
GpioCtrlRegs.GPAMUX1.all = 0x00000000;
GpioCtrlRegs.GPAMUX2.all = 0x00000000;
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO2 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO3 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO4 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO5 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO6 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO7 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO12 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO19 = 1;
EDIS;
};
void lcd_gotoxy(int x, int y) {
int address;
if (y == 1)
address = 0x80;
else
address = 0xC0;
WriteCommandLCD(address|x);
}