历史上的今天
返回首页

历史上的今天

今天是:2025年03月28日(星期五)

正在发生

2019年03月28日 | STM32F103学习笔记(一):简单的按键程序

2019-03-28 来源:eefocus

通过几个按键,来控制LED灯的开关状态。没有涉及到中断,只是简单的按键程序


程序包括key.c,key.h;led.c,led.h;以及main函数


一、LED程序

led.h


#ifndef __LED__H

#define __LED__H

 

#include "stm32f10x.h"

#include "sys.h"

 

#define LED1 PBout(8)// PB8

#define LED2 PBout(9)// PB9

 

void LED_Init(void);

 

 

#endif

led.c


#include "stm32f10x.h"

#include "led.h"

 

void LED_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_SetBits(GPIOB,GPIO_Pin_8);

GPIO_SetBits(GPIOB,GPIO_Pin_9);

}

 


二、KEY程序

按键采用上拉输入,外接上拉电阻


key.h


#ifndef __KEY__H

#define __KEY__H

#include "sys.h"

#include "stm32f10x.h"

 

#define S1  GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)//读取按键1

#define S2  GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)//读取按键2

#define S3  GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)//读取按键3

#define S4  GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4)//读取按键4

 

#define KEY_ON 0

#define KEY_OFF 1

 

 

void KEY_Init(void);

u8 KEY_Scan(GPIO_TypeDef* GPIOx, u16 GPIO_Pin);

 

#endif

key.c


#include "key.h"

#include "delay.h"

 

void KEY_Init(void)

{

  GPIO_InitTypeDef GPIO_InitStructure;

 

//打开PA口时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;

//端口速度

  //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

//端口模式,此为输入上拉模式

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

 

  GPIO_Init(GPIOA, &GPIO_InitStructure);


}

 

u8 KEY_Scan(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)

{

/*检查是否有按键按下*/

if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON)

{

/*延时消抖*/

delay_ms(50);

if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON)

{

/*等待按键释放*/

while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON);

return KEY_ON;

}

else

return KEY_OFF;

}

else

return KEY_OFF;

}

 

主函数


#include "key.h"

#include "led.h"

#include "delay.h"

#include "sys.h"

 

//LED灯闪5下

 

int main(void)

{

u8 i;

LED_Init();//LED初始化

  KEY_Init();//按键初始化

  delay_init();//延时初始化




while(1)

{

LED1=1;

LED2=1;

if(KEY_Scan(GPIOA,GPIO_Pin_3) == KEY_ON)

{

for(i=0;i<5;i++)

{

LED1=1;delay_ms(200);

LED1=0;delay_ms(200);

}


}

if(KEY_Scan(GPIOA,GPIO_Pin_4) == KEY_ON)

{

for(i=0;i<5;i++)

{

LED2=1;delay_ms(100);

LED2=0;delay_ms(100);

LED1=1;delay_ms(100);

LED1=0;delay_ms(100);

}


}

}

}

 

 

程序很简单,通过扫描GPIO端口电平的状态,来判断按键是否按下


推荐阅读

史海拾趣

方向电子公司的发展小趣事

机顶盒,全称为数字视频变换盒,是连接电视机与外部信号源的关键设备,具有高度的专业性和广泛的应用性。从广义上讲,凡是能与电视机连接并处理音视频信号的网络终端设备均可视为机顶盒。它不仅能够接收来自有线电缆、卫星天线、宽带网络及地面广播的数字电视信号,还能通过内置的解码器将这些信号转换为电视机可识别的格式,从而呈现出高清乃至4K的超高清画质,大大提升了观看体验。

机顶盒不仅限于基本的电视信号接收功能,还集成了多种增值服务。例如,它提供电子节目指南,让用户轻松查找和预约节目;支持因特网网页浏览,实现网络购物、在线视频观看、游戏娱乐等多元化互动体验。随着智能化技术的发展,现代机顶盒还融入了语音助手、智能推荐等功能,进一步提升了用户的操作便捷性和内容个性化程度。

在技术层面,机顶盒的发展日新月异,不断向高清化、智能化方向迈进。5G技术的应用更是为机顶盒带来了更快的传输速度和更低的延迟,为用户提供了更为流畅的观影体验。此外,虚拟现实和增强现实技术的融入,也为机顶盒的未来发展打开了新的想象空间,将为用户带来更为沉浸式和互动式的观影享受。

综上所述,机顶盒作为现代家庭娱乐的重要组成部分,不仅极大地丰富了人们的电视观看体验,还通过不断的技术创新和服务升级,满足着用户日益多样化的需求。

Elektron公司的发展小趣事

Elektron公司的故事始于1942年,由威利·科伯以Elektron物理技术设备工厂Kerber的名称成立。当时,该公司主要生产基于汞蒸气整流器的固定电池电源和船用电池充电器。这些产品在市场上取得了良好的反响,为公司的发展奠定了坚实的基础。在随后的几年里,Elektron不断扩大产品范围,开始涉足汽车行业的电池充电器以及焊接和切割工艺的电源等领域。

Array Microsystems Inc公司的发展小趣事

为了支持公司的快速发展和技术创新,Array Microsystems Inc高度重视人才引进和团队建设。公司积极招聘业内优秀的技术人才和管理人才,为他们提供良好的工作环境和福利待遇。同时,公司还注重员工的培训和晋升机制,鼓励员工不断学习和成长。这些措施使得Array Microsystems Inc拥有了一支高素质、专业化的团队,为公司的发展提供了有力的人才保障。

EPSON公司的发展小趣事

近年来,EPSON积极响应数字化时代的趋势,不断进行技术革新和数字化转型。公司加大了对人工智能、物联网等前沿技术的研发投入,推出了一系列智能化、数字化的电子产品和解决方案。这些创新产品不仅满足了客户日益多样化的需求,还进一步巩固了EPSON在电子行业的领先地位。同时,EPSON还积极推动数字化转型在内部管理、供应链等方面的应用,以提高企业的运营效率和市场竞争力。

百蓉(ECE)公司的发展小趣事

随着公司的发展,百蓉公司意识到技术创新是保持竞争力的关键。他们决定投入更多资源在研发上,特别是集成电路设计领域。经过几年的努力,百蓉成功开发出了一系列高效能、低功耗的集成电路芯片,广泛应用于消费电子、汽车电子和工业控制等领域。这些芯片在市场上大受欢迎,进一步提升了百蓉在电子行业中的地位。

Anritsu公司的发展小趣事

随着公司的发展,百蓉公司意识到技术创新是保持竞争力的关键。他们决定投入更多资源在研发上,特别是集成电路设计领域。经过几年的努力,百蓉成功开发出了一系列高效能、低功耗的集成电路芯片,广泛应用于消费电子、汽车电子和工业控制等领域。这些芯片在市场上大受欢迎,进一步提升了百蓉在电子行业中的地位。

问答坊 | AI 解惑

cd4069资料

大家看看吧…

查看全部问答>

可编程帝国的创始人Ross Freeman

他曾经是一位IC设计工程师,他勇于想象,敢于挑战权威,在他35岁时,他创造出一个改变半导体产业格局的新器件,缔造出一个新的半导体帝国,但41岁时,他英年早逝,将财富、景仰与遗憾留于后人。 他,就是FPGA的发明人了,Ross Freeman。“当他描述 ...…

查看全部问答>

看着公司的目前的业绩,我心里发慌

2010年第一季度过去,工厂开工严重不足,公司营业额部不到2009的第一度的1/4。在此情况下,公司出招,减员增效。如果公司第二季度销售如不见起色,我估计就就有更狠招数过来。大虾们,估计是啥招?…

查看全部问答>

经过升入了解LM3S8962,规划用LM3S8962开发三款产品

1. 数字式光源; 2.LED数字控制器 3.工业监控系统 头疼的是,该芯片功耗有点大,据说芯片价格有点高,阻碍大规模使用的障碍!…

查看全部问答>

DIY示波器2.0——完成了HMI板的设计

在做完HSMC转接板后,   我们完成了HMI板的设计和PCB绘制,   目前也已发到PCB厂家做板,   该板实现的功能:系统的人机界面模块,主要包含了3.5寸的TFT LCD、按键、编码器旋钮以及扩展功能USB通讯接口。   预计一周后板 ...…

查看全部问答>

WinCE 上的OpenGL ES 开发

想咨询WinCE 上可不可以利用OpenGL ES开发动画,我的主板是PCM9375(CPU为X86的结构)? 如果可以实现,大体怎样实现? 谢谢各位了!…

查看全部问答>

新手提问

来了之后发现世界好大啊,我想问DSP设计,编程方面的问题,发在哪个版块合适?…

查看全部问答>

Quartus 安装时,出现一个问题,请指点

最近使用Quartus7.2老是出问题。 然后就重装一次 发现licence无效(使用破解器破解的,但是我只是学习而已,没有从事商业目的啊)  无法使用。于是全部卸载后,就将网络断开,重新安装。   安装并破解后,将网络恢复。发现不支持EP2 ...…

查看全部问答>

FIR滤波程序(求解答)

大家好,因项目需要,我需要做个FIR滤波器程序,可是根据参考程序,自己设计的还是不行,今天实在没有办法了,把程序重要部分贴上来,大家帮我解答一下吧,谢谢了!!   #include \"DSP28_Device.h\" #include\"math.h\" //FIR相关参数 ...…

查看全部问答>

如何提高STM32的学习效率?

转 第一章笔者的入门总结 每当我们在入门之前(ARM是这样,DSP也一样),总会会有很多疑问,会有很多顾虑。我们渴望知道学习STM32前景如何?需要啥基础?难不难?适不适合我?但是什么时候能心潮澎湃地、相当着急地开始学STM32?日子在一天 ...…

查看全部问答>