GPIO Key 控制LED灯

本文介绍了一种基于LPC17xx微控制器的GPIO按键控制LED的实现方法。通过初始化GPIO引脚作为输入和输出,实现了按键检测和LED状态控制。文章详细描述了按键扫描函数和延时函数的实现,以及主循环中根据按键状态控制LED亮灭的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GPIO 按键控制LED

在这里插入图片描述
硬件上电后P0_26、P1_31引脚被3v电源拉高,按键KEY1、KEY2按下后引脚又被拉低。
以P0_26为例,其中 LPC_GPIO0的寄存器FIOPIN的第26bit状态值开机时为1,按键按下后又变为0.

#include "LPC17xx.h"

void delay(unsigned int i)
{
unsigned int n;
	while(i>1)
	{
		for(n=655535; n>1; n--);
		i--;
	}
}

unsigned char key_scan(void)
{
	unsigned int val;
	unsigned char key,i;
	key = 0;
		
	val = LPC_GPIO0->FIOPIN;
	if((val&1<<26)==0)
	{		
		key+=1;
	}
	key=key<<1;
	
	val = LPC_GPIO1->FIOPIN;
	if((val&1<<31)==0)
	{
		key+=1;
	}
	
	switch(key)
	{
		case 0x00:
			i=0;
			break;	
		case 0x01:
			i=1;
			break;
		case 0x02:
			i=2;
			break;
	}
	return i;
}

void key_init(void)
{
	// key1 P0_26 key2 P1_31	
	LPC_GPIO0->FIODIR3 = 0x00; // P0_26 as input
	LPC_GPIO1->FIODIR3 = 0x00; // P1_31 as input	
}

void led_init(void)
{
	LPC_GPIO2->FIODIR0 = 0x0f; //p2_0 p2_1 p2_2 p2_3 as output
	LPC_GPIO2->FIOCLR0 = 0x0f; // 4 gpios output low
}

int main()
{
	unsigned char val;
	uint32_t i;
	
	SystemInit();	
	key_init();
	led_init();
	
	while(1)
	{
		val= key_scan();
		delay(1);
		
		if(val == 0) //no key push down led off
			LPC_GPIO2->FIOSET0 = 0x0f;
			
		if(val ==1) // push key2 down led on
		{
			LPC_GPIO2->FIOCLR0 = 0x0f;
			delay(200);
		}
		
		if(val == 2) //key1 push down leds flashing
		{	
			for(i=0;i<4;i++)
			{
			LPC_GPIO2->FIOCLR = 1<<i;
			delay(10);
			}
			LPC_GPIO2->FIOSET0 = 0x0f;
			delay(10);		
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值