MSPM0G3507学习笔记之按键

电赛中由于移动设备受限制,所以按键就成了我们比赛中比较常用的外设,在此备赛期间记录一下如何正确使用按键。

首先,我使用的板子是无名创新家的板子,板载了一个五向按键,以及五个普通按键,所以比赛时应该是不需要再去接按键了。

话不多说上代码!(用的是例程加以学习)

#include "ti_msp_dl_config.h"

void delay_ms(uint16_t ms)
{
	while(ms--)
		delay_cycles(CPUCLK_FREQ/1000);
}

int main(void)
{
	SYSCFG_DL_init(); //芯片资源初始化,由SysConfig配置软件自动生成
	while(1)
	{
		if(DL_GPIO_readPins(KEY_PORT,KEY_S1_PIN))//按下为高电平
		{
			delay_ms(10);
			if(DL_GPIO_readPins(KEY_PORT,KEY_S1_PIN))//延时之后再次检测
			{
				while(DL_GPIO_readPins(KEY_PORT,KEY_S1_PIN));//等待按键释放
				DL_GPIO_togglePins(PORTB_PORT,PORTB_RGB_R_PIN);//电平翻转驱动LED	
			}
		}
		
//		if(!DL_GPIO_readPins(PORTB_PORT,PORTB_S2_PIN))//按下为低电平
//		{
//			delay_ms(10);
//			if(!DL_GPIO_readPins(PORTB_PORT,PORTB_S2_PIN))//延时之后再次检测
//			{
//				while(!DL_GPIO_readPins(PORTB_PORT,PORTB_S2_PIN));//等待按键释放
//				DL_GPIO_togglePins(PORTB_PORT,PORTB_RGB_G_PIN);//电平翻转驱动LED	
//			}
//		}	
		
		if( DL_GPIO_readPins(PORTB_PORT, PORTB_S2_PIN) > 0 )
                {
                        DL_GPIO_clearPins(PORTB_PORT,PORTB_RGB_G_PIN);  //LED控制输出高电平
                }
                else//如果PA18引脚为低电平
                {
                      DL_GPIO_setPins(PORTB_PORT,PORTB_RGB_G_PIN);//LED控制输出低电平
                }            
		
		if(!DL_GPIO_readPins(PORTB_PORT,PORTB_S3_PIN))//按下为低电平
		{
			delay_ms(10);
			if(!DL_GPIO_readPins(PORTB_PORT,PORTB_S3_PIN))//延时之后再次检测
			{
				while(!DL_GPIO_readPins(PORTB_PORT,PORTB_S3_PIN));//等待按键释放
				DL_GPIO_togglePins(PORTB_PORT,PORTB_RGB_B_PIN);//电平翻转驱动LED	
			}
		}

		delay_ms(100);	
		DL_GPIO_togglePins(GPIO_LEDS_PORT,GPIO_LEDS_USER_TEST_PIN);//电平翻转驱动LED			
	}
}

在这里我分别实验了几种按键的扫描方式,值得注意的是在图形化配置中的几个小细节,比如说在配置五向按键的时候不同普通按键需要下拉电阻,而是上拉电阻。(由于五向按键板载在PB口)

还有一点就是电平的读取,使用函数 uint32_t DL_GPIO_readPins(GPIO_Regs* gpio, uint32_t pins)可以读取引脚的状态。

需要输入两个参数:

gpio:读取的GPIO端口。G3507芯片有GPIOA,GPIOB两个端口,这里按键一(BSL)选择GPIOA,按键二(K1)是连接PB21,五向按键之一的上按键连接PB12,由于都是板载资源不多解释

pins:读取的引脚号。根据我们sysconfig配置的引脚名称,写入。

它会返回的参数:

类型为uint32_t ,返回的是对应引脚的状态位。所以我们就可以通过他的返回值是否大于0来判断,例程中使用的是通过普通的方法也可以实现。  个人认为这么写更加严谨:

	if( DL_GPIO_readPins(PORTB_PORT, PORTB_S2_PIN) > 0 )

OK

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值