小興教你做平衡小車-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.pswp.cn/news/717628.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717628.shtml
英文地址,請注明出處:http://en.pswp.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…