TI E2E™ 设计支持论坛将于 5 月 30 日至 6 月 1 日进行维护。如果您在此期间需要技术支持,请联系 TI 的客户支持中心寻求帮助。

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.

[参考译文] 编译器/MSP430G2553:MSP430G2553和 LCD 接口

Guru**** 2046970 points
Other Parts Discussed in Thread: MSP430G2553
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/795043/compiler-msp430g2553-msp430g2553-and-lcd-interface

器件型号:MSP430G2553
主题中讨论的其他器件: MSP-EXP430G2

工具/软件:TI C/C++编译器

尊敬的

关于此链接、我更改了一些引脚分配并编译了程序并转储到 msp430g2553。

在 Launchpad MSP-EXP430G2上、复位后工作正常、能够显示在 LCD 屏幕上。

但是、当我倾倒到同一微控制器的独立板时、它无法正常工作所有连接都正常、但不会显示在 LCD 上。

是否有任何问题,我是否应该在代码中添加更多内容以使其正常工作。

/*此程序是来自
Marek Prochazka 的 HD44780驱动程序无繁忙检查原始版本的示例,经过调整和调试,然后发布到 TI e2e 的公共域中。
该程序对 LCD 引脚分配了一个位空闲分配、因此6个空闲引脚可以通过任何方式连接到 LCD。
从项目设置中选择。 在 LCD 16x2和 MSP430G2231上进行了测试
*/

//#include "io430.h"
// 
#include 
// LCD 端口分配
#define LCD_DIR P2DIR
#define LCD_OUT P2OUT

// LCD 引脚分配
#define LCD_PIN_RS BIT2
//#define LCD_PIN_RW BIT7
#define LCD_PIN_EN BIT3
#define LCD_PIN_D4 BIT6
#define LCD_PIN_D5 BIT7
#define LCD_PIN_EN 引脚


/

将 LCD_5引脚设为无效的过程6 #define LCD_PIN_EN 引脚/将 LCD5引脚设为无效/将 LCD5引脚
_DELAY_CYCLES (20);
LCD_OUT |= LCD_PIN_EN;
__DELAY_CYLES (20);
//释放 Strobe
LCD_OUT &=






(~LCD_PIN_EN);}//这会发送4位数据 void SendNibble (char data){//清除所有数据位 LCD_OUT &=~(LCD_PIN_5|Dif

)
LCD_OUT |= LCD_PIN_D4;
IF (DATA & 0x02)
LCD_OUT |= LCD_PIN_D5;
IF (DATA & 0x04)
LCD_OUT |= LCD_PIN_D6;
IF (DATA & 0x08)
LCD_OUT |= LCD_PIN_D7;
//半字节设置完成,发送到 LCD
LCDPulseEN ();
__delay_cycles (500);
}

//向 LCD 寄存器发送一个字节的数据
void SendByte (unsigned data)
{
SendNibble (data>4)& 0x0F);
SendNibble (data)& 0x0F
);
}

//向命令寄存
器发送一个字节 void SendInstruction (unsigned char data)
{
//将寄存器设置为命令
LCD_OUT &=~LCD_PIN_RS;
SendByte (data);
__DELAY_CYCLS (80000);
}

//将一个数据字节发送到 LCD 寄存
器 void LCDputch (Sendchar data)
{
//将寄存器设置为 data
lCD_out |= LCD_pin (500

个数据字节);= LCD_pin (unsigned)




void InitLCD (void)
{
//清除 LCD 控制和数据行的所有位
LCD_OUT &=~(LCD_PIN_EN|LCD_PIN_RS);//|LCD_PIN_DRW);
//将 LCD 引脚设置为输出
LCD_DIR |=(LCD_PIN_EN|LCD_PIN_Rs|LCD_D4|LCD_PIN_R5|LCD_RWD_Rw/ LCD_R5|LCD_PIN_PIN_RUT_RUT_RUT_RIS/ LCD_PIN_RIN_RIN_RIN_PUT_PUT_R


// LCD 可能处于未知状态,因此设置为已知状态,发送3次 LCD 设置为8位模式
SendNibble (3);
__delay_cycles (16000);//等待 Sendinit
SendNibble (3);
__delay_cycles (400);
SendNibble (3);
__delay_cycles (400);
//现在为

_ SendNibble (2);发送0x800 (2);发送0x2)到 SendNibble (4);发送0x2 (2)
//现在设置为模式4位2行5x7 char
SendInstruction (0x28);
__delay_cycles (8000);
//将光标设置为0x0c 至不可见光标
SendInstruction (0x0E);//c
__delay_cycles (800);
//清除屏幕


增量(0x01);__delay_cycles (0x80)



;// SendInstruction (0x8000)
;//设置数据增量(0x06);// SendInstruction (0x8000)

//将写入光标设置为 Row and Col
void LCDSetPosition (char Row、char Col)
{
//如果行不为0、则添加0x40 (4行模型需要添加0 20 60 40)
if (Row)
COL+=0x40;
SendInstruction (0x80 | Col);
__delay_cycles (800);
}

//清除 LCD
void LCDClear (void)
{
SendInstruction (0x01);
__delay_cycles (100000);
}

// LCD 光标到第一行
void LCDGoToHome (void)
{SendInstruction
(0x02);





void




LCDShift (0x18);void LCDClut/0xCdleft Instruction

(0x000/ 0xCdleft)(void)/0xCdleft Instruction (void)(0xCdleft)/0xCdleft)(void (0xCdleft)/0xCdleft


//光标闪烁模式
void LCDBlinkCursor (void)
{
SendInstruction (0x0F);
}

//将文本行打印到 LCD 屏幕
void LCDPrintString (const char * text)
{
while (* text)
LCDputch (* text++);
}/*********

8 MHz 时钟配置********* /
void configureClocks_1MHz (void)
{
#if 0
//将系统 DCO 设置为8MHz
// BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO
IFG1 &=~OFIFG; //清除 OSCFault 标志
__bis_SR_register (SCG1 + SCG0); //停止 DCO
// BCSCTL2 |= SELM_1 + DIVM_3; // MCLK = LFXT1/8
BCSCTL1 = CALBC1_1MHz;
DCOCTL = 0;
DCOCTL = CALBC1_1MHz;
FCTL2 = FWKEY + FSSEL0 + FN1; //针对闪存定时发生器的 MCLK/3
//将 LFXT1设定为 VLO @ 12kHz
// BCSCTL3 |= LFXT1S_2;
#else
if (CALBC1_1MHz=0xFF)//如果校准常数被擦除
{
while (1); //不加载,陷阱 CPU!!
}
DCOCTL = 0; //选择最低 DCOx 和 MODx 设置
BCSCTL1 = CALBC1_1MHZ; //设置范围
DCOCTL = CALDCO_1MHz; //设置 DCO 阶跃+调制*/

#endif

}


void main (void)
{
char c;
int i;
//停止看门狗计时器以防止超时复位
WDTCTL = WDTPW + WDTHOLD;
configureClocks_1MHz ();

P2SEL &=~(0xC0);
P2DIR |= 0xC0;

InitLCD ();
LCDPrintString ("Hello world");
c='0';
while (1)
{
LCDSetPosition (1、10);
for (i=0;i<100;i++)
_DELAY_CYCLES (1000);
LCDputch (c);
C++;
if (c>'9') c='0';
}
} 

MSP430和 HD44780

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Phanedra、

    此问题是否与此主题中的问题相同? e2e.ti.com/.../791431

    我们可能会将这些信息合并在一起、以便将有关您的问题的所有信息保存在一个位置。

    谢谢、
    JD
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    JD、您好!

    请帮我解决这个问题、引导我解决这个问题并完成我们的项目、该项目应该显示太阳能、电池、负载电压和电流。
    我正在等待您的反馈。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    JD、您好!

    由于一些接地问题、它现在可以工作、但它没有工作。

    以下是代码片段。

    unsigned char packetBuf[PACKETLEN];

    unsigned int 电池电压;

    packetBuf[106]=电池电压&0xFF;

    packetBuf[107]=(电池电压>> 8)& 0xFF;

    我需要您的指导来显示8位值并将其通过数据库传递到 LCD 和显示屏、这与太阳能和负载电压和电流类似

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Phanendra、您好!

    请使用上一个主题讨论此问题:

    https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/791431

    最棒的

    Chris