轮询方式处理按键
2016-04-07 21:32
162 查看
《朱老师物联网大讲堂》学习笔记
学习地址:www.zhulaoshi.org
按键影响电压,进而影响这个GPIO引脚的输入信号,
此时GPIO配置为输入模式,即可从SOC内部读取该引脚的电平为1还是0.
要先弄清楚各个开关对应的GPIO是哪个,
SW5 GPH0_2
SW6 GPH0_3
SW7 GPH2_0
SW8 GPH2_1
SW9 GPH2_2
SW10 GPH2_3
下面只是GPH0的数据手册部分,其它一样,
GPH0_2对应GPH0CON[2],也就是【11:8】
GPH0_3对应GPH0CON[3],也就是【15:12】
剩下的就不写出来了。
上面是控制寄存器,设置为输入模式后,就该读取数据了,也就是下面。
上面的GPH0CON有【0】到【7】,
下面的GPH0DAT也有【0】到【7】,
读取为1表示高电平,按键弹起,
读取为0表示低电平,按键按下。
轮询方式流程:
1.初始化GPIO模式为input,
2.循环读取GPIO的电平值,然后判断有无按键按下。
开始用的流水灯代码,结果跳不出来了,
因为进入一个分支后,就一直while(1)循环起来,出不来了。
学习地址:www.zhulaoshi.org
按键影响电压,进而影响这个GPIO引脚的输入信号,
此时GPIO配置为输入模式,即可从SOC内部读取该引脚的电平为1还是0.
要先弄清楚各个开关对应的GPIO是哪个,
SW5 GPH0_2
SW6 GPH0_3
SW7 GPH2_0
SW8 GPH2_1
SW9 GPH2_2
SW10 GPH2_3
下面只是GPH0的数据手册部分,其它一样,
GPH0_2对应GPH0CON[2],也就是【11:8】
GPH0_3对应GPH0CON[3],也就是【15:12】
剩下的就不写出来了。
上面是控制寄存器,设置为输入模式后,就该读取数据了,也就是下面。
上面的GPH0CON有【0】到【7】,
下面的GPH0DAT也有【0】到【7】,
读取为1表示高电平,按键弹起,
读取为0表示低电平,按键按下。
轮询方式流程:
1.初始化GPIO模式为input,
2.循环读取GPIO的电平值,然后判断有无按键按下。
#define GPH0CON 0xE0200C00 #define GPH0DAT 0xE0200C04 #define GPH2CON 0xE0200C40 #define GPH2DAT 0xE0200C44 #define rGPH0CON (*(volatile unsigned int*)GPH0CON) #define rGPH0DAT (*(volatile unsigned int*)GPH0DAT) #define rGPH2CON (*(volatile unsigned int*)GPH2CON) #define rGPH2DAT (*(volatile unsigned int*)GPH2DAT) void key_init( void ) { rGPH0CON &= ~(0xFF<<8); rGPH2CON &= ~(0xFFFF<<0); // 如果只是单纯设置这些位为0,直接赋值0就可以, // 但是为了以免波及无辜,所以这样不会破坏其它位的值 } void key_polling( void ) { //依次挨个去读取每个GPIO的值,判断其为1还是0, //若为1则弹起,为0则按下 while( 1 ) { if( rGPH0DAT & (1<<2) ) { led_one(); } else { led_two(); } } }要注意led_one和led_two的内部,不能是无限循环的,
开始用的流水灯代码,结果跳不出来了,
因为进入一个分支后,就一直while(1)循环起来,出不来了。
相关文章推荐
- JS Ajax实现文件上传
- sscanf 函数的作用
- 读《我是一只IT小小鸟》有感
- 说说我是如何一步一步的沦为美工沦为程序员的吧
- Ubuntu下git安装与使用
- Cocos2d-x学习笔记(10)(CCMenu菜单)
- Leetcode 49. Group Anagrams (242.Valid Anagram)
- Qt5 编程基础
- CCF-201512-2 消除类游戏(模拟)
- 并查集初学——吸血鬼
- CentOs下软件的安装
- CentOs下软件的安装
- 数据结构(7):树的存储结构
- 排列的递归和非递归版本
- 《世界是数字的》读后感
- EventLoop
- Hibernate实体关系映射—Annotation
- 关于初学者上传文件到github的方法
- IOS中UITableViewCell使用详解
- 67. Add Binary