Hỏi về cách đọc giá trị input trên 1 chân IO

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
 

supergoodfriends

Trứng gà
mình có chỉnh sửa lại hàm GPIOIntStatus để cho ra hàm GPIOReadValue như sau.
Nhưng không chạy được.
/*****************************************************************************
** 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 );
}
}
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);
}
Mong các anh chì bà con cô bác gần xa giải đáp giúp.
 

supergoodfriends

Trứng gà
cuối cùng cũng sửa lại như sau và đã chạy.
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 );
}
int 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);
}
}
Lưu ý nếu để hàm GPIOReadValue trong file GPIO.c thì phải khai báo trong file GPIO.h
Thay trở 100k bằng trở 100 ohm
 
Top