supergoodfriends
Trứng gà
Xin mọi người hướng dẫn lại giùm cách đọc giá trị vào của một chân IO bất kỳ. Cụ thể mình có module nút nhấn như hình.Thank
/*****************************************************************************
** Function name: GPIOReadValue
**
** Descriptions: Read a bitvalue in a specific bit position
** in GPIO portX(X is the port number.)
**
** parameters: port num, bit position
** Returned value: value
**
*****************************************************************************/
void GPIOReadValue( uint32_t portNum, uint32_t bitPosi )
{ uint32_t regVal = 0;
switch ( portNum )
{
case PORT0:
if ( LPC_GPIO0->MASKED_ACCESS[(1<<bitPosi)]==(1<<bitPosi) )
regVal = 1;
break;
case PORT1:
if ( LPC_GPIO1->MASKED_ACCESS[(1<<bitPosi)]==(1<<bitPosi) )
regVal = 1;
break;
case PORT2:
if ( LPC_GPIO2->MASKED_ACCESS[(1<<bitPosi)]==(1<<bitPosi) )
regVal = 1;
break;
case PORT3:
if ( LPC_GPIO3->MASKED_ACCESS[(1<<bitPosi)]==(1<<bitPosi) )
regVal = 1;
break;
default:
break;
}
return ( regVal );
}
}
Mong các anh chì bà con cô bác gần xa giải đáp giúp.while(1)
{
GPIOSetDir(0,1,0);
GPIOSetDir(2,0,1);
bit=GPIOReadValue(PORT0,1);
if (bit)
GPIOSetValue(2,0,1);
else
GPIOSetValue(2,0,0);
}
uint32_t GPIOReadValue( uint32_t portNum, uint32_t bitPosi )
{ uint32_t regVal = 0;
switch ( portNum )
{
case PORT0:
if ( (LPC_GPIO0->MASKED_ACCESS[(1<<bitPosi)])==(1<<bitPosi) )
regVal =1;
break;
case PORT1:
if ( (LPC_GPIO1->MASKED_ACCESS[(1<<bitPosi)])==(1<<bitPosi) )
regVal = 1;
break;
case PORT2:
if ( (LPC_GPIO2->MASKED_ACCESS[(1<<bitPosi)])==(1<<bitPosi))
regVal = 1;
break;
case PORT3:
if ( (LPC_GPIO3->MASKED_ACCESS[(1<<bitPosi)])==(1<<bitPosi))
regVal = 1;
break;
default:
break;
}
return ( regVal );
}
Lưu ý nếu để hàm GPIOReadValue trong file GPIO.c thì phải khai báo trong file GPIO.hint main (void)
{ uint32_t bit;
GPIOInit();
while(1)
{
GPIOSetDir(0,1,0);
GPIOSetDir(2,0,1);
bit=GPIOReadValue(0,1);
if (bit)
GPIOSetValue(2,0,0);
else GPIOSetValue(2,0,1);
}
}