历史上的今天
返回首页

历史上的今天

今天是:2025年01月14日(星期二)

正在发生

2019年01月14日 | STM32按键总结(低电平有效及上升沿有效)

2019-01-14 来源:eefocus

低电平有效的按键


#define KEY1  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10)//读取按键0


#define KEY2  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)//读取按键1


#define KEY3  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2)//读取按键2


#define KEY4   GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_11)//读取按键3(WK_UP)


#define KEY5   GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1)//读取按键3(WK_UP)


 


void KEY_Init(void) //IO初始化


{


     GPIO_InitTypeDef GPIO_InitStructure;


        


         /*开启按键端口(PC)的时钟*/


         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);


        


         GPIO_InitStructure.GPIO_Pin= GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_13;//KEY0-KEY2;


//      GPIO_InitStructure.GPIO_Speed= GPIO_Speed_10MHz;


         GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPU;


        


         GPIO_Init(GPIOC,&GPIO_InitStructure);


}


void KEY_Scan(u8 mode)


{       


         staticu8 key_up=1;//按键按松开标志


         if(mode)


                   key_up=1;  //支持连按           


         if((KEY1==0||KEY2==0||KEY3==0||KEY4==0||KEY5==0))


         {


                   delay_ms(40);//去抖动


                   key_up=0;


                   if(KEY1==0)


                            KEY1_flag=1;


                   if(KEY2==0)


                            KEY2_flag=1;


                   if(KEY3==0)


                KEY3_flag=1;


                   if(KEY4==0)


                      KEY4_flag=1;


                   if(KEY5==0)


                            KEY5_flag=1;


         }


        


         if((KEY1==1||KEY2==1||KEY3==1||KEY4==1||KEY5==1))


         {


                   delay_ms(10);//去抖动


                   key_up=0;


                  


                   if(KEY1==1)


                            KEY1_flag=0;


                   if(KEY2==1)


                            KEY2_flag=0;


                   if(KEY3==1)


                      KEY3_flag=0;


                   if(KEY4==1)


                KEY4_flag=0;


                   if(KEY5==1)


                            KEY5_flag=0;


         }


}


 


按键,弹起有效


KEY_Scan函数修改为


void KEY_Scan(u8 mode)


{       


 


         staticu8 key_up=1;//按键按松开标志


         if(mode)


                   key_up=1;  //支持连按           


        


         if((KEY1==0||KEY2==0||KEY3==0||KEY4==0||KEY5==0))


         {


                   delay_ms(10);//去抖动


                   key_up=0;


                   if(KEY1==0)


                   {


                            KEY1_flag=1;


                           


                            if(0== KEY1_press_flag)


                            {


                                     KEY1_Event_exec_flag= 0;


                                     KEY1_press_flag= 1;


                            }


                   }


                  


                   if(KEY2==0)


                   {


                            KEY2_flag=1;


                           


                            if(0== KEY2_press_flag)


                            {


                                     KEY2_Event_exec_flag= 0;


                                     KEY2_press_flag= 1;


                            }


                   }


                  


                   if(KEY3==0)


                   {


                            KEY3_flag=1;


                           


                            if(0== KEY3_press_flag)


                            {


                                     KEY3_Event_exec_flag= 0;


                                     KEY3_press_flag= 1;


                            }


                   }


                           


                  


                   if(KEY4==0)


                   {


                            if(0== KEY4_flag)


                            {


                                     KEY4_flag=1;


                            }


                           


                            if(0== KEY4_press_flag)


                            {


                                     KEY4_Event_exec_flag= 0;


                                     KEY4_press_flag= 1;


                            }


                   }


                  


                   if(KEY5==0)


                            KEY5_flag=1;


         }


        


         if((KEY1==1||KEY2==1||KEY3==1||KEY4==1||KEY5==1))


         {


                   delay_ms(10);//去抖动


                   key_up=0;


                  


                   if(KEY1==1)


                   {


                            KEY1_flag=0;


                           


                            if(KEY1_press_flag == 1)


                            {


                                     KEY1_press_flag= 0;


                                    


                                     if(0== KEY1_Event_exec_flag)


                                               KEY1_Event_exec_flag= 1;


                            }


                   }


                  


                   if(KEY2==1)


                   {


                            KEY2_flag=0;


                           


                            if(KEY2_press_flag== 1)


                            {


                                     KEY2_press_flag= 0;


                                    


                                     if(0== KEY2_Event_exec_flag)


                                               KEY2_Event_exec_flag= 1;


                            }


                   }


        


                   if(KEY3==1)


                   {


                            KEY3_flag=0;


                           


                            if(KEY3_press_flag== 1)


                            {


                                     KEY3_press_flag= 0;


                                    


                                     if(0== KEY3_Event_exec_flag)


                                               KEY3_Event_exec_flag= 1;


                            }


                   }


                  


                   if(KEY4==1)


                   {


                            if(1== KEY4_flag)


                            {                                   


                                     KEY4_flag=0;


                            }


                           


                            if(KEY4_press_flag== 1)


                            {


                                     KEY4_press_flag= 0;


                                    


                                     if(0== KEY4_Event_exec_flag)


                                               KEY4_Event_exec_flag= 1;


                            }


                   }


                  


                   if(KEY5==1)


                            KEY5_flag=0;


         }


}


然后,后面响应按键的操作,不再以KEY_flag为标志,而是以KEY3_Event_exec_flag为标志。

推荐阅读

史海拾趣

ADLINK公司的发展小趣事

ADLINK 是一家全球领先的嵌入式计算解决方案提供商,以下是该公司发展的五个相关故事:

  1. 公司创立与初期发展: ADLINK 成立于1995年,总部位于台湾新北市。公司专注于为工业自动化、通讯、医疗保健、交通运输等领域提供高性能的嵌入式计算和连接解决方案。在创立初期,ADLINK 主要专注于硬件产品的开发和销售,如嵌入式计算板卡、模块、工业计算机等。

  2. 技术创新与产品扩展: 随着市场需求的不断变化和技术的发展,ADLINK 不断进行技术创新,积极拓展产品线。除了传统的嵌入式计算硬件产品外,公司还推出了嵌入式操作系统、软件工具和解决方案等,以满足客户在物联网、人工智能、工业4.0 等领域的需求。

  3. 全球业务布局与国际化发展: ADLINK 在全球范围内建立了广泛的销售网络和服务体系,拥有多个全球研发和生产基地,并在美国、欧洲、亚洲等地设有分支机构和办事处。通过与全球领先企业的合作和市场拓展,ADLINK 的产品和解决方案已经覆盖了全球100多个国家和地区。

  4. 合作伙伴关系与客户案例: ADLINK 与世界各地的行业领先企业建立了紧密的合作伙伴关系,共同开发创新性的解决方案,应用于工业自动化、智能交通、医疗保健等领域。例如,公司与德国西门子、美国英特尔等知名企业合作,在工业物联网、边缘计算等领域取得了一系列成功案例。

  5. 未来展望与持续发展: 面对快速变化的市场环境和日益激烈的竞争,ADLINK 将继续致力于技术创新和产品研发,不断提升解决方案的质量和性能,以满足客户日益增长的需求。公司将继续秉承“创新、合作、可靠”的核心价值观,努力成为全球领先的嵌入式计算和连接解决方案提供商。

台湾兆欣(EMTEK)公司的发展小趣事

在立足台湾市场的同时,兆欣也积极拓展海外市场。他们通过参加国际展会、与海外客户建立合作关系等方式,成功将产品打入国际市场。特别是在亚洲地区,兆欣的产品受到了广泛欢迎和认可。这种多元化的市场布局为公司的快速发展提供了有力支持。

CTC Coils Ltd公司的发展小趣事

面对日益严峻的环境问题,CTC Coils Ltd公司积极响应国家绿色发展的号召,开始实施绿色环保战略。公司引进先进的生产设备和工艺,优化生产流程,减少能源消耗和废物排放。同时,公司还研发出了一系列环保型电感线圈产品,满足了市场对绿色电子产品的需求。

GSR Technology Ltd公司的发展小趣事

随着数字化时代的到来,GSR Technology Ltd积极响应国家关于数字经济发展的号召,开始推进企业的数字化转型。公司引入先进的智能制造技术,对生产线进行智能化改造,提高了生产效率和产品质量。同时,公司加强数据管理和分析,利用大数据和人工智能技术优化产品设计和生产流程。这一系列的数字化转型措施为公司带来了显著的经济效益和市场竞争力提升。

Ecera Comtek Corp公司的发展小趣事

在快速发展的过程中,Ecera Comtek Corp公司始终关注企业社会责任的践行。公司积极参与各种公益活动,为社会做出积极贡献。例如,在自然灾害发生时,Ecera Comtek Corp公司积极捐赠通信设备,帮助灾区恢复通信联系;在偏远地区,公司还捐建了多所希望小学,为当地的孩子们提供了良好的学习环境。这些公益活动不仅提升了Ecera Comtek Corp公司的品牌形象,也增强了员工的凝聚力和归属感。

Cal Crystal Lab Inc / Comclok Inc公司的发展小趣事

随着电子行业的快速发展,技术创新和合作成为了企业发展的重要驱动力。Cal Crystal Lab Inc深知这一点,积极寻求与其他企业的技术合作。通过与国内外知名高校和研究机构的深入合作,公司不断引进新技术、新工艺,提升了产品的技术含量和附加值。同时,Cal Crystal Lab Inc还与其他企业建立了战略合作关系,共同开发新产品、拓展新市场,实现了共赢发展。

问答坊 | AI 解惑

移动电源方案

本帖最后由 jameswangsynnex 于 2015-3-3 20:04 编辑 特点: 1、应用简单,外围元件少。 2、高效率 3、低成本,易生产。 …

查看全部问答>

相应组织的号召,准备做个6720的板子

DM642现在停工了,一个是公司也没有这方面的打算,第二是响应的人不多,第三就是花费比较大。做板还是小事,焊接也是自己不能做。如果就是我一个人用,还不如买个来得轻松了。 至于为啥做个6720的板子,第一个是它做板简单,另一个就是我还没有, ...…

查看全部问答>

★NAND Flash ECC校验的实现★ ? 疑问?

nandflash 的ECC校验是怎么实现的? 在写的时候产生ECC校验码, 在读的时候也产生ECC校验码, (硬件,与软件 的实现) ----------------         …

查看全部问答>

请问在调用wait_event_interruptible()后,如果等待的条件一直都不满足,有timer_list 可不可以制定一个超时跳出wait_even

请问在调用wait_event_interruptible()后,如果等待的条件一直都不满足,但是又想在一定时间内返回,该怎么办啦? 我在调用wait_event_interruptible()前加了一个timer_list,(add(timer)),但是好像不管用,超时了还是不跳出sleep。请问需要 ...…

查看全部问答>

wince5.0下内存泄露,很微小的,几分钟增长4k

定时器3秒执行一次 Invalidate(); UpdateWindow(); 复制代码 整个程序就干这一件事,隔3秒显示一张图片。但是我用wince的系统属性查看正在使用的内存数,隔几分钟就会增长4K,我联系观察了几个小时,很有规律。 void CshowphotoDlg::OnPaint() { ...…

查看全部问答>

招WINCE程序员

我公司是做车载音响的,现急需招ARM程序员, 要求: 1.本科及以上学历,要求在车载行业做过GPS的, 2.有1年以上wince底层开发经验 ,用过WINCE MOBILE软件; 3.精通C,熟悉C++ ; 4.有方案GPS产品的优先 ; 公司概况: 本公司在深圳福田区,交 ...…

查看全部问答>

推荐一款资料比较多的WiFi无线网卡/蓝牙模块

已在ce5上成功写了usb. iic. spi.键盘驱动. 觉得可以常识着写WiFi无线网卡/蓝牙驱动. 能否推荐一款资料比较多的WiFi无线网卡/蓝牙模块? 如果有开源资料更好.…

查看全部问答>

有没有做机顶盒的兄弟啊?介绍几个好的生产机顶盒的厂家

有没有做机顶盒的兄弟啊?介绍几个好的生产机顶盒的厂家…

查看全部问答>

诚聘RF工程师

诚聘RF工程师: 1.三年以上RF独立研发经验 2.精通高频技术,充分了解CE,FCC等技术认证标准及RF天线理论 3.熟练掌握各种高频仪器,有较多的调试经验,熟练运用PADS等PCB设计软件 4.对射频开发具有浓厚兴趣,做事忠实细致,有较好的团对协作精神 ...…

查看全部问答>

推荐MOS管

大家给推荐个封装比较小的mos管    一个N沟道的 相对应一个P沟道的,电流5A以上吧,电压24V以上。封装起码 别 比SOP-8的大 谢谢了…

查看全部问答>