dbfzjsrn 发表于 2024-12-23 17:26:28

小白提问

<p>为什么我将单片机引脚配置成准双向口,如何读取引脚电平,读出来的电平一直都是1高电平呢,明明用万用表测量那个管脚都已经是低电平了</p>

DebugLab 发表于 2024-12-23 17:40:29

IO上电复位为1,双向口悬空读就是1,没毛病,外部下拉才能读到0

DebugLab 发表于 2024-12-23 17:41:14


建议直接使用这个

dbfzjsrn 发表于 2024-12-23 18:28:26

DebugLab 发表于 2024-12-23 17:41
建议直接使用这个

我试过这个了,就是配置完之后,P1.7引脚就一直是高电平1,拨动编码器,读出来的电平依旧没变

DebugLab 发表于 2024-12-23 18:40:03

dbfzjsrn 发表于 2024-12-23 18:28
我试过这个了,就是配置完之后,P1.7引脚就一直是高电平1,拨动编码器,读出来的电平依旧没变
...

电路连接不对或读的方法不对

jwd 发表于 2024-12-23 19:51:08

<p>先写1再读</p>

dbfzjsrn 发表于 2024-12-23 20:06:03

DebugLab 发表于 2024-12-23 18:40
电路连接不对或读的方法不对
#include <STC8H.H>
#include      "STC8G_H_GPIO.h"
      
sbit xd1 = P1^7;
sbit xd2 = P2^4;
sbit xd3 = P3^4;
sbit xd4 = P2^3;
      
void GPIO_Config()
{
    GPIO_InitTypeDef GPIO_InitStructure;

    GPIO_InitStructure.Pin = GPIO_Pin_7;
    GPIO_InitStructure.Mode = GPIO_PullUp;
    GPIO_Inilize(GPIO_P1, &GPIO_InitStructure);

    GPIO_InitStructure.Pin = GPIO_Pin_3 | GPIO_Pin_4;
    GPIO_InitStructure.Mode = GPIO_PullUp;
    GPIO_Inilize(GPIO_P2, &GPIO_InitStructure);

    GPIO_InitStructure.Pin = GPIO_Pin_4;
    GPIO_InitStructure.Mode = GPIO_PullUp;
    GPIO_Inilize(GPIO_P3, &GPIO_InitStructure);
      
}

void main()
{
                unsigned char pinStatus = 0;
    GPIO_Config();


    while (1)
    {
      // 读取P1.7引脚电平,存到pinStatus最低位(第0位)
      pinStatus &= ~0x01;
      if (xd1 == 1)
      {
            pinStatus |= 0x01;
      }

      // 读取P2.4引脚电平,存到pinStatus第1位
      pinStatus &= ~0x02;
      if (xd2 == 1)
      {
            pinStatus |= 0x02;
      }

      // 读取P3.4引脚电平,存到pinStatus第2位
      pinStatus &= ~0x04;
      if (xd3 == 1)
      {
            pinStatus |= 0x04;
      }

      // 读取P2.3引脚电平,存到pinStatus第3位
      pinStatus &= ~0x08;
      if (xd4 == 1)
      {
            pinStatus |= 0x08;
      }

    }
}

dbfzjsrn 发表于 2024-12-23 20:07:14

dbfzjsrn 发表于 2024-12-23 20:06
#include
#include      "STC8G_H_GPIO.h"
      


我是这样写的
页: [1]
查看完整版本: 小白提问