proteus實現stm32按鍵控制LED燈流水燈方向

一、新建工程

1、工程命名

2、選擇工程存儲位置

3、默認下一步

4、默認下一步

5、選擇沒有固件項目,下一步

二、器件放置并連線

1、點擊左邊工具欄中運放的形狀的符號

2、再點擊‘P’,搜索器件

3、搜索器件并放置連線

按鍵控制LED需要的器件有,按鍵、電容、LED、電阻、主控,主控選擇的是stm32f103r6。

4、器件連線,如下圖所示:

圖中使用了網絡標簽,網絡標簽是在電源、GND的那個工具欄中的DEFAULT。

三、網絡配置

1、想要仿真成功運行,首先配置主控參數,雙擊主控,選擇Program File,即代碼的hex文件路徑,以及Crystal Frequency,即晶振的頻率8M,具體如下圖所示:

2、仿真供電網絡的配置,點擊工具欄中的“design”,再點擊配置供電網絡(點擊design后的第四個選項),將"VDDA"增加到"VCC/VDD"中,將"VSSA"增加到"GND"中,如下圖所示:

四、代碼分享

1、LED代碼

#include "stm32f10x.h"                  // Device header/*** 函    數:LED初始化* 參    數:無* 返 回 值:無*/
void LED_Init(void)
{/*開啟時鐘*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);		//開啟GPIOA的時鐘/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7 ;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);						//將PA1和PA2引腳初始化為推挽輸出/*設置GPIO初始化后的默認電平*/GPIO_SetBits(GPIOA, GPIO_Pin_1|GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);				//設置PA1和PA2引腳為高電平
}/*** 函    數:LED1開啟* 參    數:無* 返 回 值:無*/
void LED1_ON(void)
{GPIO_ResetBits(GPIOA, GPIO_Pin_1);		//設置PA1引腳為低電平
}/*** 函    數:LED1關閉* 參    數:無* 返 回 值:無*/
void LED1_OFF(void)
{GPIO_SetBits(GPIOA, GPIO_Pin_1);		//設置PA1引腳為高電平
}/*** 函    數:LED1狀態翻轉* 參    數:無* 返 回 值:無*/
void LED1_Turn(void)
{if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1) == 0)		//獲取輸出寄存器的狀態,如果當前引腳輸出低電平{GPIO_SetBits(GPIOA, GPIO_Pin_1);					//則設置PA1引腳為高電平}else													//否則,即當前引腳輸出高電平{GPIO_ResetBits(GPIOA, GPIO_Pin_1);					//則設置PA1引腳為低電平}
}

2、按鍵代碼

#include "stm32f10x.h"                  // Device header
#include "Delay.h"/*** 函    數:按鍵初始化* 參    數:無* 返 回 值:無*/
void Key_Init(void)
{/*開啟時鐘*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);		//開啟GPIOB的時鐘/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 ;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);						//將PB1和PB11引腳初始化為上拉輸入
}/*** 函    數:按鍵獲取鍵碼* 參    數:無* 返 回 值:按下按鍵的鍵碼值,范圍:0~2,返回0代表沒有按鍵按下* 注意事項:此函數是阻塞式操作,當按鍵按住不放時,函數會卡住,直到按鍵松手*/
uint8_t Key_GetNum(void)
{uint8_t KeyNum = 0;		//定義變量,默認鍵碼值為0if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0)			//讀PB1輸入寄存器的狀態,如果為0,則代表按鍵1按下{Delay_ms(20);											//延時消抖while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1)==0 );	//等待按鍵松手
//		Delay_ms(20);											//延時消抖KeyNum = 1;												//置鍵碼為1}return KeyNum;			//返回鍵碼值,如果沒有按鍵按下,所有if都不成立,則鍵碼為默認值0
}

3、main函數代碼

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "LED.h"
#include "Key.h"uint8_t KeyNum=0;
uint8_t flag=0;//流水燈方向
uint16_t LED_Value=0x0001;//GPIOA總共是16個IO口 ,二進制0000 0000 0000 0001,代表PA0為高電平,右邊是高位,左邊低位
int main(void)
{LED_Init();Key_Init();while (1){KeyNum=Key_GetNum();if(KeyNum==1)//按鍵切換流水燈的方向{if(flag==0)	{flag=1;}else flag=0;}//當flag=0時,流水燈方向從A0-A7if(flag==0){// 輸出當前LED值GPIO_Write(GPIOA, ~LED_Value);//因為IO口為低電平時,燈才亮,于是給GPIOA的寄存器賦值的時候取反。// 延時// 左移一位,實現流水燈效果LED_Value <<= 1;// 如果左移后的值為0,表示已經移到最高位,重新從最低位開始if(LED_Value == 0x0100) {LED_Value = 0x0001;//0000 0000 0000 0001}			}//當flag=1時,流水燈方向從A7-A0if(flag==1){// 輸出當前LED值GPIO_Write(GPIOA, ~LED_Value);//因為IO口為低電平時,燈才亮,于是給GPIOA的寄存器賦值的時候取反。// 延時// 右移一位,實現流水燈效果LED_Value >>= 1;// 如果左移后的值為0,表示已經移到最低位,重新從最高位PA7開始if(LED_Value == 0x0000) {LED_Value = 0x0080;//0000 0000 1000 0000}			}Delay_s(100);}
}

main函數實現了按鍵控制流水燈的方向,定義了一個變量flag來控制流水燈的方向,按鍵按下可以對flag的值進行取反。LED的流水燈是通過GPIO的寄存器的值來左移右移實現流水燈的效果,具體看代碼注釋

五、仿真與實物不同之處

1、仿真的按鍵引腳需要外部電路上拉

2、仿真不需要晶振電路

3、仿真流水燈的延時不太準確,不知道是不是我電腦CPU仿真不行的原因。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/89362.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/89362.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/89362.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

華為云Flexus+DeepSeek征文 | 讓運維更智能:Chaterm AI終端工具與華為云ModelArts Studio深度集成指南

華為云FlexusDeepSeek征文 | 讓運維更智能&#xff1a;Chaterm AI終端工具與華為云ModelArts Studio深度集成指南 引言一、ModelArts Studio平臺介紹華為云ModelArts Studio簡介ModelArts Studio主要特點 二、Chaterm介紹Chaterm簡介Chaterm主要特點 三、安裝Chaterm工具下載C…

湖北理元理律師事務所債務解法:從法律技術到生活重建

數據透視&#xff1a; 2023年武漢法院受理債務糾紛案11.4萬件&#xff0c;其中37%因不當還款規劃導致債務雪球效應。 一、債務危機的法律歸因 通過分析1200例債務咨詢案例&#xff0c;發現三大共性法律認知盲區&#xff1a; 擔保責任誤判 某企業主為朋友擔保200萬&#xff0…

小程序學習筆記:加載效果、上拉加載與節流處理

在微信小程序開發過程中&#xff0c;優化用戶體驗是非常重要的一環。今天我們就來分享如何在小程序中實現加載提示效果、上拉觸底加載下一頁數據以及對上拉觸底事件進行節流處理&#xff0c;讓你的小程序更加流暢和高效。 一、添加 loading 提示效果 在小程序中&#xff0c;當…

計算機網絡:【socket】【UDP】【地址轉換函數】【TCP】

一.socket 1.1socket接口 它返回的是一個文件描述符。創建socket文件描述符(TCP/UDP,客戶端服務器) ? socket()打開一個網絡通訊端口,如果成功的話,就像 open()一樣返回一個文件描 述符; ? 應用程序可以像讀寫文件一樣用 read/write 在網絡上收發數據; ? 如果 socket()調用…

機器人軌跡跟蹤控制與動力學模型詳解

1. 機器人控制的本質&#xff1a;通過關節扭矩執行軌跡 機器人控制的核心目標是讓機器人關節精確跟蹤期望軌跡 ( q d , q ˙ d , q d ) (q_d, \dot{q}_d, \ddot{q}_d) (qd?,q˙?d?,q?d?)。為此&#xff0c;控制器需根據當前狀態 ( q , q ˙ ) (q, \dot{q}) (q,q˙?)計…

智能辦公與科研革命:ChatGPT+DeepSeek大模型在論文撰寫、數據分析與AI建模中的實踐指南

隨著人工智能技術的快速發展&#xff0c;大語言模型如ChatGPT和DeepSeek在科研領域的應用正在為科研人員提供強大的支持。這些模型通過深度學習和大規模語料庫訓練&#xff0c;能夠幫助科研人員高效地篩選文獻、生成論文內容、進行數據分析和優化機器學習模型。 ChatGPT和Deep…

運營商場景下的實時脫敏方案:PB 級日志流的分布式處理架構

在數字化浪潮中&#xff0c;運營商積累了海量數據&#xff0c;涵蓋用戶信息、通信記錄、業務運營數據等。這些數據不僅是運營商業務運營的關鍵資產&#xff0c;也是創新服務、精準營銷的核心驅動力。然而&#xff0c;隨著數據量呈指數級增長&#xff0c;運營商每日需處理 PB 級…

docker+n8n的工作流中無法使用本地ollama服務的問題

使用docker創建n8n服務后&#xff0c;工作流中不想用大模型付費API測試&#xff0c;想用本地大模型來跑&#xff0c;剛好電腦上裝了ollama&#xff0c;就試了下添加ollama節點來替代大模型付費API&#xff0c;結果就遇到了以下問題 ollama正常運行中 但是工作流會卡在這&…

通過交互式可視化探索波動方程-AI云計算數值分析和代碼驗證

波動方程是一個基本的數學模型&#xff0c;它描述了各種類型的波&#xff08;包括機械波、聲波、電磁波和流體波&#xff09;如何通過不同的介質傳播&#xff0c;這使得它對于物理學、工程學和其他科學學科中聲學、光學、醫學成像和電信等領域的預測和設計都至關重要。 波動方程…

10授權

目錄 本節大綱 一、權限管理 1. 認證 2. 授權 二、授權核心概念 三、權限管理策略 1. 基于 URL 權限管理 權限表達式 2. 基于 方法 權限管理 EnableGlobalMethodSecurity 四、基本用法 五、原理分析 六、實戰 1. 簡介 2. 庫表設計 3. 創建 springboot 應用 本節…

線性規劃模型

線性規劃算是數學建模中最基礎的模型了&#xff0c;其典型特征就是線性和有限資源&#xff0c;即在一組線性約束條件下&#xff0c;求解一個線性目標函數的最大值或最小值問題&#xff1a; 其中x 是決策變量向量&#xff0c;c 是目標函數系數向量&#xff0c;a 和 b 分別是約束…

華為云Flexus+DeepSeek征文|體驗華為云ModelArts快速搭建Dify-LLM應用開發平臺并創建知識庫大模型工作流查詢數據庫數據

華為云FlexusDeepSeek征文&#xff5c;體驗華為云ModelArts快速搭建Dify-LLM應用開發平臺并創建知識庫大模型工作流查詢數據庫數據 什么是華為云ModelArts 華為云ModelArts ModelArts是華為云提供的全流程AI開發平臺&#xff0c;覆蓋從數據準備到模型部署的全生命周期管理&am…

WPF中Style和Template異同

在WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;Style和Template是兩個核心概念&#xff0c;用于控制UI元素的外觀和行為&#xff0c;但它們的職責和使用場景有明顯區別。以下是詳細分析&#xff1a; 一、基本概念 1. Style&#xff08;樣式&am…

針對 DVWA 中 Command Injection 模塊的亂碼問題及解決辦法

目錄 根本原因 解決辦法 優化說明 適用范圍 系統兼容性 在 DVWA 的 Command Injection 模塊中執行系統命令時&#xff0c;返回結果出現亂碼&#xff08;如圖1所示&#xff09;。 根本原因 DVWA 默認使用 UTF-8 編碼&#xff0c;而部分系統命令&#xff08;如 Windows 的…

Linux獲取ImageNet數據集方法及小規模imagenet

一、數據集下載 ImageNet官方鏈接&#xff1a;ImageNet Linux命令直接下載&#xff1a; 訓練集 wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train.tar --no-check-certificate驗證集 wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.t…

JAVA八股文:異常有哪些種類,可以舉幾個例子嗎?Throwable類有哪些常見方法?

Throwable、Error 與 Exception 所有的異常類型都繼承自 java.lang.Throwable。 其中 Error&#xff08;比如 OutOfMemoryError、StackOverflowError、類加載失敗等&#xff09;表示 JVM 自身或運行環境的問題&#xff0c;不應該也通常無法由應用程序去捕獲或恢復&#xff0c;…

.NetCore+Vue快速生產框架開發詳細方案

文章目錄 1. 項目概述 1.1 項目背景1.2 項目目標1.3 核心功能 2. 技術棧選擇 2.1 后端技術棧2.2 前端技術棧2.3 開發工具 3. 系統架構設計 3.1 整體架構3.2 后端架構設計3.3 前端架構設計3.4 微服務考慮 4. 后端.NET核心設計 4.1 項目結構4.2 核心模塊設計4.2.1 用戶模塊4.2.2 …

WPF學習筆記(18)觸發器Trigger

觸發器 1. 概述2. 詳解2.1. Trigger 用法2.2. MultiTrigger 用法2.3. DataTrigger 用法2.4. EventTrigger 用法 總結 1. 概述 官方文檔&#xff1a;https://learn.microsoft.com/zh-cn/dotnet/api/system.windows.trigger?viewnetframework-4.8 2. 詳解 在Style中可以指定觸…

記本好書:矩陣力量:線性代數全彩圖解+微課+Python編程

書名&#xff1a;矩陣力量&#xff1a;線性代數全彩圖解微課Python編程 作者&#xff1a;姜偉生 出版社&#xff1a;清華大學出版社 出版時間&#xff1a;2023-06-01 ISBN&#xff1a;9787302632511 品牌方&#xff1a;清華大學出版社有限公司 發現一本好書&#xff0c;但是一…

?Webpack打包流程

Webpack打包流程的核心步驟包括初始化配置、解析入口文件、構建依賴圖、模塊轉換、資源優化和輸出文件?。該流程通過遞歸分析模塊依賴關系&#xff0c;結合加載器和插件處理各類資源&#xff0c;最終生成優化后的靜態文件。 ?核心流程概述? ?初始化配置?&#xff1a;讀取…