HT32F52352入门尝试LCD1602
尝试后发现D5引脚总是高电平而且向外输出,无论如何配置都无法让其低电平。
void led_wr_com(uchar cdat)//写指令
{
GPIO_WriteOutBits(P_B,LED12864_RS_PORT,RESET);
GPIO_WriteOutBits(P_B,LED12864_RW_PORT,RESET);
GPIO_WriteOutBits(P_B,LED12864_E_PORT,RESET);
delay_us(1);
GPIO_WriteOutData(P_A,cdat);
delay_us(1);
GPIO_WriteOutBits(P_B,LED12864_E_PORT,SET); //高脉冲使能
GPIO_WriteOutBits(P_B,LED12864_E_PORT,RESET);
}
void led_wr_data(uchar dat) //写、显示数据
{
GPIO_WriteOutBits(P_B,LED12864_RS_PORT,SET);
GPIO_WriteOutBits(P_B,LED12864_RW_PORT,RESET);
GPIO_WriteOutBits(P_B,LED12864_E_PORT,SET); //rs=1,rw=0 写数据
delay_us(1);
GPIO_WriteOutData(P_A,dat);
delay_us(1);
GPIO_WriteOutBits(P_B,LED12864_E_PORT,SET); //高脉冲使能
delay_us(1);
GPIO_WriteOutBits(P_B,LED12864_E_PORT,RESET);
}
void led_init() //初始化led
{
CKCU_PeripClockConfig_TypeDef CKCUClock = {{ 0 }};
CKCU_PeripClockConfig_TypeDef CKCU1Clock = {{ 0 }};
CKCUClock.Bit.AFIO = 1;
CKCU1Clock.Bit.PB = 1;
CKCUClock.Bit.PA = 1;
CKCU_PeripClockConfig(CKCUClock, ENABLE);
CKCU_PeripClockConfig(CKCU1Clock, ENABLE);
GPIO_DirectionConfig(P_B,LED12864_RS_PORT,GPIO_DIR_OUT);
GPIO_DirectionConfig(P_B,LED12864_RW_PORT,GPIO_DIR_OUT);
GPIO_DirectionConfig(P_B,LED12864_E_PORT,GPIO_DIR_OUT);
GPIO_DirectionConfig(P_B,LED12864_RST_PORT,GPIO_DIR_OUT);
GPIO_DirectionConfig(P_B,LED12864_PSB_PORT,GPIO_DIR_OUT);
GPIO_DirectionConfig(P_A,LED12864_DATA_PORT,GPIO_DIR_OUT); led_wr_com(0x38); //0011 1000 8位数据总线DB7~DB0、2行显示模式
delay_us(1);
led_wr_com(0x0c); //0000 1100 开显示,关光标(关光标的显示,其实还有,看不见)
delay_us(1);
led_wr_com(0x06); //0000 0110 显示不移位,光标右移
delay_us(1);
led_wr_com(0x01); //0000 0001 清屏
delay_us(1);
}
参考GPT和自己的思路,根据您提供的代码,似乎没有对引脚D5进行初始化设置。在初始化函数中,只有对LED12864_DATA_PORT(P_A)进行了输出方向设置,但是没有对具体的引脚进行初始化。因此建议您在初始化函数中添加对引脚D5进行初始化的代码。
另外,您可以通过示波器等工具来检测引脚D5的电平状态,以确认是否是硬件问题导致该引脚一直处于高电平状态。如果硬件上存在问题,可能需要更换硬件才能解决问题。
以下是针对代码的修改建议:
//在初始化函数led_init()中添加如下代码
GPIO_DirectionConfig(P_A, GPIO_PIN_5, GPIO_DIR_OUT);
GPIO_WriteOutBits(P_A, GPIO_PIN_5, RESET);
这段代码将引脚D5设置为输出方向,并将其输出低电平。如果问题仍然存在,请检查硬件连接和其他可能的原因。
#ifndef _LED12864_H
#include "ht32f5xxxx_ckcu.h"
#include "ht32f5xxxx_gpio.h"
#include "type.h"
#define P_B HT_GPIOB
#define P_A HT_GPIOA
#define LED12864_RS_PORT GPIO_PIN_0
#define LED12864_RW_PORT GPIO_PIN_1
#define LED12864_E_PORT GPIO_PIN_2
#define LED12864_RST_PORT GPIO_PIN_3
#define LED12864_PSB_PORT GPIO_PIN_4
#define LED12864_DATA_PORT (GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7)//端口设置
void LED12864_Init(void);
void led_wr_com(uchar cdat);
void led_wr_data(uchar dat);
void TransferData(char,int DI); //传送数据或是命令,当DI=0时,传送命令,当DI=1时,传送数据
void lcd_mesg(unsigned char *addr1);
#endif
这是端口设置,已经在.h文件中声明了对应D5口的PA,GPIO_PIN_05,断开D5的情况下用示波器测量D5对应的A5口,结果为低电平,连接后测量A5,为高电平
我结合经验并参考了AI给与建议:你使用的是GPIO口来控制LCD1602显示屏,其中D5引脚总是高电平且向外输出,可能是以下原因导致的。
引脚连接问题:检查D5引脚连接是否正确,包括引脚的接线和外部电路的连接是否正确。
程序问题:检查程序中是否存在问题,可能是数据写入函数的问题。可以尝试在代码中添加调试信息,以便更好地了解程序运行的状态。
显示屏问题:检查LCD1602显示屏本身是否存在问题。可以通过更换其他的LCD1602显示屏或者使用示波器等工具检查信号的电平变化情况,以便确定问题出现的具体位置。
综上所述,建议你逐一排除以上原因,并分析问题出现的原因,从而解决该问题。
该回答引用GPTᴼᴾᴱᴺᴬᴵ
根据您提供的代码和描述,D5引脚一直处于高电平且输出的情况,可能是以下原因之一:
除了以上可能性,还有一些其他问题可能导致D5引脚输出高电平。为了更好的排除问题,建议您逐步调试,首先检查引脚连接和配置是否正确。如果问题依然存在,可以考虑使用示波器或逻辑分析仪等工具进行调试,以帮助查找问题所在。