我正在使用MSP430 MCU读取模拟信号并将结果显示在具有SPI连接的LCD上。 LCD是16x2,根据Datasheet上的SPI连接细节连接,并使用Hitachi HD44780驱动程序。我可以填写第一行的16个字符没有问题。当我超过16时,即使扩展包含要打印的字符串的char数组,也不会显示最后一个字符(如预期的那样)。问题是第二行从不显示任何东西。当第一行的某个位置没有字符时,所有位置仍然有一个微弱的背景,但第二行始终是空白的。以下是打印中使用的功能。我究竟做错了什么?将16x2 LCD与SPI连接,将字符插入第二行
我知道接线是正确的,并且LCD功能正常。为了测试这些,我将显示器连接到了一个arduino进行测试,因为代码更容易,我可以显示弓排中的字符。非描述性变量由MSP430源文件定义,包括寄存器,缓冲器和其他控制器,以使器件进入SPI通信模式。
void AlignLaserTarget()
{
int i,k, j;
struct testResults *ptestResults;
char mess1[17]; //changed from 8 to hold 16 characters
ptestResults=getTestResults();
// reset global vars
timeI1=0;
timeA=0;
i=starResults.ch1Amplitude; //analog integer value to be printed on LCD
j=starResults.ch2Amplitude; //same
k=starResults.ch3Amplitude; //same, but should go in second row
sprintf(mess1,"1:%i 2:%i", i, j);
stringTo_lcd8(mess1);
}
void stringTo_lcd8(char* lcdString)
{
int i;
LCD_COMMAND_MODE; // display code
timer_us(20);
write_lcd8(0x01); // clear display
timer_ms(2);
LCD_DATA_MODE; //enable data sending pin
for (i=0; *lcdString !=0 ; ++i)
{
write_lcd8(*lcdString);
++lcdString;
} // end of display code
timer_us(10000); // 10ms delay . should not be needed as normal interval between counts is at least 75 ms or 12 in. at 800ft/min rate
}
//*******************************************************
void write_lcd8(unsigned char lcdbyte)
{
UCA0IFG &= ~UCTXIFG; // CLEAR FLAG
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL0 = UCMST+UCSYNC+ UCMSB+ UCCKPH;
UCA0BR0 = 0x80; // /hex80
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
timer_us(100);
LCD_CHIP_ENABLE; // LCD enable pin output
timer_us(20); // added trp
UCA0TXBUF =lcdbyte;
timer_us(150);
while (!(UCA0IFG&UCTXIFG));
UCA0IFG &= ~UCTXIFG; // CLEAR FLAG
LCD_CHIP_DISABLE;
timer_us(30);
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL0 |= UCMST+UCSYNC+ UCMSB+ UCCKPH;
UCA0BR0 = 0x02; // /2
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
}
为什么选择这些特定的十六进制值?他们是否是HD44780驱动程序的命令? 我将如何使用我的代码存在的设置光标命令?调用第1行字符串的函数,然后调用第2行字符串的函数? –
@ Rejesh6115已经阅读了HD44780的数据表 - 这是你应该做的。 Rajesh如何知道如何将光标命令与你的软件配合?不知道为什么有人低调,希望不是你。 – barny
@barny你的评论是没有用的。我读数据表,0x80应该将光标设置在0,0的位置,但我认为0x90将光标设置为1,0的位置,因为它是一个2x16显示器,这就是为什么我问这些十六进制值来自哪里。我没有降低答案。 –