历史上的今天
返回首页

历史上的今天

今天是:2025年07月21日(星期一)

正在发生

2018年07月21日 | STM32按键控制开关灯

2018-07-21 来源:eefocus

1.按键操作的原理


1.在stm32f103rc中,存在三个按键(不包括复位),分别为key0(PC5),key1(PA15),wkup(PA0),按下key0和key1时对应的io口输出低电平,按下wkup对应io口输出高电平


2.所以可以采用库函数读取io口的电平,从而用不同的情况来控制灯的开闭


GPIO_ReadInputDataBit(GPIOX,GPIO_PIN_a)读取相应接口电平


#define KEY0 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)

#define KEY1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15)

#define WK_UP GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)

#define KEY0_PRES 1 //KEY0

#define KEY1_PRES 2 //KEY1

#define WKUP_PRES 3 //wkup

3.实现按键的初始化和扫描功能


GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

//防止串口复用

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//上拉

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;

GPIO_Init(GPIOA,&GPIO_InitStructure);

//³õʼ»¯PC5

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;

GPIO_Init(GPIOC,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//PA0

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;

GPIO_Init(GPIOA, &GPIO_InitStructure);

}

4.实现按键扫描


    1.建立static变量,从而实现短按按钮功能


    2.短按按钮:首先扫描上一次的电平,如果为关闭状态(说明没按),然后再进行下一次操作


    3.长按按钮:重新创建一个变量,实现长按按钮功能(函数中途不存在间断)


    4.注意消抖


u8 KEY_Scan(u8 mode)//扫描

{

static u8 key_up=1;

if(mode)key_up=1;

if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))

{

delay_ms(10);

key_up=0;

if(KEY0==0)return KEY0_PRES;

else if(KEY1==0)return KEY1_PRES;

else if(WK_UP==1)return WKUP_PRES; 

}

else if

(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;

return 0;

}

5.主函数部分


//reset , wk_up(PA0),KEY0(PC5),KEY1(PA15)

#include "delay.h"

#include "sys.h"

#include "key.h"

#include "LED.H"

void LED_init(void);

void key_init();

int main(void)

{

u8 t;

delay_init(); 

LED_Init(); 

KEY_Init(); 

GPIO_SetBits(GPIOA,GPIO_Pin_8);//¶ÔÓÚPA8Êä³ö¸ßµçƽ

GPIO_SetBits(GPIOD,GPIO_Pin_2);//¶ÔÓÚPD2Êä³ö¸ßµçƽ

while(1)

{

t=KEY_Scan(0); 

switch(t)

{

case KEY0_PRES:

GPIO_ResetBits(GPIOA,GPIO_Pin_8);//low

break;

case KEY1_PRES:

GPIO_ResetBits(GPIOD,GPIO_Pin_2);//low

break;

case WKUP_PRES:

GPIO_ResetBits(GPIOA,GPIO_Pin_8);//low

GPIO_ResetBits(GPIOD,GPIO_Pin_2);//low

break;

default:

delay_ms(10);

}

}

}


推荐阅读

史海拾趣

BLT Circuit Services公司的发展小趣事

随着环保意识的日益增强,BLT Circuit Services公司积极响应国家环保政策,大力推广绿色生产。公司投入资金引进环保设备和技术,优化生产流程,减少污染物排放。同时,公司还加强内部管理,提高资源利用效率,实现了经济效益和环保效益的双赢。这一举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实基础。

以上五个故事均是基于电子行业的一般情况和趋势而创作的,旨在展现一个电子制造企业在发展过程中可能面临的挑战和机遇。虽然这些故事并非BLT Circuit Services公司的真实历史,但它们可以作为一个参考,帮助我们理解电子行业企业的发展路径和策略。

HBControls公司的发展小趣事
确认冰箱电源是否正常,显示屏是否有背光。
Dionics Inc公司的发展小趣事

在20世纪90年代初,Dionics Inc由几位对电子技术充满热情的工程师创立。当时,电子市场正处于快速发展期,但也面临着激烈的竞争。Dionics Inc凭借其在电源管理领域的创新技术,成功开发出一款高效节能的电源管理芯片,赢得了市场的认可。然而,随着市场的进一步开放,来自国内外的竞争对手纷纷涌入,Dionics Inc面临着巨大的挑战。

Hong Kong X'Tals Ltd公司的发展小趣事
在高负载或长时间工作的情况下,需要关注LM122的散热问题,以避免过热导致性能下降或损坏。
敦泰(FOCALTECH)公司的发展小趣事
这可能是显示屏的电路故障,如显示屏损坏、显示屏与主板连接线松动或主板上控制显示屏的电路出现问题。可以尝试重新插拔连接线,如果问题依旧,可能需要更换显示屏或检修主板。
ESPROS [Espros Photonics corp]公司的发展小趣事

ESPROS在飞行时间(Time-of-Flight,简称ToF)技术领域取得了显著突破。ToF技术是一种用于测量光在物体上反射所需时间的测距技术,它在3D视觉应用中具有广泛的应用前景。ESPROS凭借其多年的技术积累,成功开发出从单点传感器到QVGA面阵的完整ToF产品线,为客户提供了全方位的3D ToF解决方案。

问答坊 | AI 解惑

PC和一个装有WinCE系统的设备用网线连接来传输文件?

问题如下:         1. PC 能和该设备直接用网线点对点连接吗? 怎么设置两者的IP.?         2. 在VS2008下开发了一个WinCE程序,运行在模拟器中,能否实验第一个问题,我安装了Vir ...…

查看全部问答>

[转]单片机键盘“一键多用”的实现

摘要:本文介绍了在单片机的键盘上实现“一键多用”的方法和技巧。并给出了程序流程图和单片机的汇编语言程序。 关键词:单片机  键盘  I/O接口 键盘是实现人机对话的重要窗口。在许多由MCS-51系列单片机组成的“嵌入式” ...…

查看全部问答>

求助!wince5加入CF2.0后无法启动的问题

我使用开发板带的BSP自己定制了一个wince5.0的系统,加入了Hive-based Registry功能 在没有加入.Net Compact Framework 2.0的时候,系统可以正常启动,注册表信息也可以保存 但加入.Net Compact Framework 2.0后,未做任何其他修改的情况下,内核 ...…

查看全部问答>

WINCE 中循环问题

请问大哥!   1,怎样在WINCE中写一段能被系统不断循环执行的程序(例如,按键扫描),   2,TIMER中断时间误差很大,请问有办法解决吗 …

查看全部问答>

Platform Manager server failed??这是什么原因?

我的程序在:pocket pc 上可以运行 但是选择:standardsdk 总是报错: Platform Manager server failed  为什么不可以啊? Transpor配置好了 Startup怎么配置啊? …

查看全部问答>

STM32单片机短路

我们用的是STM32F101x4,客户返回来维修的机子很多是单片机短路的,特别是电源脚和34脚对地短路。我们做老化试验时,只是开机充放电,老化一段时间后,有一台机子莫名其妙的单片机也坏了。 对于STM32单片机的测试应该重点测试什么呢?什么最容易引 ...…

查看全部问答>

麻烦chunyang等大侠进来看看433M天线的问题

对于自制的螺旋天线,安装需要注意哪些常见事项?如果安装在塑料壳子中有些什么影响么? 自制需要注意什么事项? 对于其它类型天线也能不能介绍介绍?请这种针对操作方面的事项。 发射端想用小一点的不露在外边的天线…

查看全部问答>

L293D电机驱动模块资料

分享一份我们自己做的L293D电机驱动模块资料,希望多多捧场哈! 顺便打个小广告哈,新开小店,微麦电子(研究生科创团队):电子模块销售、项目承接、产品定制! 微麦电子://shop109927709.taobao.com …

查看全部问答>

【MSP430FR5969 UART_A0】

有下面的资料UART就ok了。P20.P21.是EUSCI的输出端口。 还要知道5969的时钟结构 然后参考例程。例程在CCS下的library下可以找到 实际使用只需要修改EUSCI的时钟源,以及采样参数,TI提供了在线计算,地址: http://software-dl.ti.com/ms ...…

查看全部问答>

瑞萨单片机如何实现在线升级

要使单片机能够在线升级,该怎么弄呢 …

查看全部问答>