STM32F103C8T6按键实现LED灯亮灭

概述:使用两个按键分别控制两个灯的亮灭。按键A(PA_1)使用上拉的方式控制LED0(PC_13)亮灭,按键B(PA_2)使用下拉的方式控制LED1(PA_0)亮灭。

一.上拉与下拉的区别

上拉:没有按键输入的时候是1,由万用表测得该管脚是3.3V, 有键按下时是0 ;
下拉:没有按键输入的时候是0,由万用表测得该管脚是0V, 有键按下时是1;

二.设计外电路(LED与按键)

两个LED灯:
由于STMF103C8T6的PC_13上挂载了一个LED灯,所以可以将其作为LED0;
在这里插入图片描述
在洞洞板上焊接LED1,如图:
在这里插入图片描述
在洞洞板上焊接两个按键:
在这里插入图片描述

三.Keil5代码分析

LED初始化:

void LED_Init(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE);	 //使能PA,PC端口时钟
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;				 //LED0-->PA.0 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
 GPIO_Init(GPIOA, &GPIO_InitStructure);					 //根据设定参数初始化GPIOA.0
 GPIO_SetBits(GPIOA,GPIO_Pin_0);						 //PA.0 输出高

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;	    		 //LED1-->PC.13 端口配置, 推挽输出
 GPIO_Init(GPIOC, &GPIO_InitStructure);	  				 //推挽输出 ,IO口速度为50MHz
 GPIO_ResetBits(GPIOC,GPIO_Pin_13); 					 //PC.13 输出低 
}

KEY初始化:

void KEY_Init(void)
{
	
	GPIO_InitTypeDef GPIO_InitStructure;

 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能PORTA时钟

	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试
	
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_1;//PA15
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
 	GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA15
	
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_2;//PC5
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //设置成下拉输入
 	GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOC5
 }

在KEY_Scan中通过LED0GPIO_ReadInputDataBit()读取键值,通过返回值控制LED灯的亮灭

 int main(void)
 {	
	u8 t=0;	  			 	//获得键值
	delay_init();	    	//延时函数初始化	  
	LED_Init();		  	 	//初始化LED
	KEY_Init();          	//初始化按键
	LED0=0;					//点亮LED
	while(1)
	{
		t=KEY_Scan(0);		//得到键值
		switch(t)
		{				 
			case KEY0_PRES:
				LED0=!LED0;
				break;
			case KEY1_PRES:
				LED1=!LED1;
				break;
			default:
				delay_ms(10);	
		} 
	}		 
}
  • 13
    点赞
  • 133
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值