历史上的今天
返回首页

历史上的今天

今天是: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

  
}


推荐阅读

史海拾趣

AUSTIN公司的发展小趣事

AUSTIN公司的创始人是赫伯特·奥斯汀(Herbert Austin)。在1905年,他制造了第一辆奥斯汀汽车,这标志着奥斯汀品牌的诞生。随着产品的推出,奥斯汀汽车很快获得了市场的认可,销量逐年攀升。直到1914年左右,奥斯汀始终是英国汽车工业的领导者,其汽车产品以高质量和可靠性而闻名。

Fischer Connectors公司的发展小趣事

AUSTIN公司的创始人是赫伯特·奥斯汀(Herbert Austin)。在1905年,他制造了第一辆奥斯汀汽车,这标志着奥斯汀品牌的诞生。随着产品的推出,奥斯汀汽车很快获得了市场的认可,销量逐年攀升。直到1914年左右,奥斯汀始终是英国汽车工业的领导者,其汽车产品以高质量和可靠性而闻名。

HTSEMI( Jin Yu Semiconductor )公司的发展小趣事

面对全球制造业的数字化转型趋势,金宇半导体于2015年启动了智能制造项目。公司投入巨资引进先进的自动化生产线和智能管理系统,实现了从原材料采购、生产制造到产品测试的全程数字化管理。这一举措不仅大大提高了生产效率和产品质量,还降低了运营成本,增强了企业的竞争力。同时,金宇半导体还积极探索工业互联网、大数据等新技术在半导体制造领域的应用,为企业的未来发展注入了新的动力。

Graseby Infrared公司的发展小趣事
检查控制线路的接线端子是否松动或腐蚀,导致接触电阻增大。
品赞(G-Switch)公司的发展小趣事
检查零序电流互感器是否损坏或老化,其输出信号是否正常。
Hokuriku公司的发展小趣事

在20世纪70年代,电子行业正处于快速发展期,对高精度、高稳定性的电子元器件需求激增。Hokuriku Electric凭借其深厚的技术积累,成功研发出新一代高精度金属板电阻器。这款电阻器不仅具有极低的温度系数和出色的长期稳定性,还大幅提升了电子设备的性能和可靠性。这一技术突破迅速赢得了市场的广泛认可,使Hokuriku Electric在电阻器领域崭露头角,为后续发展奠定了坚实基础。

问答坊 | AI 解惑

PLC/人机界面解密

本公司专业于工业自动化,承接自动化工程,销售自动化产品,各种最新自动化软件。为了让大家更深入地学习和维护好工业设备,本公司特设本店,为同行提供各种编程软件、解密软件。如有需要的,联系QQ;850935077。超宇工控特价供应:西门子s7-200全系列 ...…

查看全部问答>

ARM版的“救火车和你一起学ARM系列活动”已经开始了

有对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 ...…

查看全部问答>

Tornado仿真器不可用!?

不知道为什么,我按照帮助中的Tutoiral做的,可是调用仿真器时失败,不知道为什么,那位高人可以指点?谢谢!…

查看全部问答>

Verilog RTL级与行为级描述区别

行为级描述目的是加快仿真速度,做法是尽量减少一个always块中要执行的语句数量,其结果不是为了综合RTL级描述是为了综合工具能够正确的识别而编写的代码,verilog中有一个可综合的子集,不同的综合工具支持的也有所不同…

查看全部问答>

谁能够把ZLG的LM3S8962开发板的PCB板或者整个开发板做出来

谁能够把ZLG的LM3S8962开发板的PCB板或者整个开发板山寨出来,一定会有市场.…

查看全部问答>

调查一下,关于万利的EK-STM32F上面那个调试器性能

                                 想了解一下各位买了万利的EK-STM32F的开发板,板子上面附带的那个内嵌ST-LINK II仿真器性能如何?是否会出现 ...…

查看全部问答>

电子设计---参考书

实用电子电路设计制作例解.pdf…

查看全部问答>

Allegro初学者图解教程

本帖最后由 tiankai001 于 2014-5-21 00:04 编辑 Allegro初学者图解教程 【1】如何让空心圆圈焊盘正常地实体显示?如何将拐角那些断线平滑过渡显示?打开Allegro 自带的PCB 文件cds_routed.brd 你会看到焊盘是圆圈显示,走线拐角有断接痕迹。那 ...…

查看全部问答>