小兴教你做平衡小车-stm32程序开发(按键扫描)

文章目录

  • 1 单片机最小系统板按键原理图介绍
  • 2 库函数程序设计
  • 3 寄存器程序设计
  • 4 效果展示

1 单片机最小系统板按键原理图介绍

从图中看出单片机的PB12引脚接到了按键上。
在这里插入图片描述
根据按键的原理图,可以分析得到,如果不按下按键的时候,引脚输入的是高电平。按下按键的时候,引脚输入的是低电平。
在这里插入图片描述

2 库函数程序设计

main.c文件。

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "usart.h"
#include "key.h"
#include "stdio.h"int main(void)
{RCC->APB2ENR |= (uint32_t)0x00000010;//打开GPIOC时钟GPIOC->CRH   &= (uint32_t)0xFF0FFFFF;//使用前清零GPIOC->CRH   |= (uint32_t)0x00300000;//配置PC13为推挽输出,最大速度50MHzDelay_Init();Usart_Init(115200);Key_Init();printf("hello world!\r\n");while(1){GPIOC->BSRR  =  (uint32_t)0x00002000;//PC13引脚输出高电平Delay_ms(100);                       //延时100msGPIOC->BRR  =   (uint16_t)0x2000;    //PC13引脚输出低电平Delay_ms(100);   		             //延时100msif(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12) == 0){Delay_ms(10);  if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12) == 0)printf("key is pressed!\r\n");}}
}

key.c文件。

#include "stm32f10x.h"
#include "key.h"	void Key_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//开启GPIOB时钟GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;       //上拉输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;          //PB12GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   //频率为50mhzGPIO_Init(GPIOB,&GPIO_InitStructure);               //初始化
}

key.h文件。

#ifndef __KEY_H
#define __KEY_Hvoid Key_Init(void);#endif

3 寄存器程序设计

因为寄存器操作可以直接在main.c文件中写完,这里只提供给大家main.c文件哈。

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "usart.h"
#include "key.h"
#include "stdio.h"int main(void)
{RCC->APB2ENR |= (uint32_t)0x00000010;//打开GPIOC时钟GPIOC->CRH   &= (uint32_t)0xFF0FFFFF;//使用前清零GPIOC->CRH   |= (uint32_t)0x00300000;//配置PC13为推挽输出,最大速度50MHzDelay_Init();Usart_Init(115200);//库函数版本
//	//---------------------------------------------------------//
//	Key_Init();//---------------------------------------------------------////寄存器版本//---------------------------------------------------------//RCC->APB2ENR |= (uint32_t)0x00000008;//打开GPIOB时钟GPIOB->CRH   &= (uint32_t)0xFFF0FFFF;//使用前清零GPIOB->CRH   |= (uint32_t)0x00080000;//配置PB12为上/下拉输入GPIOB->BSRR   = (uint32_t)0x00001000;//配置PB12为上拉//---------------------------------------------------------//printf("hello world!\r\n");while(1){GPIOC->BSRR  =  (uint32_t)0x00002000;//PC13引脚输出高电平Delay_ms(100);                       //延时100msGPIOC->BRR  =   (uint16_t)0x2000;    //PC13引脚输出低电平Delay_ms(100);   		             //延时100ms//库函数版本//---------------------------------------------------------//
//		if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12) == 0)
//		{
//			Delay_ms(10);  
//			if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12) == 0)
//				printf("key is pressed!\r\n");
//		}//---------------------------------------------------------////寄存器版本//---------------------------------------------------------//if((GPIOB->IDR & (uint16_t)0x1000) == 0){Delay_ms(10);if((GPIOB->IDR & (uint16_t)0x1000)== 0)printf("key is pressed!\r\n");}//---------------------------------------------------------//}
}

4 效果展示

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

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

相关文章

【Linux】frp内网穿透详细教程(简单易懂)

frp内网穿透详细教程(简单易懂) 文章目录 frp内网穿透详细教程(简单易懂)frp是什么?工作原理准备工作frp工具的使用第一步:下载安装包第二步:公网部署frps第三步:内网部署frpc第四步…

适配华为“纯血鸿蒙”,抖音开始招聘相关人才

目前,字节跳动上线了“大前端高级开发工程师”一职,开始招聘鸿蒙人才。 根据职位描述,该岗位负责抖音大前端基础工程与架构设计,以及抖音大前端基础设施建设。 该职位需要有前端工程化经验,熟悉JavaScript/TypeScrip…

关于BT站

BT站,全称BitTorrent站点,是一种基于BitTorrent协议的P2P(点对点)文件共享网站。BitTorrent是一种分布式文件共享协议,允许用户直接在彼此之间传输文件,而不需要依赖于中央服务器。BT站提供种子文件&#x…

斐波那契数列模型---使用最小花费爬楼梯

746. 使用最小花费爬楼梯 - 力扣(LeetCode) 1、状态表示: 题目意思即:cost[i]代表从第i层向上爬1阶或者2阶,需要花费多少力气。如cost[0],代表从第0阶爬到第1阶或者第2阶需要cost[0]的力气。 一共有cost.…

springboot/ssm学院个人信息管理系统Java高校课程作业管理系统web

springboot/ssm学院个人信息管理系统Java高校课程作业管理系统web 基于springboot(可改ssm)vue项目 开发语言:Java 框架:springboot/可改ssm vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库&#xf…

编写高质量Python (第35条) 不要通过 throw 变换生成器状态

第 35 条 不要通过 throw 变换生成器状态 ​ 除 yield from 表达式(参见 第 33 条) 与 send 方法(参见 第 34 条)外,生成器还有一个高级功能,就是可以把调用者通过 throw 方法传过来的 Exception 实例重新抛出。这个 throw 方法用…

Vue 3 中的 Teleport 特性详解

引言 在 Vue 3 中,引入了一个名为 Teleport 的新特性。这个特性允许开发者将组件的子组件“传送”到 DOM 中的任意位置,而不仅仅是它们的直接父级内部。这一功能在处理如模态框、弹出菜单、提示框等需要从其原始位置在视觉上移动到其他地方的用户界面元…

Spring Boot与Spring Boot MVC:构建现代化Web应用的利器

Spring Boot与Spring Boot MVC:构建现代化Web应用的利器 在当今的软件开发领域,特别是在Java生态系统中,Spring框架已经成为构建企业级应用程序的首选。而在Spring的众多子项目中,Spring Boot和Spring MVC是两个非常重要的组成部…

C++_数据类型_字符串型

作用 用于表示一串字符 两种风格 C风格字符串&#xff1a;char 变量名[] "字符串值” 示例 注意 C风格的字符串要用双括号括起来 C风格字符串&#xff1a;string 变量名 "字符串值” 注意 用C风格字符串的时候&#xff0c;要包含这个头文件#include <st…

PostgreSQL常用SQL语句

文章目录 PostgreSQL常用SQL语句免密交互增删改查备份恢复数据迁移用户管理权限管理进程管理查询优化PostgreSQL常用SQL语句 PostgreSQL部署,参见PostgreSQL部署与配置 免密交互 命令行执行SQL语句或备份、恢复时,有以下两种方式 1.交互式

【比较mybatis、lazy、sqltoy、lambda、操作数据 】操作批量新增、分页查询【一】

orm框架使用Lambda性能比较 环境&#xff1a; idea jdk17 spring boot 3.0.7 mysql 8.0测试条件常规对象 orm 框架是否支持xml是否支持 Lambda对比版本mybatis☑️☑️3.5.4sqltoy☑️☑️5.2.98lazy✖️☑️1.2.3-JDK17 数据库表(含有唯一性索引s_u) CREATE TABLE sys_u…

吴恩达机器学习-可选实验室-梯度下降-Gradient Descent for Linear Regression

文章目录 目标工具问题陈述计算损失梯度下降总结执行梯度下降梯度下降法成本与梯度下降的迭代预测绘制祝贺 目标 在本实验中&#xff0c;你将:使用梯度下降自动化优化w和b的过程 工具 在本实验中&#xff0c;我们将使用: NumPy&#xff0c;一个流行的科学计算库Matplotlib&…

【茶话数据结构】查找最短路径——Dijkstra算法详解(保姆式详细图解,步步紧逼,保你学会)

&#x1f4af; 博客内容&#xff1a;【茶话数据结构】查找最短路径——Dijkstra算法详解 &#x1f600; 作  者&#xff1a;陈大大陈 &#x1f989;所属专栏&#xff1a;数据结构笔记 &#x1f680; 个人简介&#xff1a;一个正在努力学技术的准前端&#xff0c;专注基础和实…

【学习心得】为Django项目创建专用MySQL用户并赋予权限

一、问题描述 也许你在本地开发Django项目的时候不会关心&#xff0c;项目A所用的MySQL数据库能否被项目B访问。但若你使用的公司服务器or学校服务器&#xff0c;这种情况下很多人共用一个MySQL&#xff0c;你就会担心别人或别的项目胡乱访问你正在开发的项目所使用的数据库。这…

算法D33 | 贪心算法3 | 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果

1005.K次取反后最大化的数组和 本题简单一些&#xff0c;估计大家不用想着贪心 &#xff0c;用自己直觉也会有思路。 代码随想录 Python: class Solution:def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:nums.sort(keylambda x: abs(x), reverseT…

【python】遵守 robots.txt 规则的数据爬虫程序

程序1 编写一个遵守 robots.txt 规则的数据爬虫程序涉及到多个步骤&#xff0c;包括请求网页、解析 robots.txt 文件、扫描网页内容、存储数据以及处理异常。由于编程语言众多&#xff0c;且每种语言编写爬虫程序的方式可能有所不同&#xff0c;以下将使用 Python 语言举例&am…

【论文】A Survey of Monte Carlo Tree Search Methods阅读笔记

本文主要是将有关蒙特卡洛树搜索的文献&#xff08;2011年之前&#xff09;进行归纳&#xff0c;概述了核心算法的推导&#xff0c;给出了已经提出的许多变化和改进的一些结构&#xff0c;并总结了MCTS方法已经应用于的博弈和其他领域的结果。 蒙特卡洛树搜索是一种通过在决策…

Redis在中国火爆,为何MongoDB更受欢迎国外?

一、概念 Redis Redis&#xff08;Remote Dictionary Server&#xff09;是一个使用ANSI C编写的开源、支持网络、基于内存、分布式、可选持久性的键值对存储数据库。Redis是由Salvatore Sanfilippo于2009年启动开发的&#xff0c;首个版本于同年5月发布。 MongoDB MongoDB…

C++练手题

第 1 题 【 问答题 】 • 红与黑 有一间长方形的房子&#xff0c; 地上铺了红色、 黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上&#xff0c; 只能向相邻的黑色瓷砖移动。 请写一个程序&#xff0c; 计算你总共能够到达多少块黑色的瓷砖。 时间限制&#xff1a; 1000…