S3C2440-GPIO之button

这是非中断模式的按键读取,没有防抖。
读取一个引脚的值就是读取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;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值