This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好,
这与1602A LCD 与 TMS320F28027的连接有关、因此经过一小段残桩和研究后、我最终得到 了一个工作正常的 LCD 代码、并希望在这里向所有人分享以供将来参考。请注意、这是一个8位模式的代码、并且很快会出现 我还将上传4位模式的代码以及工作视频链接。代码如下所示:-
连接为(D0-D7)->(GPIO0-GPIO7)/(RS->GPIO12/EN->GPIO19)
#include "F2802x_Device.h"
#include "F2802x_examples.h"
void GPIO_select (void);
void SendByte (无符号字符值);
空 WriteCommandLCD (无符号字符 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 ("欢迎使用");
DELAY_US (1000000);
}
}
void SendByte (无符号字符值)
{
if ((value & 0x01)== 0x01)
GpioDataRegs.GPASET.bit.GPIO0 =1;
其他
GpioDataRegs.GPACLEAR.bit.GPIO0 =1;
if ((value & 0x02)=0x02)
GpioDataRegs.GPASET.bit.GPIO1=1;
其他
GpioDataRegs.GPACLEAR.bit.GPIO1=1;
if ((value & 0x04)=0x04)
GpioDataRegs.GPASET.bit.GPIO2 =1;
其他
GpioDataRegs.GPACLEAR.bit.GPIO2 =1;
if ((value & 0x08)== 0x08)
GpioDataRegs.GPASET.bit.GPIO3=1;
其他
GpioDataRegs.GPACLEAR.bit.GPIO3=1;
if ((value & 0x10)== 0x10)
GpioDataRegs.GPASET.bit.GPIO4=1;
其他
GpioDataRegs.GPACLEAR.bit.GPIO4=1;
if ((value & 0x20)== 0x20)
GpioDataRegs.GPASET.bit.GPIO5=1;
其他
GpioDataRegs.GPACLEAR.bit.GPIO5=1;
if ((value & 0x40)== 0x40)
GpioDataRegs.GPASET.bit.GPIO6=1;
其他
GpioDataRegs.GPACLEAR.bit.GPIO6=1;
if ((value & 0x80)== 0x80)
GpioDataRegs.GPASET.bit.GPIO7=1;
其他
GpioDataRegs.GPACLEAR.bit.GPIO7=1;
GpioDataRegs.GPASET.bit.GPIO19=1;
DELAY_US (1);
GpioDataRegs.GPACLEAR.bit.GPIO19=1;
DELAY_US (500);
};
空 WriteCommandLCD (无符号字符 CommandByte)
{
GpioDataRegs.GPACLEAR.bit.GPIO12=1;
SendByte (CommandByte);
GpioDataRegs.GPASET.bit.GPIO19=1;
DELAY_US (1);
GpioDataRegs.GPACLEAR.bit.GPIO19=1;
DELAY_US (3000);
};
空 DisplayLCD (char*文本)
{
for (;*textptr !='\0';+textptr)
{
GpioDataRegs.GPASET.bit.GPIO12=1;
SendByte (*文本);
}
};
空初始化 LCD (空)
{
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 地址;
如果(y==1)
地址= 0x80;
其他
地址= 0xC0;
WriteCommandLCD (地址|x);
}