Linux button按键驱动 多次中断控制相应LED灯亮灭闪
来源:互联网 发布:失业金数据与非农数据 编辑:程序博客网 时间:2024/05/18 02:11
下午的时候完成了按键驱动的测试程序,接下来贴上新鲜出炉的按键控制相应LED灯亮灭闪的程序。
实现功能:按第一下LED亮,再按一下则闪,第三下熄灭LED。
/********************************************************************************* * Copyright: (C) 2015 songyong<handy_skyoutlook.com> * All rights reserved. * * Filename: copy.c * Description: This file * * Version: 1.0.0(2015年04月18日) * Author: sky <handy_sky@outlook.com> * ChangeLog: 1, Release initial version on "2015年04月18日 19时17分14秒" * ********************************************************************************/#include<stdio.h>#include<stdlib.h>#include<fcntl.h>#include<unistd.h>#include<sys/ioctl.h>#include<sys/time.h>#define PLATDRV_MAGIC 0x60#define LED_OFF _IO (PLATDRV_MAGIC, 0x18)#define LED_ON _IO (PLATDRV_MAGIC, 0x19)#define LED_BLINK _IO (PLATDRV_MAGIC, 0x1A)#define BUTTON_STATUS 4 #define KEY1 0x1 #define KEY2 0x2 #define KEY3 0x4 #define KEY4 0x8 /******************************************************************************** * Description: * Input Args: * Output Args: * Return Value: ********************************************************************************/int main (int argc, char **argv){ int i = 1; int j = 1; int k = 1; int l = 1; int button_fd; int led_fd; int ret; int current_button; button_fd = open("/dev/button",0); if(button_fd < 0) { printf("Open buttons device faild!\n"); exit(1); } led_fd = open("/dev/led",O_RDWR); if(led_fd < 0) { printf("Open led device faild!\n"); exit(1); } while(1) { if (ret != sizeof(current_button) ) { printf("Read button device faild.\n"); } else if(current_button == KEY1) { switch(i%3) { case 1: ioctl(led_fd,LED_ON,0); i++;break; case 2: ioctl(led_fd,LED_BLINK,0); i++;break; case 0: ioctl(led_fd,LED_OFF,0); i++;break; } } else if(current_button == KEY2) { switch(j%3) { case 1: ioctl(led_fd,LED_ON,1); j++;break; case 2: ioctl(led_fd,LED_BLIKN,1); j++;break; case 0: ioctl(led_fd,LED_OFF,1); j++;break; } } else if(current_button == KEY3) { switch(k%3) { case 1: ioctl(led_fd,LED_ON,2); k++;break; case 2: ioctl(led_fd,LED_BLINK,2); k++;break; case 0: ioctl(led_fd,LED_OFF,2); k++;break; } } else if(current_button == KEY4) /* { switch(l%3) { case 1: ioctl(led_fd,LED_ON,3); l++;break; case 2: ioctl(led_fd,LED_BLINK,3); l++;break; case 0: ioctl(led_fd,LED_OFF,3); l++;break; } } } close(button_fd); close(led_fd); return 0;} /* ----- End of main() ----- */
</pre>当然你也可以在一开始利用select来监听,当可读是就进行读取<pre name="code" class="html"> FD_ZERO(&rds); FD_SET(fd,&rds); ret=select(fd+1,&rds,NULL,NULL,NULL); if(ret<0) { printf("select failure\n"); exit(1); } if(ret==0) { printf("select timeout\n"); } else if(FD_ISSET(fd,&rds)) { read(fd,&but_status,sizeof(but_status)); }
交叉编译生成button_song_led 后具体到开发板上面
因为是两个驱动,所以一定要insmod plat_led与plat_button两个驱动。
chmod 777 button_song_led
./button_song_led 后就可以通过按键来控制相应的LED灯的亮灭了。
1 0
- Linux button按键驱动 多次中断控制相应LED灯亮灭闪
- tiny6410 Linux 按键控制LED驱动
- linux驱动按键控制led灯
- 按键控制led驱动
- 按键控制led驱动
- ok6410学习笔记(16.按键中断控制led驱动)
- 中断-按键控制LED灯
- mini2440 按键控制LED 驱动
- Linux驱动开发--通过按键控制led灯
- LED驱动及按键中断(未实验)
- tiny 6410按键中断控制LED灯
- 中断——按键控制LED状态
- S3C2410 按键控制LED(中断)
- 从ARM裸机看驱动之按键中断方式控制LED(一)
- 从ARM裸机看驱动之按键中断方式控制LED(二)
- 4412驱动-fifth_fasyn 控制led 蜂鸣器 按键
- linux驱动之按键中断
- linux按键中断驱动示例
- 多列索引实验
- 统计字符数判断一个由a~z这26个字符组成的字符串中哪个字符出现的次数最多。
- eclipse: building cdt
- ECB CBC and 3DES
- 黑马程度员——OC语言—— 内存管理原则
- Linux button按键驱动 多次中断控制相应LED灯亮灭闪
- UILabel添加点击事件
- struts2学习之访问Servlet对象的两种实现方式
- java学习路线2
- [LeetCode]Word Search
- spring容器使用外部文件
- 排序算法之选择排序
- 学英语《每日一歌》之right here waiting
- 安卓中的socket通讯