历史上的今天
今天是:2024年10月16日(星期三)
2018年10月16日 | STM32之按键操作
2018-10-16 来源:eefocus
这次分享的是一个独立按键控制LED灯亮灭的程序。
具体功能如下:
KEY1-----LED1
KEY2-----LED2
KEY3-----LED3
KEY4-----(通过按下的次数分别控制LED1,LED2,LED3)
首先出于个人习惯,将按键和LED全部使用宏定义来操作,这样可以减少繁琐的函数输入
具体实现如下:
#define KEY1 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)//读取按键KEY1的值,赋值给KEY1
#define KEY2 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1)//读取按键KEY2的值,赋值给KEY2
#define KEY3 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2)//读取按键KEY3的值,赋值给KEY3
#define KEY4 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)//读取按键KEY4的值,赋值给KEY4
#define LED1_L GPIO_SetBits (GPIOB,GPIO_Pin_5)//控制LED1亮
#define LED2_L GPIO_SetBits (GPIOD,GPIO_Pin_6)//控制LED2亮
#define LED3_L GPIO_SetBits (GPIOD,GPIO_Pin_3)//控制LED3亮
#define LED1_H GPIO_ResetBits(GPIOB,GPIO_Pin_5)//控制LED1灭
#define LED2_H GPIO_ResetBits(GPIOD,GPIO_Pin_6)//控制LED2灭
#define LED3_H GPIO_ResetBits(GPIOD,GPIO_Pin_3)//控制LED3灭
这一部分时函数体的声明:主要包括系统初始化函数和GPIO初始化函数,
void RCC_Configuration(void);//函数体声明
void GPIO_Configuration(void);
主函数如下:
int main()
{
RCC_Configuration();//系统时钟初始化
GPIO_Configuration();//端口初始化
while(1)
{
int i;
if(KEY4==Bit_RESET)//如果检测到第四个按键按下
{
delay_ms(100);//延时10ms消抖
if(KEY4==Bit_RESET)
{
i++;
if(i>=4)
i=1;
switch(i)
{
case 1:LED1_H;delay_ms(50);break;
case 2:LED2_H;delay_ms(50);break;
case 3:LED3_H;delay_ms(50);break;
default:LED1_L;LED2_L;LED3_L;break;
}
}
}
else
if(KEY1==Bit_RESET)
LED1_H;
else
if(KEY2==Bit_RESET)
LED2_H;
else
if(KEY3==Bit_RESET)
LED3_H;
else
{
LED1_L;LED2_L;LED3_L;
}
}
}
系统初始化函数:
void RCC_Configuration(void)
{
SystemInit();//系统初始化
SystemInit();//系统初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能GPIOB时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);//使能GPIOD时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能GPIOC时钟
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure,GPIO_InitStructure1,GPIO_InitStructure2;//初始化GPIO结构体
//初始化LED
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;//选中B5引脚
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//设置最高输出速率
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//设置GPIO工作模式为推挽输出
GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化GPIOB
GPIO_InitStructure1.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_6;//选中D3,D6
GPIO_InitStructure1.GPIO_Speed=GPIO_Speed_50MHz;//设置最高输出速率
GPIO_InitStructure1.GPIO_Mode=GPIO_Mode_Out_PP;//设置GPIO工作模式为推挽输出
GPIO_Init(GPIOD,&GPIO_InitStructure1);//初始化GPIOD
//初始化KEY K1-PTC5; K2-PTC1;K3-PTC2;K4-PTC3
GPIO_InitStructure2.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_5;
GPIO_InitStructure2.GPIO_Mode=GPIO_Mode_IPU;//设置按键的端口为上拉输入
GPIO_Init(GPIOC,&GPIO_InitStructure2);//初始化GPIOC
}
上一篇:STM32系统初始化模板函数
下一篇:STM32之SysTick时钟
史海拾趣
|
本公司专业于工业自动化,承接自动化工程,销售自动化产品,各种最新自动化软件。为了让大家更深入地学习和维护好工业设备,本公司特设本店,为同行提供各种编程软件、解密软件。如有需要的,联系QQ;850935077。超宇工控特价供应:西门子s7-200全系列 ...… 查看全部问答> |
|
有对ARM感兴趣的朋友,请到本站ARM版块看看。 本实活动侧重于动手实验。欢迎大家跟着我们一起做。 https://bbs.eeworld.com.cn/thread-73857-1-1.html https://bbs.eeworld.com.cn/thread-74133-1-1.html… 查看全部问答> |
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 移动电视接收前端必须具有在远离发射器条件下工作所需的灵敏度,而且在有强信号时还能容忍过载。可被整集成到车载娱乐(ICE)系统,以及手机、便携式数字助理(PDA)、笔记本电脑等多种便携式电子 ...… 查看全部问答> |
|
协议中有一个地方说: 数据 定义 传送格式 1100 1000B 浮点读 43H 38H 1100 1001B 浮点写 43H 39H 我怎么也没看明白, 1 ...… 查看全部问答> |
|
行为级描述目的是加快仿真速度,做法是尽量减少一个always块中要执行的语句数量,其结果不是为了综合RTL级描述是为了综合工具能够正确的识别而编写的代码,verilog中有一个可综合的子集,不同的综合工具支持的也有所不同… 查看全部问答> |
|
想了解一下各位买了万利的EK-STM32F的开发板,板子上面附带的那个内嵌ST-LINK II仿真器性能如何?是否会出现 ...… 查看全部问答> |
|
本帖最后由 tiankai001 于 2014-5-21 00:04 编辑 Allegro初学者图解教程 【1】如何让空心圆圈焊盘正常地实体显示?如何将拐角那些断线平滑过渡显示?打开Allegro 自带的PCB 文件cds_routed.brd 你会看到焊盘是圆圈显示,走线拐角有断接痕迹。那 ...… 查看全部问答> |




