历史上的今天
今天是: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语言知识,这将会在以后的学习中给予我很大的帮助!
最后,这是写好一个程序所需要做的在写代码之前必须要清楚自己要干什么,要实现一个什么样的功能,还有程序的基本流程图等等
史海拾趣
|
文章说明:calmarrow(lqm)原创 关于bootloader,先简要地总结一下。经过了第一个阶段的学习,对bootloader有了一个整体的认识,其实把它当作一个功能单元就可以了,职责就是完成从硬件加电到操作系统内核运行之前的所有工作,这些工 ...… 查看全部问答> |
|
本信息来自合作QQ群:电子工程师技术交流(12425841) 群主在坛子ID:Kata ---------------------------------------------------------------------------------------------------- 各位 请教一个问题 我们在PLC的中控室里面对设 ...… 查看全部问答> |
|
S3C2440的平台,WINCE5.0,在USB HCD 驱动文件中2440_ohci.c中,有没有熟悉这个驱动的朋友,我想知道在这个驱动中哪个地方或者说哪个函数中将S3C2440的USB寄存器物理地址转换为虚拟地址并配置的,这个里面的代码我反复看过,但是因为以前没搞过USB, ...… 查看全部问答> |
|
linux触摸屏驱动分析 一.、前提知识1、Linux输入子系统(Input Subsystem): 在Linux中,输入子系统是由输入子系统设备驱动层、输入子系统核心层(Input Core)和输入子系统事件处理层(Event Handler)组成。其中设备驱动层提供对硬件各寄 ...… 查看全部问答> |




