在线时间7262 小时
UID3426478
注册时间2017-9-25
NXP金币5370
TA的每日心情 | 慵懒 昨天 10:39 |
---|
签到天数: 1873 天 连续签到: 4 天 [LV.Master]伴坛终老
超级版主
 
- 积分
- 112711
- 最后登录
- 2025-8-30
|
本帖最后由 stm1024 于 2018-11-5 17:26 编辑
前面通过LED的亮灭,测试过了GPIO的输出,接下来是测试一下GPIO作为输入。
废话少说,直接上代码:
- int main()
- {
- LPC_SYSCTL->SYSAHBCLKCTRL |= (1 << 6);
- LPC_GPIO->DIR[2] |= 1UL << 17;//red led,GPIO output
- LPC_GPIO->DIR[0] &= 0xfffffffd;//SW1, GPIO input
-
- while(1)
- {
- if(0==LPC_GPIO->B[0][1])//sw1 pressed
- {
- Delay_ms(50);
- if(0==LPC_GPIO->B[0][1])
- LPC_GPIO->NOT[2]=(1<<17);//toggle
- }
- }
- }
复制代码 这个程序的作用是在SW1的按键按下后,红色的LED会切换状态(取决于你按键的快慢,哈)。
关键语句分析:
LPC_GPIO->DIR[0] &= 0xfffffffd;//SW1, GPIO input
通过查看电路图:
可知SW1是连接P0的PIN1上的,DIR寄存器决定了PORT上各针脚的输入输出配置,该位为0,则是输入,该位为1,则是输出。
不过根据手册的说明,其实默认的配置是输入,所以这一句,在某些时候是可以省略的。
if(0==LPC_GPIO->B[0][1])//sw1 pressed
用于判断用户是否有按键按下,上图中可知,按下以后P0.1将和GND导通,因此是低电平。
在这个大循环中,又加上一个delay,用于按键消抖和给用户反应时间,所以实际把握不好的话,有时间按键按下,并没有切换。
当然这个程序纯粹只是为了测试GPIO的输入,实际意义不大,一般处理按键,应该采用的是中断方式,预知后事如何,且听下回分解。
|
|