历史上的今天
返回首页

历史上的今天

今天是:2024年09月27日(星期五)

正在发生

2019年09月27日 | STM32学习第二课——(操作)按键控制LED灯

2019-09-27 来源:eefocus

对于按键控制LED灯这一课,首先要看小黑板的原理图如下所示 

这里写图片描述

查看可知KEY0按键对应的IO口是PC1,KEY1按键所对应的IO口是PC13。这样就可以操作写代码了吗?不不不,在写代码之前必须要清楚自己要干什么,要实现一个什么样的功能,还有程序的基本流程图等等以下是代码部分:


//FUNCTION:按键所对应的IO口初始化

//DATA:20180914

void key_Init(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量     

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能GPIO的时钟


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_13;//选中管脚 1,13

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//IO口上拉输入

  GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化外设GPIOC寄存器 

}


因为两个按键都是低电平有效,故要设为上拉。


//FUNCTION:按键处理函数

//DATA:20180914

u8 Key_scan(u8 Mode)

{

    static u8 key_up = 1;//按键松开标志

    if(Mode)key_up = 1;//支持连按

    if(key_up&&(key0==0||key1==0))

    {

        delay_ms(20);//消抖

        key_up = 0;

        if(key0==0)return key0_PRES;

        else if(key1==0)return key1_PRES;


    }

    else if(key0==1&&key1==1)key_up = 1;

    return 0;//无按键按下

}


这里要注意if语句的嵌套。以下是主函数部分:


#include "key.h"

#include "led.h"

#include "delay.h"

#include "sys.h"


int main(void)

{

        u8 t;

        GPIo_Init();

        key_Init();

        delay_init();

        led0 = 0;//点亮LED

//  All_Init();

    while(1)

    { 

        t = Key_scan(0);//取键值

        switch(t)

        {

            case key0_PRES:

                led0=!led0;break;

            case key1_PRES:

                led1=!led1;break;

            default:

              delay_ms(20);

        }       

  }

}


以上就是本次学习的所有代码了,写好下进单片机可以看到现象:KEY0控制LED0的亮灭,KEY1控制LED1的亮灭,即是控制电平的翻转。以上就是本次学习的内容。


总结 

有了上一次的学习,今天的学习似乎会变得简单些,然而对于我来说并不是想的那样。C语言知识的缺乏是我在这次学习的过程中遇到的最大的困难,C语言一窍不通的我硬生生把几个语句思考了好几个小时(头都想炸了),浪费了不少的时间。 


总之,今天的学习还是有收获的,遇到了问题要学会自己想办法解决,并记录下来,也提醒了我必须要懂得基础的C语言知识,这将会在以后的学习中给予我很大的帮助! 

最后,这是写好一个程序所需要做的在写代码之前必须要清楚自己要干什么,要实现一个什么样的功能,还有程序的基本流程图等等



推荐阅读

史海拾趣

CalRamic Technologies Llc公司的发展小趣事

随着全球环保意识的提升,CalRamic Technologies也积极响应,开始在生产过程中引入环保材料和工艺。公司不仅优化了生产流程,减少了废弃物和污染物的排放,还加大了对可再生能源的使用。这些举措不仅提升了公司的社会责任形象,也为其赢得了更多客户的青睐。同时,公司还开展了一系列环保宣传活动,倡导员工和客户共同参与环保行动,为可持续发展贡献力量。

Allen Avionics Inc公司的发展小趣事

在21世纪初,随着电子行业的蓬勃发展,对于微型化、高性能电子元器件的需求日益增加。在这样的时代背景下,CalRamic Technologies Llc公司应运而生。公司由几位在电子行业有着丰富经验的工程师创立,他们看到了陶瓷电容器等元器件的巨大市场潜力。初创时期,公司面临着资金紧张和技术瓶颈等挑战,但团队凭借对市场的深刻理解和技术的不断创新,逐渐在电子元器件市场上占据了一席之地。

Don Connex Electronics Co Ltd公司的发展小趣事

Don Connex Electronics Co Ltd成立于上世纪90年代初,当时电子行业正处于快速发展阶段。公司的创始人李明凭借其在半导体领域的深厚技术背景,带领团队研发出了一款高性能的电源管理芯片,这款芯片在业界引起了广泛关注。该芯片以其低功耗、高效率的特性,迅速在市场上打开了局面,为公司的初创阶段奠定了坚实的基础。

Doodle Labs公司的发展小趣事

Doodle Labs公司成立于2010年代初,由一群热衷于无线通信和物联网技术的工程师创立。在成立之初,公司就明确了自己的定位:专注于开发高性能、智能化的无线电技术产品,以满足日益增长的无人机和物联网设备的需求。通过不断的技术研发和创新,Doodle Labs成功推出了其首款智能无线电产品,为无人机提供了稳定、高效的通信解决方案。

岑科(CENKER)公司的发展小趣事

为了实现更高效的生产和更优质的产品,岑科在2011年成立了自动化设备研发团队。通过自主研发生产设备,岑科实现了对生产技术的全面掌控,并加强了技术创新和改进。这一举措不仅提高了生产效率,还为岑科带来了更多的技术积累和知识产权。随着自动化设备的广泛应用,岑科的生产能力得到了大幅提升,同时也推动了整个产业的升级和可持续发展。

BAHCO公司的发展小趣事

随着市场的不断变化和消费者需求的多样化,BAHCO也在不断调整和优化产品线。除了传统的五金工具外,BAHCO还积极开发新的产品领域,如电动工具、测量仪器等。这些新产品的推出不仅丰富了公司的产品线,也满足了不同消费者的需求。同时,BAHCO还注重产品的环保性能和可持续性发展,致力于为消费者提供更加环保、高效的产品解决方案。

问答坊 | AI 解惑

bootloader如何固化

文章说明:calmarrow(lqm)原创   关于bootloader,先简要地总结一下。经过了第一个阶段的学习,对bootloader有了一个整体的认识,其实把它当作一个功能单元就可以了,职责就是完成从硬件加电到操作系统内核运行之前的所有工作,这些工 ...…

查看全部问答>

对现场设备有没有要求多少时间要相应呢?

本信息来自合作QQ群:电子工程师技术交流(12425841)   群主在坛子ID:Kata ---------------------------------------------------------------------------------------------------- 各位 请教一个问题 我们在PLC的中控室里面对设 ...…

查看全部问答>

贴片二三极管查询起来就是烦,有没有汇总查询手册,大家分享下

贴片二三极管查询起来就是烦,有没有汇总查询手册,大家分享下…

查看全部问答>

日文的显示问题

我把日文的GBK转成UTF8码 然后用16*16的点阵显示出来 有些日文旁边会出现一些多出来的小点 这可能是啥原因引起的啊? 显示中文和英文都能正确显示。 那位大侠知道的 指点下下 谢谢 …

查看全部问答>

USB HCD驱动问题

S3C2440的平台,WINCE5.0,在USB HCD 驱动文件中2440_ohci.c中,有没有熟悉这个驱动的朋友,我想知道在这个驱动中哪个地方或者说哪个函数中将S3C2440的USB寄存器物理地址转换为虚拟地址并配置的,这个里面的代码我反复看过,但是因为以前没搞过USB, ...…

查看全部问答>

杯具了

人生像茶几,虽然不大却充满杯具啊!我的LPC1114经过一阵紧锣密鼓的工作,我的POV旋转时钟突破不能识别,不运行下载出现等一箩筐的困难后终于呵呵显示了,就在我安心的睡去,打算第二天在改进程序实现更好的功能时,完了,第二天晚上当我通电运行时 ...…

查看全部问答>

请问如何在STM32中产生38khz的红外载波?

                                 在STM32中产生38khz的红外载波,大家都有什么方法?(先说声谢谢)…

查看全部问答>

Linux驱动之触摸屏

linux触摸屏驱动分析 一.、前提知识1、Linux输入子系统(Input Subsystem):   在Linux中,输入子系统是由输入子系统设备驱动层、输入子系统核心层(Input Core)和输入子系统事件处理层(Event Handler)组成。其中设备驱动层提供对硬件各寄 ...…

查看全部问答>