wang2012216 发表于 2023-6-16 17:50:59

新手请教关于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);
                }
      }
}

wang2012216 发表于 2023-6-16 17:54:43

原理图
页: [1]
查看完整版本: 新手请教关于stc8h8k64u IO口问题