[嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键-程序员宅基地

技术标签: stm32  # 初识单片机(STM32F103)  嵌入式硬件  单片机  

上一篇:[嵌入式软件][启蒙篇] 搭建在线仿真平台(STM32)


本文章使用的电路,见上一篇。

一、点亮LED灯

(1) 简介

  1. LED是一种半导体器件,大家其实对LED并不陌生,各种电器的指示灯、手机键盘灯、LED液晶屏的背光、高亮LED手电筒等,都是通过LED发光的。
  2. LED有两种主要用途,一种是作为指示灯;另一种是照明。
  3. 照明用的LED一般都是大功率LED,需要较大的电压电流才能正常工作。而这里我们要用到的则是用作指示灯的小功率LED。
  4. 常见的小功率LED,在它的正负极加上3V左右的电压,就会发光,正常发光的时候,电流大概是2~5mA。
  5. 这里要注意,LED有正负极之分,接反了不会发光。另外,电压也不可太高,那样会烧坏LED。

(2) 示例代码

#include <stdint.h>
#include <stdio.h>
#include "sys.h"
#include "stm32f10x_conf.h"

#include "delay.h"
#include "led.h"
int main() {
    
    //LED初始化
    LED_Init();
    // 由于LED接了VCC, 引脚高电平,无法导通电路,所以低电平点亮,即VCC(火线)-->GND(地线/零线)
    while(1) {
    
        LED = 1;      // 高电平熄灭
        delay_ms(50);
        LED = 0;      // 低电平点亮
        delay_ms(50); 
        /* 可用简写为:
           LED = !LED; // 取反
           delay_ms(50); 
        */
    }
}

(3) 仿真效果(闪烁)

仿真效果
在这里插入图片描述

电路中,一高一低,才能正常工作。

二、按键检测

(1) 简介

1. 按键原理

按键的基本原理是设置单片机IO口(PA1)为输入状态,如DDRB = 0XF0(方向寄存器,“1”为输出,“0”为输入);

2. 检测按键端口

单片机一直检测按键端口(PA1)的状态,当端口为高电平时(即按键按下),实行相应的动作(比如控制LED灯)。

原理就是这么回事,但是正真实现时,按键会有抖动,要进行按键去抖。

3. 消抖

① 按键实行一个动作过程是需要一定时间的,一般为100mS-1S左右,而一个单片机执行一个机器周期的时间很短,时钟为10MH的周期为0.1μs,
② 这样按键每一次动作程序就会多次检测按键,出现误判(一次按下,多次动作)。
③ 一般消抖都是用延时10ms,来过滤抖动。

(2) 示例代码1 (按下点亮,松开熄灭)

每次按下,红灯点亮,松开按键红灯熄灭。

#include <stdint.h>
#include <stdio.h>
#include "sys.h"
#include "stm32f10x_conf.h"

#include "delay.h"
#include "led.h"
#include "key.h"

#define io_get(gpio, pin) GPIO_ReadInputDataBit(gpio, pin)

int main() {
    
    // LED初始化
    LED_Init();
    // 按键初始化
    KEY_Init();
    // 由于LED接了VCC, 引脚高电平,无法导通电路,所以低电平点亮,即VCC(火线)-->GND(地线/零线)
    while(1) {
    
        if (io_get(GPIOA, GPIO_Pin_1) == KEY_ON) {
    
            LED = 0;      // 低电平点亮
        } else {
    
            LED = 1;      // 高电平熄灭
        }
        delay_ms(10); 
    }
}

(3) 仿真效果1 (按下点亮,松开熄灭)

每次按下,红灯点亮,松开按键红灯熄灭。
在这里插入图片描述

(4) 示例代码2 (按下点亮,再按熄灭)

模拟家中电灯,一个完整的开关。

#include <stdint.h>
#include <stdio.h>
#include "sys.h"
#include "stm32f10x_conf.h"

#include "delay.h"
#include "led.h"
#include "key.h"

#define io_get(gpio, pin) GPIO_ReadInputDataBit(gpio, pin)

int main() {
    
    // LED初始化
    LED_Init();
    // 按键初始化
    KEY_Init();
    // 由于LED接了VCC, 引脚高电平,无法导通电路,所以低电平点亮,即VCC(火线)-->GND(地线/零线)
    while(1) {
    
        if (Key_Scan(GPIOA, GPIO_Pin_1)) {
     // 检测按键整个过程。按下->松开
            LED = !LED;  // 每次按下,切换开关。低电平点亮 高电平熄灭
        }
    }
}

(5) 仿真效果2 (按下点亮,再按熄灭)

按一次,点亮,再按下,则熄灭。
在这里插入图片描述


下一篇:[嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_29246181/article/details/135633848

智能推荐

java事件监听器_java监听器-程序员宅基地

文章浏览阅读1w次,点赞22次,收藏172次。1.动作事件监听器动作事件(ActionEvent)监听器是Swing中比较常用的事件监听器,很组件的动作都会使用它监听,如按钮单击,下表描述了动作事件监听器的接口与事件源。事件名称 事件源 监听接口 添加或删除相应类型监听器的方法 ActionEvent JButton、JList、JTextField等 ActionListener addAct..._java监听器

OpenLayers基础教程——要素的编辑_openlayers 选中编辑-程序员宅基地

文章浏览阅读1.9k次,点赞3次,收藏12次。1、前言在OpenLayers中,要素的编辑主要使用ol.interaction.Select和ol.interaction.Modify配合实现,下面开始介绍。2、编辑要素编辑功能的实现很简答,ol.interaction.Select负责选择要素,ol.interaction.Modify对被选择的要素进行编辑,代码如下:<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> _openlayers 选中编辑

Android Material Design控件使用(二)_android 使用 material desingn ui 控件-程序员宅基地

文章浏览阅读790次,点赞3次,收藏2次。Android Material Design控件使用(二)_android 使用 material desingn ui 控件

servlet 异常处理_Servlet异常和错误处理示例教程-程序员宅基地

文章浏览阅读4.5k次,点赞3次,收藏4次。servlet异常处理Today we will look into Servlet Exception and Error Handling. Sometime back I wrote a post about Exception Handling in Java but when it comes to web application, we need more than normal ex..._servletexception

elementUI中复选框checkbox的使用_elementui checkbox-程序员宅基地

文章浏览阅读8.8k次,点赞6次,收藏8次。elementUI中复选框checkbox的使用<template> <div style="padding:20px;"> <el-card> <el-checkbox v-model="checked">备选项</el-checkbox> <div>{{ checked }}</div> </el-card> <el-card style="marg_elementui checkbox

蓝桥杯C/C++组 经验分享_蓝桥杯c语言组-程序员宅基地

文章浏览阅读2w次,点赞113次,收藏590次。蓝桥杯C/C++组 经验分享2020.2.7 , CJ ,芯科经验分享讲稿_蓝桥杯c语言组

随便推点

Openstack 从云硬盘(卷)中创建虚拟机_openstack volume create-程序员宅基地

文章浏览阅读1.8k次。Openstack 从云硬盘(卷)中创建虚拟机_openstack volume create

redis入门(三)_redis slot open-程序员宅基地

文章浏览阅读6.4k次。文章目录@[toc]redis入门(三)目录前言事务原理Lua脚本安装脚本命令EVALEVALSHAlua和redis互操作SCRIPT EXISTSSCRIPT FLUSHSCRIPT KILL脚本复制集群搭建工具redis-trib.rbredis官方集群搭建集群横向扩展故障转移redis管理参考文档redis入门(三)目录redis入门(一)redis入门(二)redis入门(三)..._redis slot open

idea生成SpringBoot项目端口号的修改_idea如何设置8080端口-程序员宅基地

文章浏览阅读2.4k次。idea生成SpringBoot项目端口号的修改第一次使用idea,在生成SpringBoot项目的时候,提示端口8080被占用,这个时候有两个办法:1、修改端口号(推荐)①如果是.yml配置文件,添加server:port:8888,格式和下图相同,需要注意的一点是,server必须和spring同列,否则无效②如果是properties文件,配置文件中添加 server.port=88..._idea如何设置8080端口

编程语言和操作系统是什么关系?编程语言如何被计算机执行的?驱动程序的理解?_操作系统和编程语言的关系-程序员宅基地

文章浏览阅读2.2k次。我们平常所提到的计算机的内存指的是动态内存(即DRAM),动态内存中所谓的“动态”,指的是当我们将数据写入DRAM后,经过一段时间,数据会丢失,因此需要一个额外设电路进行内存刷新操作。但时间一长,代表1的电容会放电,代表0的电容会吸收电荷,这就是数据丢失的原因。我们都知道,中间层是为了提供抽象转换而存在的,而这套叫做操作系统的中间层,定义了一套规则,使得后续的可执行程序能够更容易的被运行起来,而且能更容易的利用各种硬件(显示,键盘等等),能够调用一些库来消除不同的程序间重复的运行逻辑。_操作系统和编程语言的关系

ACProtect2.0脱壳-程序员宅基地

文章浏览阅读378次。这上以前加入黑手安全网上做的教程,也搬过来吧目标程序:红盟(内部版)TNT社工辅助.exe所加的壳:ACProtect 2.00 - RISCO Software Inc.首先忽略所有异常,隐藏下od脱壳步骤:1.程序附加(程序附加后会停在系统的领空)代码:7C92120F C3 RETN7C921210 8BFF MOV EDI,EDI7C921212 > CC INT3..._acprotect 教程

下垂控制实现混合储能功率分配控制,下垂电流均衡控制,母线电压补偿_蓄电池下垂控制-程序员宅基地

文章浏览阅读174次。混合储能功率分配,下垂控制,功率均衡,母线电压补偿_蓄电池下垂控制

推荐文章

热门文章

相关标签