【问题标题】:LCD shows random characters (MPLAB)LCD 显示随机字符 (MPLAB)
【发布时间】:2019-08-27 17:50:24
【问题描述】:

我正在尝试将我的 LCD 屏幕 (16x02 QAPASS) 连接到我在 MPLAB 上的 PIC16F1937,但它显示随机字符(在本例中为中文字符、问号和斜杠)而不是字母数字。但是,所有 PIN 连接都已在库中声明并正确连接到 PIC。我使用 XC8 编译器。

这里是连接:

VSS --> 接地
VDD --> 5V
VO --> 680Ω电阻
CN --> RD1
RW --> RD6
RS --> RD0
LCD_D4 --> RD2
LCD_D5 --> RD3
LCD_D6 --> RD4
LCD_D7 --> RD5
阳极 --> 5V
阴极 --> GND

全局项目是一个传感器,它检测物体的距离并在 LCD 上显示相同的距离。 LCD 不显示字符这一事实影响了项目的其余部分,因为如果 LCD 出现故障,我将无法设置数学计算。

1) 库代码:lcd.h(头文件)这是 Microchip 为 LCD 库提供的代码,我添加了 PIN-LCD 连接:

// single bit for selecting command register or data register 
#define instr 0 #define data 1

// These #defines create the pin connections to the LCD in case they 
are changed on a future demo board
#define LCD_PORT     PORTD
#define LCD_PWR      PORTDbits.RD7   // LCD power pin
#define LCD_EN       PORTDbits.RD1   // LCD enable
#define LCD_RW       PORTDbits.RD6   // LCD read/write line
#define LCD_RS       PORTDbits.RD0   
#define LCD_D4       PORTDbits.RD2
#define LCD_D5       PORTDbits.RD3
#define LCD_D6       PORTDbits.RD4
#define LCD_D7       PORTDbits.RD5

// LCD register select line

#define NB_LINES    2   // Number of display lines
#define NB_COL      16  // Number of 
characters per line

2) 库代码 2 : lcd.c (Source Files) 包含与 LCD 相关的命令

3) 主代码:main.c(源文件)

#include "mcc_generated_files/mcc.h"
#include "lcd.h"
#define _XTAL_FREQ 4000000

 void main(void)
 {
 // initialize the device
 SYSTEM_Initialize();

 // initialize LCD
 LCD_Initialize();

LCDGoto(4, 1);           // go to column 4, row 1
LCDPutChar("test1");
LCDGoto(3, 2);           // go to column 3, row 2
LCDPutStr("test2");

while (1)
{

}
}

【问题讨论】:

  • LCD_Initialize() 是库函数,还是您在代码中定义的函数? (SYSTEM_Initialize() 的问题相同)在您的代码中的哪一点,您在 LCD 上看到 random 字符?您是否应该检查我询问的两个函数的返回值?如果是这样,我将从查看这些值开始。
  • LCDPutChar("test1");LCDPutStr("test2"); 都被传递一个字符串时,为什么你使用不同的函数?没有关于LCDPutChar 的编译器警告吗?传递给 LCDPutChar()地址 可能被视为某种配置,而不是预期的可打印字符。
  • @ryyker LCD_Initialize() 是库函数,SYSTEM_Initialize () 是 MPLAB 自动生成的默认函数 LCD_Initialize() 指的是位于 lcd.c 文件中的函数 void LCD_Initialize()。在 main.c 中编写代码后,我会看到随机字符,否则 LCD 上不会显示任何内容。
  • @WeatherVane 使用这两个函数发布代码是我的疏忽。但最初代码仅使用 LCDPutStr 函数编译,结果相似。

标签: c embedded pic mplab lcd


【解决方案1】:

@AfricaOMM,

看来您的代码可能基于来自此link 的代码。

因为您只发布了片段,所以无法确定您尝试使用的代码有多糟糕。

我在链接中找到的代码拥有 Microchip 版权,但质量很差,存在会导致您出现一些问题的错误。

从长远来看,您可以自己解决这个烂摊子。

我最好的建议是将 LED 放在连接到 LCD 模块的信号线上,并在初始化代码运行时验证 PIC16F1937 是否将每条线设置为正确的状态。

我怀疑您的接线错误以及代码错误。

【讨论】:

    【解决方案2】:

    问题解决了!

    问题与库有关。 Microchip 提供的库充满了故障,因此在执行命令时,PIC 没有收到它应该收到的假定信息,这就是 LCD 显示随机字符的原因。

    我建议您使用library developed by electrosome:我确认它是 100% 可操作的,感谢他们!

    另一件事:要解决对比度问题,理想情况下需要将 LCD 的 VO 端口连接到电位器。

    【讨论】:

      【解决方案3】:

      当我们在 LCD 上发送消息时,它会显示有趣的字符或一些奇​​怪的符号,因为硬件需要一些时间来刷新。您可以尝试给一些睡眠时间。在此行之后

      LCDPutStr("test2").   Put above sleep time
      LCD.sleep(5)
      

      它在我的情况下有效。

      【讨论】:

        【解决方案4】:

        当我们在 LCD 上发送消息时,它会显示有趣的字符或一些奇​​怪的符号,因为硬件需要一些时间来刷新。您可以尝试给一些睡眠时间。在此行之后

        LCDPutStr("test2").   Put above sleep time
        LCD.sleep(5)
        
        

        它在我的情况下有效。它在我的情况下有效。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-02
          相关资源
          最近更新 更多