Other Parts Discussed in Thread: CONTROLSUITE, C2000WARE
Tool/software: Code Composer Studio
I'm working with a 16x2 LCD display but I do not know how to print a value, for example, RMS voltage value, the Figure shown a text on the LCD 16x2 . Can someone help me please? and why the last character appears on the LCD? The code that I am using is below.
/************************************************************************/
/* LCD Interface - 8 bit mode */
/* */
/* LCD Connection:- */
/* ---------------- */
/* D0 -> GPIO2 */
/* D1 -> GPIO4 */
/* D2 -> GPIO6 */
/* D3 -> GPIO8 */
/* D4 -> GPIO10 */
/* D5 -> GPIO12 */
/* D6 -> GPIO15 */
/* D7 -> GPIO24 */
/* */
/* RS -> GPIO58 */
/* RW -> GND */
/* E -> GPIO60 */
/* */
/* */
/************************************************************************/
#include "Dsp28335.h"
unsigned char temp, i;
//void delay_ms(long end);
void WriteCommandLCD(unsigned char CommandByte);
void WriteDataLCD(unsigned char DataByte);
void SendByte(unsigned char Value);
void CursorON (void);
void CursorOFF (void);
void initlcd (void);
void DisplayLCD (char LineNumber, char *Message);
float VRMS=3.0;
int main(void)
{
InitSysCtrl();
InitGpio();
InitPieCtrl();
InitWatchdog();
initlcd();
DisplayLCD(1,"RMS Voltage = "); //<---RMS Value//
DelayUs(10000);
while(1)
{
}
}
//Initialization
void initlcd (void)
{
GpioDataRegs.GPBSET.bit.GPIO60 = 1;
DelayUs(1600);
DelayUs(1600);
DelayUs(1600);
DelayUs(1600);
WriteCommandLCD(0x38);
DelayUs(1600);
WriteCommandLCD(0x38);
DelayUs(50);
WriteCommandLCD(0x38);
DelayUs(50);
WriteCommandLCD(0x08);
WriteCommandLCD(0x01);
DelayUs(1600);
WriteCommandLCD(0x06);
WriteCommandLCD(0x0E);
WriteCommandLCD(0x02);
DelayUs(1600);
}
//WriteCommand
void WriteCommandLCD (unsigned char CommandByte)
{
GpioDataRegs.GPBCLEAR.bit.GPIO58 = 1;
SendByte (CommandByte);
DelayUs(50);
}
//SendByte
void SendByte (unsigned char Value)
{
if((Value & 0x01) == 0x01)
GpioDataRegs.GPASET.bit.GPIO2 = 1;//GPIO_setHigh(myGpio, D0);
else
GpioDataRegs.GPACLEAR.bit.GPIO2 = 1;//GPIO_setLow(myGpio, D0);
if((Value & 0x02) == 0x02)
GpioDataRegs.GPASET.bit.GPIO4 = 1;//GPIO_setHigh(myGpio, D1);
else
GpioDataRegs.GPACLEAR.bit.GPIO4 = 1;//GPIO_setLow(myGpio, D1);
if((Value & 0x04) == 0x04)
GpioDataRegs.GPASET.bit.GPIO6 = 1;//GPIO_setHigh(myGpio, D2);
else
GpioDataRegs.GPACLEAR.bit.GPIO6 = 1;//GPIO_setLow(myGpio, D2);
if((Value & 0x08) == 0x08)
GpioDataRegs.GPASET.bit.GPIO8 = 1;//GPIO_setHigh(myGpio, D3);
else
GpioDataRegs.GPACLEAR.bit.GPIO8 = 1;//GPIO_setLow(myGpio, D3);
if((Value & 0x10) == 0x10)
GpioDataRegs.GPASET.bit.GPIO10 = 1;//GPIO_setHigh(myGpio, D4);
else
GpioDataRegs.GPACLEAR.bit.GPIO10 = 1;//GPIO_setLow(myGpio, D4);
if((Value & 0x20) == 0x20)
GpioDataRegs.GPASET.bit.GPIO12 = 1;//GPIO_setHigh(myGpio, D5);
else
GpioDataRegs.GPACLEAR.bit.GPIO12 = 1;//GPIO_setLow(myGpio, D5);
if((Value & 0x40) == 0x40)
GpioDataRegs.GPASET.bit.GPIO15 = 1;//GPIO_setHigh(myGpio, D6);
else
GpioDataRegs.GPACLEAR.bit.GPIO15 = 1;//GPIO_setLow(myGpio, D6);
if((Value & 0x80) == 0x80)
GpioDataRegs.GPASET.bit.GPIO24 = 1;//GPIO_setHigh(myGpio, D7);
else
GpioDataRegs.GPACLEAR.bit.GPIO24 = 1;//GPIO_setLow(myGpio, D7);
GpioDataRegs.GPBSET.bit.GPIO60 = 1;o, E); //Set E pin to select LCD
for(temp=0;temp<5; temp++);
GpioDataRegs.GPBCLEAR.bit.GPIO60 = 1; //Clear E pin to deselect LCD
DelayUs(50);
}
void WriteDataLCD (unsigned char DataByte)
{
GpioDataRegs.GPBSET.bit.GPIO58 = 1; //Set RS pin to 1 to write Data
SendByte(DataByte);
DelayUs(50);
}
void CursorON (void)
{
WriteCommandLCD (0x0F);
}
void CursorOFF (void)
{
WriteCommandLCD(0x0C);
}
void DisplayLCD (char LineNumber, char *Message)
{
int a;
if (LineNumber == 1)
{
WriteCommandLCD(0x80);
}
else
{
WriteCommandLCD(0xC0);
}
for (a=0; a<16; a++)
{
WriteDataLCD(*Message);
Message++;
}
return;
}
