05-CubeMx+Keil+Proteus模擬STM32 - GPIO(四)

来源:https://www.cnblogs.com/sheepeach/archive/2022/05/05/STM32F103_GPIO_04.html
-Advertisement-
Play Games

本文例子參考《STM32單片機開發實例——基於Proteus虛擬模擬與HAL/LL庫》 源代碼:https://github.com/LanLinnet/STM33F103R6 項目要求 實現數位管動態顯示數字1~8。 硬體設計 在第一節的基礎上,在Proteus中添加電路如下圖所示,其中我們添加了 ...


本文例子參考《STM32單片機開發實例——基於Proteus虛擬模擬與HAL/LL庫》
源代碼:https://github.com/LanLinnet/STM33F103R6

項目要求

實現數位管動態顯示數字1~8。

硬體設計

  1. 第一節的基礎上,在Proteus中添加電路如下圖所示,其中我們添加了一個排阻RX8、一個8位共陽極七段數位管顯示器7SEG-MPX8-CA-BLUE、一個非門電路74HC04。

    由於共陽極數位管是低電平驅動的,根據電路圖我們可以知道,當STM32單片機輸出低電平時,數位管發光。
    註意:由於電路中用到的反相器74HC04僅有6個通道,為了避免晶元浪費,我們也可以使用8位數位管可以使用2個PNP型三極體S8550來構成反向電路。不過由於三極體在模擬過程中響應速度太慢,我們在這裡就不使用了。

  2. 打開CubeMX,按照建立工程,配置PC0-PC7、PB0-PB7引腳為GPIO_Output。

  3. 點擊“Project Manager”--“Advanced Settings”,將GPIO的庫改為LL庫(我們後面需要用到LL庫中的函數),點擊“Generator Code”生成Keil工程。

軟體編寫

  1. 本次我們需要實現7段共陽極數位管,其段表如下所示:
0xc0,//0
0xf9,//1
0xa4,//2
0xb0,//3
0x99,//4
0x92,//5
0x82,//6
0xf8,//7
0x80,//8
0x90,//9
0x88,//A
0x83,//B
0xc6,//C
0xa1,//D
0x86,//E
0x8e, //F
0x8c, //P
0xc1, //U
0x91, //Y
0x7c, //L
0x00, //全亮
0xff  //熄滅
  1. 點擊“Open Project”在Keil中打開工程,雙擊“main.c”文件。

  2. 本次模擬我們用到寫埠輸出函數LL_GPIO_WriteOutputPort(),其官方文檔API介紹如下圖所示。

  3. 我們需要通過查表的方式讀取數位管的段碼,所以我們先在函數的最開始設置一個數組存放數位管的段碼。

/* USER CODE BEGIN PV */
const uint8_t SegmentCodes[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90
};
/* USER CODE END PV */ 

數位管的動態顯示就是多個數位管共用一組GPIO引腳,當刷新速度足夠快時,利用人眼的“視覺暫留”效應,讓人產生所有數位管同時發光的錯覺。
通過迴圈的方式,我們依次選通數位管,並讀取數位管段碼數組中的值,所以我們先在main函數的最開始定義一個迴圈變數,並對顯示的數字進行處理。

/* USER CODE BEGIN 1 */
uint8_t i;  //迴圈變數
uint64_t num=12345678;  //需要顯示的數字
uint8_t unit[8];  //顯示數字的每一位
//8位十進位數字每一位的分解
unit[7]=num/10000000;
unit[6]=num%10000000/1000000;
unit[5]=num%1000000/100000;
unit[4]=num%100000/10000;
unit[3]=num%10000/1000;
unit[2]=num%1000/100;
unit[1]=num%100/10;
unit[0]=num%10;
/* USER CODE END 1 */

最後,我們在while迴圈中添加下麵的代碼

/* USER CODE BEGIN WHILE */
while (1)
{
  for(i=0;i<8;i++)
  {
    LL_GPIO_WriteOutputPort(GPIOB,0xff);
    LL_GPIO_WriteOutputPort(GPIOC,SegmentCodes[unit[i]]);
    LL_GPIO_WriteOutputPort(GPIOB,(0x7f>>i)|(0x7f<<(8-i)));
    HAL_Delay(1);
  }
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */

聯合調試

  1. 點擊運行,生成HEX文件。
  2. 在Proteus中載入相應HEX文件,點擊運行,可以看到數位管從左到右依次顯示數字1~8。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本章主要介紹pytest幾種數據驅動的方法,也是我們做介面自動化中經常要使用到的,大致分為以下四種。 一.yaml 二.json 三.csv 四.excel 一.yaml 1.安裝插件:pip install pyyaml 2.yaml的兩種讀寫方法load()和dump(),話不多說,直接上代碼 ...
  • 一、什麼是Maven? Apache Maven是一個軟體項目管理的綜合工具。基於項目對象模型(POM)的概念,提供了幫助管理構建、文檔、報告、依賴、發佈等方法,Maven簡化和標準化項目建設過程。處理編譯,分配,文檔,團隊協作和其他任務的無縫連接。 Maven增加可重用性並負責建立相關的任務。 1 ...
  • 本文闡述了socket編程、IO網路模型,以及各種IO模型的適用場景。 RPC架構設計 文章更新曆史 2022/03/01 初稿。 2022/05/04 修改相關描述。 socket socket網路編程 socket概述 socket套接字是兩台主機之間邏輯連接的端點。 TCP/IP協議是傳輸層協 ...
  • C++實例1--通訊錄管理系統 1 #include<iostream> 2 #include<string> 3 4 using namespace std; 5 6 #define MAX 1000 // 最大人數 7 8 // 通訊錄管理系統 9 10 // 主菜單 11 void showM ...
  • 大家好,我是DD,今天繼續來學點Java的新特性! 假設有這樣一個場景,我們需要做一個工具。用來自動生成項目文檔,文檔可以通過瀏覽器查看,所以最後產出物肯定是一堆html文件。為了讓這些html文件更容易讀,良好的格式肯定要保持,該換行的換行、該縮進的縮進。 那麼,在組織最後內容的時候,你可能就會這 ...
  • 為組件設置邊框 很多情況下,我們常常喜歡給不同的組件設置邊框,從而讓界面的層次感更明顯,swing中提供了Border對象來代表一個邊框,下圖是Border的繼承體系圖: ​ 特殊的Border: TitledBorder:它的作用並不是直接為其他組件添加邊框,而是為其他邊框設置標題,創建該類的對象 ...
  • iNeuOS本次更新主要完善數據點、設備和計算平臺的計算預警,三個地方的計算預警作用的數據範圍不一樣,數據點只對單獨數據點、設備是對當前設備範圍的數據點、計算平臺是對當前平臺的所有數據點。 ...
  • 本節介紹有關伺服器管理和維護過程中的一些註意事項,都是筆者的經驗之談,相信對新手會有一定的啟發和幫助。 很多初學者接觸Linux 時間不長,還未完整地學習一遍 Linux,理解本節內容可能有些困難,可以先跳過本節,閱讀完整套教程後再回過頭來閱讀。 遠程伺服器關機及重啟時的註意事項 為什麼遠程伺服器不 ...
一周排行
    -Advertisement-
    Play Games
  • 基於.NET Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...