本帖最后由 强仔00001 于 2015-6-10 00:25 编辑
上次分享到点亮板子的LED
,今天来点高级些的。用板子上的按键控制LED
的亮灭。现在这次是用非中断模式的方法,很简单粗暴的方法,就是直接检测IO
口的电平状态。当然在这之前要把按键的IO
设置为输入。然后就是在死循环里检测按键是否按下,一旦按下IO
就会被拉低,if((P1IN & GPIO_PIN4) == 0)
这语句就是检测P1.4
口是否按下,一旦按下就为低电平,进入下面的处理程序,在最后还加上了个松手检测,程序很简单,当然这个程序只能作为学习用的,实际项目中还有很大的改进。 这次用到的寄存器不是很多。主要用到PxIN,PxOUT,PxREN和PxDIR这4个即可,PxDIR用来设置管脚的方向。如下图的说明很明白了。
如下例子就是把P1.1和P1.4设置为输入:P1DIR |= 0x01;//设定P1.0为输出
然后就是把按键的IO
口设置为上拉,为啥要上拉呢??因为板子的按键直接是连接到单片机的IO
口的,如下图: 把他设置成上拉是为了降低外界干扰到这个IO的得到的电平状态,而且这样也规定了不按下按键时的电平为高。这个上拉寄存器配置很简单,写1就是上拉。如下图:
这里大家要注意一点,PxREN
这个寄存器只能控制IO
口带上拉或者下拉这两种情况的。具体是上拉还是下拉,还要靠PxOUT
这个寄存器控制,详细如下图: 所以当PxOUT = 1,PxREN= 1和PxDIR= 0时IO口即设置为输入上拉,当PxOUT = 0,PxREN= 1和PxDIR= 0时IO口设置为输入下拉模式。
- #include "msp.h" // Device header
- #include "driverlib.h"
- int main()
- {
- volatile uint32_t i;
-
- // Stop watchdog timer
- WDT_A_hold(WDT_A_BASE);
- P1DIR |= 0x01;//设定P1.0为输出
-
- P1SEL0 &= ~0x12;
- P1SEL1 &= ~0x12;
- P1DIR &= ~0x12;
- P1REN |= 0x12;
- P1OUT |= 0x12;
- while(1)
- {
- if((P1IN & GPIO_PIN1) == 0)
- {
- P1OUT ^= 0x01;
- while((P1IN & GPIO_PIN1) == 0);
- }
- if((P1IN & GPIO_PIN4) == 0)
- {
- P1OUT ^= 0x01;
- while((P1IN & GPIO_PIN4) == 0);
- }
- for(i=10000; i>0; i--);
- }
-
- }
- /***************************库的写法
- int main()
- {
- volatile uint32_t i;
-
- // Stop watchdog timer
- WDT_A_hold(WDT_A_BASE);
- //设定P1.0为输出
- GPIO_setAsOutputPin( GPIO_PORT_P1, GPIO_PIN0 );
- //Confinguring P1.1 & P1.4 as an input and enabling interrupts
- GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN1 | GPIO_PIN4);
-
-
-
- while(1)
- {
-
-
- // Delay
- if(GPIO_getInputPinValue(GPIO_PORT_P1,GPIO_PIN1) == 0)
- {
- GPIO_toggleOutputOnPin( GPIO_PORT_P1,GPIO_PIN0);
- while(GPIO_getInputPinValue(GPIO_PORT_P1,GPIO_PIN1) == 0);
-
- }
- if(GPIO_getInputPinValue(GPIO_PORT_P1,GPIO_PIN4) == 0)
- {
- GPIO_toggleOutputOnPin( GPIO_PORT_P1,GPIO_PIN0);
- while(GPIO_getInputPinValue(GPIO_PORT_P1,GPIO_PIN4) == 0);
- }
- }
-
- }
- ******************************************/
复制代码库函数很简单,可以建议初学者从库函数这个切入
这次新增了两个函数:
GPIO_setAsInputPinWithPullUpResistor这个函数是设置IO口为输入上拉
GPIO_getInputPinValue这个函数是读取某个IO的电平状态。
代码分享:
Key.zip
(302.75 KB, 下载次数: 0, 售价: 1 分芯积分)
最后做下广告,大家有时间帮我拉拉票,倒数第3就是我的
https://bbs.eeworld.com.cn/huodong/RIGOL20150527/