【发布时间】: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函数编译,结果相似。