历史上的今天
返回首页

历史上的今天

今天是:2025年06月24日(星期二)

正在发生

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

2019-06-24 来源: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语言知识,这将会在以后的学习中给予我很大的帮助! 

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



推荐阅读

史海拾趣

Barkston Plastics Engineering Ltd.公司的发展小趣事

随着电子行业的快速发展,Barkston Plastics Engineering Ltd.意识到单一产品线的局限性,于是开始扩展其产品线,涵盖更多种类的塑料电子元件。同时,公司积极寻求与行业内其他企业的战略合作,通过技术共享和市场资源互补,共同开拓更广阔的市场。这一战略转型不仅提升了Barkston的市场竞争力,也为其后续发展奠定了坚实的基础。

CDE [ CORNELL DUBILIER ELECTRONICS ]公司的发展小趣事

近年来,随着新能源市场的蓬勃发展,CDE公司敏锐地抓住了这一机遇。公司积极参与军事和能源应用的高压直流链路电容器市场,并成功推出了针对EV快速充电的高压直流链路电容器。这一产品的推出不仅满足了市场对高效、可靠电容器的需求,也为CDE在新能源领域的发展奠定了坚实基础。

Holmes Co Inc公司的发展小趣事

随着全球对环保和可持续发展的重视,Holmes Electronics积极响应号召,开始向绿色能源领域转型。他们投入巨资研发高效太阳能电池板和储能系统,并成功应用于多个光伏项目和智能电网项目中。同时,公司还不断优化生产工艺,减少生产过程中的能源消耗和废弃物排放。这一绿色能源转型不仅为公司赢得了良好的社会声誉,还开辟了新的业务增长点。

Digital公司的发展小趣事

DIALIGHT公司的故事始于1938年的纽约布鲁克林,当时该公司专注于为飞机生产仪表板灯。随着技术的不断进步和市场的变化,公司在1971年,即LED推出仅一年后,推出了他们的第一个LED产品。这一举措标志着DIALIGHT正式从传统的飞机仪表板灯制造转向LED照明技术的研发和应用。从此,DIALIGHT彻底改变了LED的用途,将其广泛应用于世界各地的交通控制、指示灯、结构塔和工业场所,为全球提供了优质的照明解决方案。

Codeco Corporation Of Vermont公司的发展小趣事

随着公司的发展,Codeco逐渐意识到技术创新的重要性。他们投入大量资源研发新技术,不断提升产品的性能和用户体验。在一次关键的研发项目中,Codeco的团队突破了某项技术难题,推出了一款引领行业潮流的新产品。这一创新不仅为公司带来了可观的收益,也进一步巩固了Codeco在电子行业的地位。

Akahane Electronics Ind Corp公司的发展小趣事

Akahane深知人才是企业发展的核心动力。因此,公司一直注重人才培养和引进。通过建立健全的培训机制和激励机制,Akahane吸引了一批批优秀的研发人才和管理人才。这些人才为公司的技术创新和市场拓展提供了有力支撑。同时,公司还积极与高校和研究机构合作,共同培养电子行业的后备力量。

问答坊 | AI 解惑

TSB41

我想要四相四拍步进电机的相关资料,知道的,分享一下,谢谢!…

查看全部问答>

关于复测中的基础知识测验

经专家商定的原则是,一等奖候选队复测期间首先进行基础知识测验。基础知识测验采用闭卷笔试方式,时间2小时,每队选派1名同学参加。笔试内容包括基础知识、分析设计两部分测验内容。“基础知识”主要涵盖模拟、数字电子电路(技术)等技术基础课程 ...…

查看全部问答>

电源的合理运用

电源的合理运用电源的合理运用 1.接触电阻      当电源输出端与负载连接时,连线两端的良好接触很重要。在负载电流大的情况下,良好的接触尤其重要。由于接触不良而引起的数mΩ至十多mΩ的接触电阻和太长或太细的不合适连接 ...…

查看全部问答>

超高频射频识别系统的研究与标签设计

射频识别是一种非接触的自动识别新技术,它成功地实现了多目标的跟踪与识别,以非接触性、识别速度快、可以多卡识别等优于其他自动识别技术的特性受到广泛重视。 近年来,超高频频段射频识别系统应用的要求推动了超高频读写器和电子标签的研究和开 ...…

查看全部问答>

视频监控技术发展中看安防需要应用发展

随着时代的发展,以及用户对安全防范要求的日益提高,监控光端机在安防领域得到越来越广泛的运用,视频监控已成为一种普通的需求。下面就视频监控系统的构建和未来发展趋势展开探讨。互联网技术及应用的飞速发展影响到了视频监控领域,利用廉价的IP ...…

查看全部问答>

从事s3c6410开发的朋友进来签个名,方便以后大家交流

产品规格: 1.        处理器与内存 ?        CPU:S3C6410,主频667M ?        RAM:128M ?        FLASH:1Gbit ?        MicroSD卡 ...…

查看全部问答>

有关驱动的一个问题,请大家帮忙看一下

Microsoft (R) Windows Debugger  Version 6.7.0005.1 Copyright (c) Microsoft Corporation. All rights reserved. Opened \\\\.\\COM1 Waiting to reconnect... Connected to Windows XP 2600 x86 compatible target, ptr64 FALSE ...…

查看全部问答>

接口4线的SWIM,仿真环境IAR,怎么查看寄存器的值

为什么我的程序在运行后,我查看寄存器的值都是0啊,看不到变化。 比如我查看寄存器PE_ODR的值,程序暂停后,我watch寄存器PE_ODR的值总是为0x00,而实际上我用示波器测的话,是0xaa,跟我设定的一样。 我想问一下,是不是用SWIM接口,只能 ...…

查看全部问答>

菜鸟问之一:LM3S811PWM产生的问题

#include    \"hw_types.h\"#include    \"hw_memmap.h\"#include    \"hw_ints.h\"#include    \"hw_gpio.h\"#include    \"hw_pwm.h\"#include    \ ...…

查看全部问答>