技术标签: stm32 # 初识单片机(STM32F103) 嵌入式硬件 单片机
上一篇:[嵌入式软件][启蒙篇] 搭建在线仿真平台(STM32)
#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);
*/
}
}
电路中,一高一低,才能正常工作。
按键的基本原理是设置单片机IO口(PA1)为输入状态,如DDRB = 0XF0(方向寄存器,“1”为输出,“0”为输入);
单片机一直检测按键端口(PA1)的状态,当端口为高电平时(即按键按下),实行相应的动作(比如控制LED灯)。
原理就是这么回事,但是正真实现时,按键会有抖动,要进行按键去抖。
① 按键实行一个动作过程是需要一定时间的,一般为100mS-1S左右,而一个单片机执行一个机器周期的时间很短,时钟为10MH的周期为0.1μs,
② 这样按键每一次动作程序就会多次检测按键,出现误判(一次按下,多次动作)。
③ 一般消抖都是用延时10ms,来过滤抖动。
每次按下,红灯点亮,松开按键红灯熄灭。
#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);
}
}
每次按下,红灯点亮,松开按键红灯熄灭。
模拟家中电灯,一个完整的开关。
#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; // 每次按下,切换开关。低电平点亮 高电平熄灭
}
}
}
按一次,点亮,再按下,则熄灭。
文章浏览阅读1w次,点赞22次,收藏172次。1.动作事件监听器动作事件(ActionEvent)监听器是Swing中比较常用的事件监听器,很组件的动作都会使用它监听,如按钮单击,下表描述了动作事件监听器的接口与事件源。事件名称 事件源 监听接口 添加或删除相应类型监听器的方法 ActionEvent JButton、JList、JTextField等 ActionListener addAct..._java监听器
文章浏览阅读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 选中编辑
文章浏览阅读790次,点赞3次,收藏2次。Android Material Design控件使用(二)_android 使用 material desingn ui 控件
文章浏览阅读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
文章浏览阅读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
文章浏览阅读2w次,点赞113次,收藏590次。蓝桥杯C/C++组 经验分享2020.2.7 , CJ ,芯科经验分享讲稿_蓝桥杯c语言组
文章浏览阅读1.8k次。Openstack 从云硬盘(卷)中创建虚拟机_openstack volume create
文章浏览阅读6.4k次。文章目录@[toc]redis入门(三)目录前言事务原理Lua脚本安装脚本命令EVALEVALSHAlua和redis互操作SCRIPT EXISTSSCRIPT FLUSHSCRIPT KILL脚本复制集群搭建工具redis-trib.rbredis官方集群搭建集群横向扩展故障转移redis管理参考文档redis入门(三)目录redis入门(一)redis入门(二)redis入门(三)..._redis slot open
文章浏览阅读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的电容会吸收电荷,这就是数据丢失的原因。我们都知道,中间层是为了提供抽象转换而存在的,而这套叫做操作系统的中间层,定义了一套规则,使得后续的可执行程序能够更容易的被运行起来,而且能更容易的利用各种硬件(显示,键盘等等),能够调用一些库来消除不同的程序间重复的运行逻辑。_操作系统和编程语言的关系
文章浏览阅读378次。这上以前加入黑手安全网上做的教程,也搬过来吧目标程序:红盟(内部版)TNT社工辅助.exe所加的壳:ACProtect 2.00 - RISCO Software Inc.首先忽略所有异常,隐藏下od脱壳步骤:1.程序附加(程序附加后会停在系统的领空)代码:7C92120F C3 RETN7C921210 8BFF MOV EDI,EDI7C921212 > CC INT3..._acprotect 教程
文章浏览阅读174次。混合储能功率分配,下垂控制,功率均衡,母线电压补偿_蓄电池下垂控制