历史上的今天
今天是: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语言知识,这将会在以后的学习中给予我很大的帮助!
最后,这是写好一个程序所需要做的在写代码之前必须要清楚自己要干什么,要实现一个什么样的功能,还有程序的基本流程图等等
史海拾趣
|
经专家商定的原则是,一等奖候选队复测期间首先进行基础知识测验。基础知识测验采用闭卷笔试方式,时间2小时,每队选派1名同学参加。笔试内容包括基础知识、分析设计两部分测验内容。“基础知识”主要涵盖模拟、数字电子电路(技术)等技术基础课程 ...… 查看全部问答> |
|
射频识别是一种非接触的自动识别新技术,它成功地实现了多目标的跟踪与识别,以非接触性、识别速度快、可以多卡识别等优于其他自动识别技术的特性受到广泛重视。 近年来,超高频频段射频识别系统应用的要求推动了超高频读写器和电子标签的研究和开 ...… 查看全部问答> |
|
随着时代的发展,以及用户对安全防范要求的日益提高,监控光端机在安防领域得到越来越广泛的运用,视频监控已成为一种普通的需求。下面就视频监控系统的构建和未来发展趋势展开探讨。互联网技术及应用的飞速发展影响到了视频监控领域,利用廉价的IP ...… 查看全部问答> |
|
产品规格: 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 ...… 查看全部问答> |
|
为什么我的程序在运行后,我查看寄存器的值都是0啊,看不到变化。 比如我查看寄存器PE_ODR的值,程序暂停后,我watch寄存器PE_ODR的值总是为0x00,而实际上我用示波器测的话,是0xaa,跟我设定的一样。 我想问一下,是不是用SWIM接口,只能 ...… 查看全部问答> |
|
#include \"hw_types.h\"#include \"hw_memmap.h\"#include \"hw_ints.h\"#include \"hw_gpio.h\"#include \"hw_pwm.h\"#include \ ...… 查看全部问答> |




