蓝桥杯嵌入式按键

蓝桥杯嵌入式学习日记(三)——按键的长按、短按与双击(三行按键法)【STM32】【HAL库】 我们所使用这类按键时,当按键按下,内部的机械触点因为弹性,并不会立马导通,同样松开时也不是立马分离,而是会产生一连串的抖动,这段时间大概在5~10ms,为了防止紊乱我们要进行消抖。这里我选择利用uwTick进行软件延时,实际情况中也可以使用定时器,但不建议使用HAL_Delay函数进行延时。想要理解这三行代码需要了解下最基本的与或知识,对于学过数电的同学可能已经掌握,可以直接跳过。这里跟上面三行按键类似不再进行分析,如果有不会的可以在评论区询问。在了解上述内容后,后续只需要进行逻辑判断即可。 阅读详情

1.普通中断

STM32Cube配置

代码如下

#define  B1 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)
#define  LED1 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_8)
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin==GPIO_PIN_0)
	{
			  LED1;
	}
}#define  B1 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)
#define  LED1 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_8)
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin==GPIO_PIN_0)
	{
			  LED1;
	}
}

在处理防抖上还没有多想

2.定时器中断

选择为中断模式

选择上升沿产生中断

 打开中断

编写中断回调函数

//Key
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  if(GPIO_Pin==GPIO_PIN_0)
	{
	    if(led_state%2==0)
			 {
				   HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_SET);
			       HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET);
				   HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
				   HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
			 }
			 else
			 {
				   HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_SET);
			       HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_SET);
				   HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
				   HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
			 }
			     led_state++;
	}
}

3.轮询方式

采用每隔十毫秒扫描一遍的方式

GPIO配置为输入模式 

代码:

void TIME()
{
//     if(++led_count==1000){led_count=0;led_flag=1;}
	   if(++key_count==1000){key_count=0;key_scan=1;}
}
void Key_Scan()
{
	if(key_scan==1)
	{
			 switch (keystate)
			 {
				 case key_check:
				 {
						 if(B1==GPIO_PIN_RESET|B2==GPIO_PIN_RESET|B3==GPIO_PIN_RESET|B4==GPIO_PIN_RESET)
						 {
								keystate = key_press;
						 }
				 }
				 break;
				 case key_press:
				 {
							  if(B1==GPIO_PIN_RESET){keystate = key_release;key_value=1;}
						 else if(B2==GPIO_PIN_RESET){keystate = key_release;key_value=2;}
						 else if(B3==GPIO_PIN_RESET){keystate = key_release;key_value=3;}
						 else if(B4==GPIO_PIN_RESET){keystate = key_release;key_value=4;}
				 }
				 break;
				 case key_release:
				 {
						 if(B1==GPIO_PIN_RESET|B2==GPIO_PIN_RESET|B3==GPIO_PIN_RESET|B4==GPIO_PIN_RESET)
						 {
								 key_time = key_time+10;
						 }
						 else
						 {
								keystate = key_check;
								key_flag=1;
						 }
				 }
				 break;
			 }
	}
}

【STM32】基于蓝桥杯嵌入式开发板实现按键单击、双击、长按(通用模板) 基于蓝桥杯嵌入式开发板实现按键的单击,双击,长按检测与处理,使用定时器后台检测,防止占用前台资源,可以随便移植到任何单片机上。 阅读详情

相关推荐

蓝桥杯嵌入式之按位点灯 按键长按、短按、双击操作(附源码)

IO口控制寄存器讲解 OI口按位操作 按键双击、单击、长按 蓝桥杯

qq_41818650的博客 2125

蓝桥杯嵌入式学习记录——按键的使用

在STM32中,按键连接通常使用GPIO(通用输入/输出)端口来实现。当按键未被按下时,GPIO端口处于高电平状态(即1),当按键被按下时,GPIO端口会被拉低(即0)。因此,通过检测GPIO端口的电平状态变化,可以检测到按键是否被按下。为了防止按键抖动,通常需要使用软件消抖。消抖的方法通常是在检测到按键被按下时,等待一段时间,并再次检测GPIO端口的状态,只有当GPIO端口仍然处于低电平状态时,才认为按键被有效触发。

KAI的博客 2716

【蓝桥杯嵌入式】【模块】四、按键相关配置及代码模板

最近在准备16届的蓝桥杯嵌入式赛道的国赛,打算出一个系列的博客,记录STM32G431RBT6这块比赛用板上所有模块可能涉及到的所有考点,如果有错误或者遗漏欢迎各位大佬斧正。本文主要介绍了按键相关操作的模板代码,主要是按键的cubemx配置、单机、长按、双击。

m0_75114363的博客 1308

【蓝桥杯嵌入式备赛】其三:按键

按键按下,引脚电平为逻辑0,否则为逻辑1。

2201_75358123的博客 1971

蓝桥杯嵌入式按键扫描思路 笔记

按键有两种模式 ①支持连按(例如电视调台长按持续换台) ②不支持连按 C语言小知识 C语言关键字 static声明的静态变量,存储在静态存储区。 它在函数调用结束之后,不会被释放。它的值会一直保留下来。所以可以说static申明的局部变量,具有记忆功能。 Q:每次调用getValue函数之后,返回值是多少? int getValue(void) { int flag...

Walk_OnTheRoad的博客 1317

蓝桥杯嵌入式(G431)备赛笔记——按键模块设计

蓝桥杯嵌入式(G431)备赛笔记——按键模块设计

玄奕子的博客 1521

蓝桥杯嵌入式(三)按键配置

蓝桥杯嵌入式比赛所使用的是CT117E嵌入式竞赛板,板子上共有4个独立按键和一个复位按键,在进行按键配置前,我们需要先查看板子的原理图,知道这四个按键所连接的引脚。 由原理图可知,B1、B2、B3、B4四个按键分别对应PA0、PA8、PB1、PB2四个引脚。四个按键都连接了上拉电阻,所以都是低电平有效。 了解了按键的连接,接下来我们就可以对按键进行配置了,配置代码如下: void ...

Cola_Y的博客 3488

蓝桥杯嵌入式按键扫描函数

蓝桥杯比赛按键扫描是需要考生自己编写的,而按键也会考到长按和短按的功能,按键本身也需要消抖。 typedef enum { keycheck, //按键检测 keycpress, //按键按下 keyrelease, //按键释放 }KEY_State; KEY_State KeyState = keycheck ; 接着利用宏定义将按键的四个读入函数进行定义。 #define B1 HAL_GPIO_ReadPin(GPIOB,GPIO_

m0_59379785的博客 1330

【蓝桥杯嵌入式】定时器实现按键单击,双击,消抖以及长按的代码实现

使用定时器来判断按键是否按下,并加入按键消抖,其中有判断点击,双击与长按按键三种模式。简单介绍了定时器配置,以及写按键判断函数的思路。如何快速找到中断回调函数。

勾栏听曲_0的博客 1万+

NVIDIA DGX Spark 开发环境深度配置与优化指南

定期系统维护每月执行一次完整的系统更新监控存储空间使用情况,及时清理临时文件定期检查硬件健康状况开发习惯优化使用tmux或screen管理长时间运行的任务配置自动化测试和代码质量检查建立完善的项目文档体系性能调优周期每月重新评估和调整系统参数根据工作负载特点优化容器配置持续监控和记录性能指标DGX Spark作为一个强大的AI开发平台,其真正的价值需要通过精细的环境配置和优化才能充分发挥。本文提供的配置方案和建议均基于实际生产环境经验,旨在帮助开发者构建稳定、高效、可维护的开发环境。

time_days的博客 3688

RTOS任务调度原理:高优先级任务为何在低优先级任务执行时无法响应

实时操作系统(RTOS)的核心在于其确定性的任务调度机制,它通过优先级抢占确保关键任务及时执行。其基本原理是调度器仅在特定调度点(如任务主动阻塞、中断退出时)运行,比较就绪态任务的优先级并切换上下文。这一机制的技术价值在于为嵌入式系统提供可预测的响应时间,广泛应用于工业控制、汽车电子和物联网设备等对实时性要求高的场景。当低优先级任务执行**长时间非阻塞运算**且无中断发生时,调度器无法被触发,导致高优先级任务虽处于就绪态却无法获得CPU,造成系统响应延迟。理解**任务状态机**与调度点,是优化实时性、避免此

weixin_33508411的博客 287

蓝桥杯嵌入式——按键运用——分享

蓝桥杯嵌入式比赛用的是CT117E板子,它板载了复位键,K1,K2,K3和K4。按键的使用是比赛必考的,涉及到短按键和长按键,这里就分享一下我学到的关于的按键代码。 一、按键初始化 查看原理图可知,K1,K2,K3和K4分别连接到PA0,PA8,PB1和PB2管脚。且当按键按下时,对应的GPIO读取到低电平。按键初始化代码如下: 二、按键读取及消抖 IDR是端口输入数据寄存器,(GPIOA-&...

weixin_45849079的博客 4272

Windows下快速搭建Kettle开发环境:基于9.4.0.0版本的保姆级教程

本文提供Windows系统下Kettle 9.4.0.0开发环境的详细搭建指南,涵盖源码获取、Maven配置优化、高效编译及部署运行全流程。通过实战验证的步骤和常见问题解决方案,帮助数据工程师快速完成环境配置,提升ETL开发效率。

weixin_28829479的博客 332

蓝桥杯嵌入式-按键

本文介绍了基于STM32的LCD显示与按键控制实现。主要内容包括:1)通过STM32CubeMX配置GPIO引脚;2)实现按键检测功能,包含下降沿、上升沿和长按三种触发方式;3)LCD界面切换控制,展示不同显示模式;4)提供完整代码下载链接。文章详细说明了按键状态检测算法和界面切换逻辑的实现方法,适用于蓝桥杯嵌入式竞赛相关开发。

weixin_58504813的博客 792

【实战】——零代码玩转Supervisely人像分割:从标注到模型训练的数据流水线搭建

本文详细介绍了如何零代码使用Supervisely平台搭建人像分割数据流水线,从智能标注到数据集格式转换,再到模型训练与优化。Supervisely的智能标注工具和协作功能大幅提升了人像分割项目的效率,特别适合视频会议背景虚化、虚拟试衣等应用场景。

weixin_30694389的博客 416

告别手动解析!用这个Qt库轻松处理Cat 21/62等18种Asterix航空数据

本文介绍了基于Qt框架的高效Asterix报文解析库,帮助开发者轻松处理Cat 21/62等18种航空数据。该库通过协议抽象化、多维度API设计和跨平台支持,解决了手动解析的复杂性和易错问题,显著提升开发效率和系统可靠性。

weixin_42529366的博客 208

【蓝桥杯嵌入式】长短按 按键

【蓝桥杯嵌入式】独立按键长短按

Demo_ns的博客 1300

大红球预警版-精选+自定义板块监控

这是一款简单易用的股票大单资金监控插件,兼容通达信软件,可嵌入分时图或定制版面。它以红绿圆球直观显示主力买卖情况(红球为买,绿球为卖),支持300万以上大单语音播报。插件提供实时资金流向分析、多股同时监控、自定义预警条件等功能,无需L2账号。用户可自由切换图形/列表模式,监控特定板块,并配合幻影软件实现自动交易。虽然上涨股通常红球占优,但需结合其他指标综合判断。该插件完全免费,包含详细视频教程,适合新手使用。

guleba的博客 1795

蓝桥杯嵌入式扩展板模块之按键

蓝桥杯嵌入式扩展板模块之按键硬件介绍Button.cButton.c函数实现的讲解Button.h总结 硬件介绍 U1S1这是我见到过最NB的硬件电路,我当时还以为是矩阵键盘,没想到它采用的是ADC采集它的分压值。。 其中ADC_Key你就把它当做一个ADC采集口,当S按键按下后,ADC采集的电压就会改变,所以你要做的就是根据采集电压的不同区判断是哪个按键被按下。有人可能会担心这样可能不精确会造...

qq_43605009的博客 1637

解决UNITE数据库注释高unassigned率:手把手教你训练专属真菌分类器(含预训练模型分享)

本文针对使用UNITE数据库进行真菌ITS序列注释时出现的高未分配率问题,提供了详细的实战解决方案。通过对比vsearch直接注释与Naive Bayes分类器的原理差异,文章手把手指导读者在QIIME 2环境中训练专属分类器,包括数据准备、模型训练、参数优化及效果验证,并分享了预训练模型,旨在显著提升真菌群落分析的注释准确性和数据利用率。

weixin_29214199的博客 338

【数据可视化-77】中国历年GDP数据可视化分析:Python + Pyecharts 深度洞察(含完整数据、代码)

通过上述可视化分析,我们可以清晰地看到中国历年GDP的变化趋势和产业构成。玫瑰图展示了2024年的产业构成,地图和柱状图展示了GDP的时空分布,双轴折线图和雷达图则分别展示了GDP总量与人均GDP的变化以及各行业的GDP贡献。希望这篇文章能帮助您更好地理解和分析中国历年GDP数据。如果您有任何问题或建议,欢迎在评论区留言!🎉。

qq_38614074的博客 1473

蓝桥杯嵌入式——按键的编写

按键在按下和抬起的过程分别会产生5-10ms的机械抖动,这个过程的电平高低是不确定的,所以需要进行消抖,具体方法是:利用定时器,每10ms进行一次计数,将按下一次按键的过程看作50ms,则只有当电平持续为0的那一段时间才为按键真正被按下的时间。

wlhuic的博客 371

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

蓝桥杯嵌入式——按键程序的书写

这里我的代码需要程序移植,有关程序移植可以查找相关资料(也可以不使用这种方法)

2401_84413786的博客 419

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

蓝桥杯嵌入式——按键

6.再次判断按键电平是否符合要求( if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0))==0 )3.读取按键的标志位( A0_state=HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) )4.判断按键电平是否符合按下要求( A0_state==0 && A0_last_state==1 )2.设置按键的初始标识符和末尾标识符( A0_state、A0_last_state )5.让原来的初始值变为末尾值( A0_last_state=A0_state )

ll190的博客 296

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【蓝桥杯嵌入式16届备赛】(三)按键篇

按键模块的介绍及讲解,其中我觉得按键的长短按是最重要的部分,如果你对于用定时器来实现按键扫描比较了解的话,这部分我相信是没有那么难以理解的,同时也要知道该如何进行使用。

2301_76500795的博客 5122

蓝桥杯嵌入式学习记录【按键】实现单击,双击,长按

按键模块的介绍及讲解,各种按键操作。

2301_80099602的博客 1352
上一篇: 蓝桥杯嵌入式LED
下一篇: 蓝桥杯嵌入式USART
蓝本生
博客等级 码龄6年 37粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝本生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值