小白提问
<p>为什么我将单片机引脚配置成准双向口,如何读取引脚电平,读出来的电平一直都是1高电平呢,明明用万用表测量那个管脚都已经是低电平了</p>IO上电复位为1,双向口悬空读就是1,没毛病,外部下拉才能读到0
建议直接使用这个
DebugLab 发表于 2024-12-23 17:41
建议直接使用这个
我试过这个了,就是配置完之后,P1.7引脚就一直是高电平1,拨动编码器,读出来的电平依旧没变
dbfzjsrn 发表于 2024-12-23 18:28
我试过这个了,就是配置完之后,P1.7引脚就一直是高电平1,拨动编码器,读出来的电平依旧没变
...
电路连接不对或读的方法不对 <p>先写1再读</p>
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:06
#include
#include "STC8G_H_GPIO.h"
我是这样写的
页:
[1]