关于#单片机#的问题:HT32F52352入门尝试LCD1602尝试后发现D5引脚总是高电平而且向外输出,无论如何配置都无法让其低电平

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引脚总是高电平且向外输出,可能是以下原因导致的。

  1. 引脚连接问题:检查D5引脚连接是否正确,包括引脚的接线和外部电路的连接是否正确。

  2. 程序问题:检查程序中是否存在问题,可能是数据写入函数的问题。可以尝试在代码中添加调试信息,以便更好地了解程序运行的状态。

  3. 显示屏问题:检查LCD1602显示屏本身是否存在问题。可以通过更换其他的LCD1602显示屏或者使用示波器等工具检查信号的电平变化情况,以便确定问题出现的具体位置。

综上所述,建议你逐一排除以上原因,并分析问题出现的原因,从而解决该问题。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
根据您提供的代码和描述,D5引脚一直处于高电平且输出的情况,可能是以下原因之一:

  1. 引脚连接错误:请检查D5引脚是否正确连接到了LCD1602的D5引脚上。
  2. 引脚配置错误:请检查D5引脚的配置是否正确,比如是否被设置成了输入模式或者其他功能模式。
  3. 电路问题:如果前两个问题都没有问题,那么可能是因为电路问题导致的。可以检查一下电路连接是否正确,或者检查是否有其他电路元件导致D5引脚输出高电平。

除了以上可能性,还有一些其他问题可能导致D5引脚输出高电平。为了更好的排除问题,建议您逐步调试,首先检查引脚连接和配置是否正确。如果问题依然存在,可以考虑使用示波器或逻辑分析仪等工具进行调试,以帮助查找问题所在。