新手请教关于stc8h8k64u IO口问题
本帖最后由 wang2012216 于 2023-6-18 18:21 编辑!!!已解决
业余爱好,stc8h8k64u 32脚的,P2口配置为准双向,另外IIC用了P24、P25,
P26、P27分别接了个五向开关的2个脚,上电设置为1,用万用表检测这两个io口一直为低电平,请问该怎么配置?
P0口相同配置,P00、P01、P02也是接五向开关,P0口就正常,单机双击长按检测均正常,就P26、P27一直是低电平,外接上拉也不行。
1:IIC和GPIO初始化。
void GPIO_config(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //结构定义
GPIO_InitStructure.Pin= GPIO_Pin_All; //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7, 或操作
GPIO_InitStructure.Mode = GPIO_PullUp; //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
GPIO_Inilize(GPIO_P0,&GPIO_InitStructure); //初始化
GPIO_InitStructure.Pin= GPIO_Pin_All; //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7, 或操作
GPIO_InitStructure.Mode = GPIO_PullUp; //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
GPIO_Inilize(GPIO_P2,&GPIO_InitStructure); //初始化
}
/****************I2C初始化函数 *****************/
void I2C_config(void)
{
I2C_InitTypeDef I2C_InitStructure;
I2C_InitStructure.I2C_Mode = I2C_Mode_Master; //主从选择 I2C_Mode_Master, I2C_Mode_Slave
I2C_InitStructure.I2C_Enable = ENABLE; //I2C功能使能, ENABLE, DISABLE
I2C_InitStructure.I2C_MS_WDTA = DISABLE; //主机使能自动发送,ENABLE, DISABLE
I2C_InitStructure.I2C_MS_Interrupt = DISABLE; //使能主机模式中断,ENABLE, DISABLE
I2C_InitStructure.I2C_Speed = 32; //总线速度=Fosc/2/(Speed*2+4), 0~63
I2C_InitStructure.I2C_IoUse = I2C_P24_P25; //IO口切换 I2C_P14_P15, I2C_P24_P25, I2C_P33_P32
I2C_Init(&I2C_InitStructure);
}2:按键定义。
#define KA P26
#define KB P27
#define KC P00
#define KD P01
#define KP P023:主函数。
void main()
{
u8 key;
// GPIO_config();
P0M0 = 0x00;
P0M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
I2C_config();
OLED_Init();
Timer_config();
OLED_WR_Byte(0xA5, OLED_CMD); //全亮
OLED_Clear();
OLED_WR_Byte(0xA4, OLED_CMD); //正常模式
OLED_DrawBMP(30, 0, 69, 64, BMP1);
delay_ms(1000);
OLED_Clear();
EA = 1;
KA=1;KB=1;KC=1;KD=1;KP=1;
while(1)
{
if(T_10ms)
{
T_10ms = 0;
key = key_read();
if(key == L_key) OLED_ShowString(32, 3, "L_KEY", 16);
else if(key == D_key) OLED_ShowString(32, 3, "D_KEY", 16);
else if(key == S_key) OLED_ShowString(32, 3, "S_KEY", 16);
}
}
}
原理图
页:
[1]