msp430g2553求巨佬们帮助一下

img

img

img

img

如图各位巨佬们 我接起来就是几个大白块 我是纯才开始学我想问问各位巨佬应该怎么硬件连接一下 我是根据网上一个图连的可我不知道自己连的问题出在哪 求指点

烧程序了没有

#define RS BIT0     // RS引脚定义为P1.0
#define EN BIT1     // EN引脚定义为P1.1
#define D4 BIT4     // D4引脚定义为P1.4
#define D5 BIT5     // D5引脚定义为P1.5
#define D6 BIT6     // D6引脚定义为P1.6
#define D7 BIT7     // D7引脚定义为P1.7

#define LCD_ADDR 0x27    // PCF8574的I2C地址

#define LCD_ROWS 2      // LCD1602屏幕行数
#define LCD_COLS 16     // LCD1602屏幕列数

#define LCD_CLEAR 0x01  // 清屏命令
#define LCD_HOME 0x02   // 光标回到起始位置
#define LCD_ENTRY 0x06  // 从左到右写字符,不移动光标
#define LCD_ON 0x0C     // 打开显示,关闭光标
#define LCD_OFF 0x08    // 关闭显示,关闭光标
void i2c_init() {
  UCB0CTL1 |= UCSWRST;        // 进入软件复位状态
  UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // 主模式,I2C模式,同步通讯
  UCB0CTL1 = UCSSEL_2 + UCSWRST;     // SMCLK时钟源,保持软件复位状态
  UCB0BR0 = 20;             // 时钟分频,用于产生低速I2C时钟
  UCB0BR1 = 0;
  P1SEL |= BIT6 + BIT7;     // P1.6和P1.7设置为I2C专用引脚
  P1SEL2 |= BIT6 + BIT7;
  UCB0CTL1 &= ~UCSWRST;      // 取消软件复位状态,启动I2C硬件
}
void lcd_send_cmd(unsigned char cmd) {  // 向LCD1602发送命令函数
  unsigned char data1, data2;
  data1 = cmd & 0xF0;                 // 先送高4位数据
  data2 = (cmd << 4) & 0xF0;          // 再送低4位数据(数据线在D4~D7上)
  i2c_start();
  i2c_write_byte(LCD_ADDR);           // 发送设备地址
  i2c_write_byte(data1 | 0x04);       // 高4位数据加RS=0、RW=0、E=1写入I/O扩展芯片
  i2c_write_byte(data1);              // 高4位数据加RS=0、RW=0、E=0写入I/O扩展芯片
  i2c_write_byte(data2 | 0x04);       // 低4位数据加RS=0、RW=0、E=1写入I/O扩展芯片
  i2c_write_byte(data2);              // 低4位数据加RS=0、RW=0、E=0写入I/O扩展芯片
  i2c_stop();
}

void lcd_send_data(unsigned char data) {  // 向LCD1602发送数据函数
  unsigned char data1, data2;
  data1 = data & 0xF0;                // 先送高4位数据
  data2 = (data << 4) & 0xF0;         // 再送低4位数据(数据线在D4~D7上)
  i2c_start();
  i2c_write_byte(LCD_ADDR);           // 发送设备地址
  i2c_write_byte(data1 | 0x05);       // 高4位数据加RS=1、RW=0、E=1写入I/O扩展芯片
  i2c_write_byte(data1 | 0x01);       // 高4位数据加RS=1、RW=0、E=0写入I/O扩展芯片
  i2c_write_byte(data2 | 0x05);       // 低4位数据加RS=1、RW=0、E=1写入I/O扩展芯片
  i2c_write_byte(data2 | 0x01);       // 低4位数据加RS=1、RW=0、E=0写入I/O扩展芯片
  i2c_stop();
}
void lcd_init() {  // LCD1602初始化函数
  lcd_send_cmd(0x33);             // 初始化
  lcd_send_cmd(0x32);
  lcd_send_cmd(0x28);             // 设置为2行16列显示
  lcd_send_cmd(LCD_ENTRY);        // 显示不移动,写字符时往右移动
  lcd_send_cmd(LCD_ON);           // 打开显示,关闭光标
  lcd_send_cmd(LCD_CLEAR);        // 清屏
  lcd_send_cmd(LCD_HOME);         // 光标返回起始位置
}
int main() {
  unsigned char text[] = "Hello world!";  // 待显示的字符串
  int i;
  WDTCTL = WDTPW + WDTHOLD;      // 停用看门狗
  i2c_init();                   // 初始化I2C总线和PCF8574
  lcd_init();                   // 初始化LCD1602
  for (i = 0; i < sizeof(text) - 1; i++) {  // 向LCD1602逐个字符地写入待显示的字符串
    lcd_send_data(text[i]);
  }

  while(1);
}
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^