我用函数 也写了一个 。 作者的 想法是好的 。
/***************************************************************************
函数名称:
功能描述:stc8a8k64d4 GPIO 配置 D 为双向口 ,P为 推挽 ,H为高阻 ,O 为开漏
参 数: 无
返 回:无
备 注:举例 set_gpio_mode(0 , "DDDD HOPD")
****************************************************************************/
void set_gpio_mode( unsigned char gpio , char n[] )
{
unsigned char M1 , M0 , i ;
for( i= 0 ; i < 9 ; i ++ )
{
if( i == 4 )
continue ;
M1 <<= 1 ;
M0 <<= 1 ;
switch( n[i] )
{
case 'D' : // 00
{
M1 &= ~0x01 ;
M0 &= ~0x01 ;
}
break ;
case 'P' : // 01
{
M1 &= ~0x01 ;
M0 |= 0x01 ;
}
break ;
case 'H' : // 10
{
M1 |= 0x01 ;
M0 &= ~0x01 ;
}
break ;
case 'O' : // 11
{
M1 |= 0x01 ;
M0 |= 0x01 ;
}
break ;
}
}
switch( gpio )
{
case 0 : //P0
{
P0M1 = M1 , P0M0 = M0 ;
}
break ;
case 1 : //P1
{
P1M1 = M1 , P1M0 = M0 ;
}
break ;
case 2 : //P2
{
P2M1 = M1 , P2M0 = M0 ;
}
break ;
case 3 : //P3
{
P3M1 = M1 , P3M0 = M0 ;
}
break ;
case 4 : //P4
{
P4M1 = M1 , P4M0 = M0 ;
}
break ;
case 5 : //P5
{
P5M1 = M1 , P5M0 = M0 ;
}
break ;
case 6 : //P6
{
P6M1 = M1 , P6M0 = M0 ;
}
break ;
case 7 : //P7
{
P7M1 = M1 , P7M0 = M0 ;
}
break ;
}
} |