您的位置:首页 > 其它

S3C2440-GPIO之button

2016-03-30 20:50 330 查看
这是非中断模式的按键读取,没有防抖。

读取一个引脚的值就是读取CONXDAT的相应位置。

且mini2440的按键按下是低电平,

/*
time:2016-03-30,
change:创建文件,GPIO.c  GPIO.h
auther:wxc
*/

#include <S3C2440.H>

#define uint_8 unsigned char
#define uint_32 unsigned int
#define GPIO volatile unsigned long*

#define OUT 1
#define IN 0
#define false 0
#define true 1

/*
功能:
参数:
返回:
*/

/*
功能:延时函数
参数:延时时间
返回:无
*/
void delay_ms(uint_32 time)
{
int j= 5000;
for(;time>0;time--)
{
for(;j>0;j--)
;
}
}

/*
功能:设置引脚方向
参数:GPx引脚类型,con 引脚方向,flag引脚值
返回:是否设置成功
*/
int GPIO_CON(GPIO GPx,int con,int flag)
{
if(flag<0||flag>16)
{
return false;
}

*GPx |= con<<(flag*2);
return true;
}
/*
功能:获取引脚值
参数:GPx引脚类型,flag引脚值
返回:返回数据
*/
int getGPIO_DAT(GPIO GPx,int flag)
{
unsigned long dwdat;
dwdat = *GPx;
return dwdat&(1<<flag);
}

/*
功能:设置引脚值
参数:GPx引脚类型,con引脚值,flag引脚位置
返回:设置成功
*/
int setGPIO_DAT(GPIO GPx,int con,int flag)
{
if(con>2)
{
return false;
}
if(con == OUT)
*GPx |= (1<<flag);
else
*GPx = (*GPx&~(1<<flag));
return true;
}
/*
功能:设置多个引脚值
参数:GPx引脚类型,con引脚值,start引脚位置1,stop引脚位置2
返回:设置成功
*/
int setGPIO_Mulit_DAT(GPIO GPx,int con,int start,int stop)
{
int i=0;
for(i=start;i<=stop;i++)
{
setGPIO_DAT(GPx,con,i);
}
return true;
}

//点个灯玩玩
int main()
{
int ledIndex = 5;

int bool=0;
bool = GPIO_CON(&GPBCON,OUT,5);
bool = GPIO_CON(&GPBCON,OUT,6);
bool = GPIO_CON(&GPBCON,OUT,7);
bool = GPIO_CON(&GPBCON,OUT,8);
bool = GPIO_CON(&GPGCON,IN,3);
//  GPBCON = GPB5_out;

while(1)
{
if(!getGPIO_DAT(&GPGDAT,3))
{
setGPIO_Mulit_DAT(&GPBDAT,IN,5,8);
}
bool = setGPIO_DAT(&GPBDAT,0,ledIndex);
delay_ms(100000);
bool = setGPIO_DAT(&GPBDAT,1,ledIndex);
//      setGPIO_DAT(GPBCON,0,ledIndex);
delay_ms(100000);
if(ledIndex++>8)
{
ledIndex = 5;
}
}
return false;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: