linux按键gpio状态读取c代码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>



#define KEY_OK_GPIO 32




void KeyGpioInit(unsigned int GPIO)
{
	unsigned char buf[100];
	sprintf(buf,"echo \"%d\" > /sys/class/gpio/export",GPIO);
	printf("%s\n",buf);
	system(buf);

	sprintf(buf,"echo \"in\" > /sys/class/gpio/gpio%d/direction",GPIO);
	printf("%s\n",buf);
	system(buf);
	
}

void KeyInit(void)
{
	KeyGpioInit(KEY_OK_GPIO);
}

static int gpio_read(int pin)  
{  
    char path[64];  
    char value_str[3];  
    int fd;  

    snprintf(path, sizeof(path), "/sys/class/gpio/gpio%d/value", pin);  
    fd = open(path, 0);  //O_RDONLY=0

    if (fd < 0) {  
       printf("Failed to open gpio value for reading 1!\n");  
       return -1;  
    }  

    if (read(fd, value_str, 3) < 0) {  
       printf("Failed to read value!\n");  
       return -1;  
    }  

    close(fd);  
    return (atoi(value_str));
}  

int getKeyValue(void)
{
	int sta = 0;
	if (gpio_read(KEY_OK_GPIO) == 1)
	{
		sta = 1;
	}
	return sta;
}

void main(void)
{
    KeyInit();
    while(1)
    {
        printf("key=%d\n",getKeyValue());
        sleep(1);
    }
    
}
# 目标架构
CROSS_COMPILE := arm-rockchip830-linux-uclibcgnueabihf-

# 编译器
CC := $(CROSS_COMPILE)gcc

# 目标文件
TARGET := key_test

# 源文件
SRCS := key1_test.c

# 依赖文件
OBJS := $(SRCS:.c=.o)

# 编译选项
CFLAGS := -Wall -O2

# 连接选项
LDFLAGS :=

# 默认目标
all: $(TARGET)

$(TARGET): $(OBJS)
	$(CC) $(LDFLAGS) -o $@ $^

%.o: %.c
	$(CC) $(CFLAGS) -c -o $@ $<

# 清理生成的文件
clean:
	rm -f $(OBJS) $(TARGET)

# 伪目标
.PHONY: all clean

执行make即可生成可执行文件。运行将间隔1s循环读取按键值。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值