[嵌入式软件][入门篇][仿真平台] STM32F103实现LED、按键

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

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

文章目录

  • 一、点亮LED灯
    • (1) 简介
    • (2) 示例代码
    • (3) 仿真效果(闪烁)
  • 二、按键检测
    • (1) 简介
      • 1. 按键原理
      • 2. 检测按键端口
      • 3. 消抖
    • (2) 示例代码1 (按下点亮,松开熄灭)
    • (3) 仿真效果1 (按下点亮,松开熄灭)
    • (4) 示例代码2 (按下点亮,再按熄灭)
    • (5) 仿真效果2 (按下点亮,再按熄灭)

一、点亮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 (按下点亮,再按熄灭)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/417914.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络安全等级保护测评规划与设计

笔者单位网络结构日益复杂&#xff0c;应用不断增多&#xff0c;使信息系统面临更多的风险。同时&#xff0c;网络攻防技术发展迅速&#xff0c;攻击的技术门槛随着自动化攻击工具的应用也在不断降低&#xff0c;勒索病毒等未知威胁也开始泛滥。基于此&#xff0c;笔者单位拟进…

k8s资源介绍

Kubernetes架构图 Kubernetes系统用于管理分布式节点集群中的微服务或容器化应用程序&#xff0c;并且其提供了零停机时间部署、自动回滚、缩放和容器的自愈&#xff08;其中包括自动配置、自动重启、自动复制的高弹性基础设施&#xff0c;以及容器的自动缩放等&#xff09;等…

山西电力市场日前价格预测【2024-01-21】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-01-21&#xff09;山西电力市场全天平均日前电价为266.42元/MWh。其中&#xff0c;最高日前电价为359.17元/MWh&#xff0c;预计出现在08:15。最低日前电价为0.00元/MWh&#xff0c;预计出…

查询指定日期是否为法定工作日的服务接口

在现代社会中&#xff0c;人们的工作与生活节奏日益加快&#xff0c;为了更好地规划工作与休息时间&#xff0c;在开发应用软件时&#xff0c;通过查询指定日期是否为法定工作日的服务接口是一个非常有用的功能。本文将介绍一个API接口&#xff0c;可以根据国家的放假安排来判断…

【大数据Hive】hive 行列转换使用详解

目录 一、前言 二、使用场景介绍 2.1 使用场景1 2.2 使用场景2 三、多行转多列 3.1 case when 函数 语法一 语法二 操作演示 3.2 多行转多列操作演示 四、多行转单列 4.1 concat函数 语法 4.2 concat_ws函数 语法 4.3 collect_list函数 语法 4.4 collect_set函…

Python学习之路——模块

一、什么是模块 python模块&#xff08;Module&#xff09;是一个Python文件&#xff0c;以.py结尾。模块能定义函数、类和变量&#xff0c;模块里也能包含可执行的代码。 二、模块的作用 Python中有很多各种不同的模块&#xff0c;每一个模块都可以帮助我们实现一些功能&am…

SpringBoot项目中简单使用虚拟机Redis

目录 步骤大致如下&#xff1a; 一.在pom文件中加入redis依赖 二.在虚拟机上打开我们下载好的Redis。开启服务器端并获取虚拟机ip地址 三.在项目配置。 四&#xff1a;使用redis 测试 redis是一个以键值对存储的NoSQL。被数百万开发人员用作缓存、矢量数据库、文档数据库、…

电力能源实景三维可视化合集,智慧电网数字孪生

电力能源是现代社会发展和运行的基石&#xff0c;渗透于工业、商业、农业、家庭生活等方方面面&#xff0c;它为经济、生活质量、环境保护和社会发展提供了巨大的机会和潜力。图扑软件应用自研 HT for Web 强大的渲染引擎&#xff0c;助力现代化的电力能源数字孪生场景&#xf…

Pytest 测试框架与Allure 测试报告——Allure2测试报告-L3

目录&#xff1a; allure2报告中添加附件-图片 Allure2报告中添加附件Allure2报告中添加附件&#xff08;图片&#xff09;应用场景Allure2报告中添加附件&#xff08;图片&#xff09;-Python代码示例&#xff1a;allure2报告中添加附件-日志 Allure2报告中添加附件&#xff…

【JavaEE进阶】 SpringBoot配置⽂件

文章目录 &#x1f340;配置⽂件的作⽤&#x1f334;SpringBoot配置⽂件&#x1f38b;配置⽂件的格式&#x1f384;properties配置⽂件&#x1f6a9;properties基本语法&#x1f6a9;读取配置⽂件&#x1f6a9;properties的缺点 &#x1f333;yml配置⽂件yml基本语法&#x1f6…

重学Java 10 面向对象

正是风雨欲来的时候&#xff0c;火却越烧越旺了 ——24.1.20 重点 1.为何使用面向对象思想编程 2.如何使用面向对象思想编程 3.何时使用面向对象思想编程 4.利用代码去描述世间万物的分类 5.在一个类中访问另外一个类中的成员 -> new对象 6.成员变量和局部变量的区别 一…

vue流程图

效果图 组件 <template><div class"processBox" v-if"list.length"><div class"childs"><div class"child" v-for"(item,index) in list" :key"item.id -child-index"><div class&q…