stm32hal模塊驅動(1)hpdl1414驅動

之前一直想用hpdl1414畫一塊手表,前面pcb測試板畫完沒空調試,最近剛好空出來時間,遂發下驅動。

這里簡單贅述hpdl1414的驅動原理:D0-D6負責數據輸入(ascii表后7位),A0,A1負責更改hpdl1414模塊顯示的位數,wr負責控制是否寫入數據。

下圖為pcb接線(d4忘記畫了,用pb7來)

hpdl1414.h

#ifndef HPDL1414_H
#define HPDL1414_H#include "stm32l0xx_hal.h"// 數據引腳定義
#define D0_H  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET)
#define D0_L  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET)
#define D1_H  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET)
#define D1_L  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET)
#define D2_H  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET)
#define D2_L  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET)
#define D3_H  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET)
#define D3_L  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET)
#define D4_H  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET)
#define D4_L  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET)
#define D5_H  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET)
#define D5_L  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET)
#define D6_H  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET)
#define D6_L  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET)// 控制引腳定義
#define WR1_H  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET)  // 前4位
#define WR1_L  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET)
#define WR2_H  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET)  // 后4位
#define WR2_L  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET)
#define A0_H   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET)
#define A0_L   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET)
#define A1_H   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET)
#define A1_L   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET)// 函數聲明
void hpdl1414_init(void);
void hpdl1414_write_dual_char(uint8_t position, char c);
void hpdl1414_display_string(const char *str);  // 修復未定義錯誤
void hpdl1414_display_8digit_string(const char *str);#endif // HPDL1414_H

hpdl1414.c

#include "hpdl.h"
#include <string.h>// 微秒延時函數
static void delay_us(uint16_t us) {while (us--) {__NOP(); __NOP(); __NOP(); __NOP();}
}// 設置數據引腳
static void set_data_pins(uint8_t data) {(data & 0x01) ? D0_H : D0_L;(data & 0x02) ? D1_H : D1_L;(data & 0x04) ? D2_H : D2_L;(data & 0x08) ? D3_H : D3_L;(data & 0x10) ? D4_H : D4_L;(data & 0x20) ? D5_H : D5_L;(data & 0x40) ? D6_H : D6_L;
}// 設置地址引腳
static void set_address(uint8_t addr) {(addr & 0x01) ? A0_H : A0_L;(addr & 0x02) ? A1_H : A1_L;
}// 初始化函數
void hpdl1414_init(void) {WR1_H; WR2_H;  // 禁用寫入A0_L; A1_L;    // 地址歸零D0_L; D1_L; D2_L; D3_L; D4_L; D5_L; D6_L;  // 數據引腳置低
}// 寫入單個字符到指定位置(0-7)
void hpdl1414_write_dual_char(uint8_t position, char c) {uint8_t physical_pos;if (position < 4) {// 前4位(WR1控制)修正地址順序:0→3, 1→2, 2→1, 3→0physical_pos = 3 - position;  // 關鍵修改:反向映射set_address(physical_pos);set_data_pins(c);WR1_L; delay_us(1); WR1_H;} else if (position < 8) {// 后4位(WR2控制)同樣修正地址順序physical_pos = 7 - position;  // 關鍵修改:反向映射set_address(physical_pos);set_data_pins(c);WR2_L; delay_us(1); WR2_H;}
}// 顯示4位字符串(兼容舊代碼)
void hpdl1414_display_string(const char *str) {uint8_t len = strlen(str);if (len > 4) len = 4;for (uint8_t i = 0; i < len; i++) {hpdl1414_write_dual_char(i, str[i]);}for (uint8_t i = len; i < 4; i++) {hpdl1414_write_dual_char(i, ' ');}
}// 顯示8位字符串
void hpdl1414_display_8digit_string(const char *str) {uint8_t len = strlen(str);if (len > 8) len = 8;for (uint8_t i = 0; i < len; i++) {hpdl1414_write_dual_char(i, str[i]);}for (uint8_t i = len; i < 8; i++) {hpdl1414_write_dual_char(i, ' ');}
}

main.c(部分)

    hpdl1414_init();// 顯示"1234"hpdl1414_display_string("1234");uint8_t i =0;/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){hpdl1414_display_8digit_string("12345678");//hpdl1414_display_8digit_string(" DESSSQ ");//hpdl1414_display_8digit_string("ILOVEYOU");/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}

最后附上驅動成功圖片

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

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

相關文章

從代碼學習深度強化學習 - TRPO PyTorch版

文章目錄 前言核心工具函數廣義優勢估計 (Generalized Advantage Estimation, GAE)案例一:TRPO 解決離散動作問題 (CartPole-v1)1. 環境初始化2. 網絡結構定義3. TRPO 智能體實現4. 訓練與可視化5. 訓練主程序與結果案例二:TRPO 解決連續動作問題 (Pendulum-v1)1. 環境與工具…

MySQL 升級到8.4版本的詳細指南

本指南詳細介紹了將 MySQL 升級到 8.4 版本的完整流程、注意事項和操作方法。 一、升級前準備 (3.1 Before You Begin) 在開始升級之前&#xff0c;必須仔細審閱本節信息并執行所有推薦的操作&#xff1a; 理解升級過程&#xff1a;了解升級期間可能發生的情況。請參閱第 3.4…

leetcode427.建立四叉樹

區間x0到x1和區間y0到y1都是左閉右開的 解題基本思路是先判斷當前矩陣是不是全0或全1&#xff0c;如果是就直接返回新建的一個節點值(矩陣的統一值&#xff0c;葉子節點&#xff09;,如果不是那就新建一個節點值&#xff0c;非葉并且左上右上左下右下四個方向上遞歸創建節點 /…

醫學+AI教育實踐!南醫大探索數據挖掘人才培養,清華指導發布AI教育白皮書

教育數字化浪潮正以前所未有的力度重塑高等教育格局。今年4月&#xff0c;為貫徹落實《教育強國建設規劃綱要&#xff08;2024—2035 年&#xff09;》&#xff0c;教育部等九部門印發《關于加快推進教育數字化的意見》&#xff0c;表明將持續推動“人工智能教育”全方位發展&a…

PDF處理控件Spire.PDF系列教程:如何使用C# 拆分 PDF 文件(完整指南)

PDF文件因其高度的跨平臺兼容性和安全穩定的格式特點&#xff0c;廣泛應用于企業文檔管理和電子資料傳輸中。隨著PDF文檔頁數和內容復雜度的增加&#xff0c;拆分PDF成為優化文檔處理流程、提升辦公效率的重要需求。通過編程方式實現PDF拆分&#xff0c;不僅能自動化處理海量文…

文心4.5開源模型部署實踐

文心4.5開源模型部署實踐 使用fastdeploy本地部署 執行命令&#xff1a; python -m fastdeploy.entrypoints.openai.api_server \--model baidu/ERNIE-4.5-21B-A3B-Paddle \--port 8180 \--metrics-port 8181 \--engine-worker-queue-port 8182 \--max-model-len 32768 \--m…

Python迭代器、生成器、閉包和裝飾器(三器一包)

return、continue、break區別&#xff1a; return只能用在函數里面&#xff0c;表示從函數中返回&#xff0c;函數體內的后續任何代碼都不執行continue只是跳出當前循環&#xff0c;進入下一循環break只是跳出全部循環&#xff0c;如果循環后面還有代碼&#xff0c;會進行執行…

【Java】Maven

一.Maven簡介 Maven的產生主要是為了解決Java項目中的兩個問題&#xff1a; 1.依賴管理&#xff1a; 傳統 Java 項目在引入第三方庫時&#xff0c;需要手動下載 JAR 包并維護復雜的依賴關系。Maven 提供了統一的依賴管理機制&#xff0c;通過簡單的配置即可自動從倉庫下載并引…

人臉活體識別3:C/C++實現人臉眨眼 張嘴 點頭 搖頭識別(可實時檢測)

人臉活體識別3&#xff1a;C/C實現人臉眨眼 張嘴 點頭 搖頭識別(可實時檢測) 目錄 人臉活體識別3&#xff1a;C/C實現人臉眨眼 張嘴 點頭 搖頭識別(可實時檢測) 1. 前言 2.人臉活體識別方法 &#xff08;1&#xff09;基于人臉動作的檢測?? &#xff08;2&#xff09;?…

【ABAP】 從無到有 新建一個Webdynpro程序

、新建WDA 可從SE80在web dynpro 組件下 創建 并按例以下操作 2、插入窗口 3、相關功能 3-1、展示消息 DATA:lo_api_controller TYPE REF TO if_wd_controller,lo_message_handler TYPE REF TO if_wd_message_manager.lo_api_controller ? wd_this->wd_get_api( ).lo_mess…

ALV常用設置(更新中一)

之前設置了checkbox&#xff0c;但是觸發不了單擊事件&#xff0c;且alv自帶的復選&#xff0c;鼠標移動單擊別處就會自動取消。 **增加多選框到fieldcat&#xff0c;**這一點很重要&#xff0c;然后設置 IF gs_fcat-fieldname sel.gs_fcat-checkbox X. gs_fcat-edit X. …

NumPy 或 PyTorch/TensorFlow 中的張量理解

(2, 2, 3) 形狀的 3D 數組&#xff08;或張量&#xff09;的結構。 個人理解&#xff1a; 2個2維數組&#xff08;張量&#xff09;&#xff0c;2維數組&#xff08;張量&#xff09;里面有2個1維向量&#xff08;張量&#xff09;&#xff0c;1維向量&#xff08;張量&#x…

Linux環境下使用 C++ 與 OpenCV 實現 ONNX 分類模型推理

實驗環境&#xff1a;Ubuntu 20.0 推理模型&#xff1a;ONNX分類模型 1. 安裝依賴項 首先是需要安裝依賴庫&#xff0c;如g&#xff0c;cmake等&#xff0c;如果已經安裝的話可以忽略 sudo apt install -y g sudo apt install -y cmake sudo apt install -y make sudo apt i…

AJAX 安裝使用教程

一、AJAX 簡介 AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;是一種在無需重新加載整個網頁的情況下&#xff0c;能夠與服務器交換數據并更新部分網頁內容的技術。它不是一種新語言&#xff0c;而是使用現有的標準組合&#xff1a;JavaScript XMLHttpRequest…

【牛客算法】牛客網編程題解:小紅拼圖

一、題目介紹 1.1. 題目鏈接 &#xff1a;小紅拼圖 https://www.nowcoder.com/questionTerminal/08b54686f0d14bd784d9d148c68a268a 1.2 題目介紹 小紅正在玩一個拼圖游戲&#xff0c;她有一些完全相同的拼圖組件&#xff1a; 小紅準備用這些組件來拼成一些圖案。這些組件可…

買賣股票的最佳時機--js 算法

一、買賣股票的最佳時機 給定一個數組 prices ,它的第 i 個元素 prices[i] 表示一支給定股票第 i 天的價格。你只能選擇 某一天 買入這只股票,并選擇在 未來的某一個不同的日子 賣出該股票。設計一個算法來計算你所能獲取的最大利潤。返回你可以從這筆交易中獲取的最大利潤。…

C#基礎(WndProc)

WndProc 是操作系統與你的程序“對話”的通道??。當用戶點擊鼠標、按下鍵盤&#xff0c;或系統事件&#xff08;如窗口移動&#xff09;發生時&#xff0c;Windows 會將這些事件打包成“消息”&#xff0c;發送給你的窗口&#xff0c;而 WndProc 就是接收和處理這些消息的函數…

記錄一個 Linux中腳本無法執行的問題

問題描述&#xff1a; 在本地的window系統傳的云服務器上一個.sh結尾的安裝Java環境的腳本 上傳到云服務器后&#xff0c;使用命令賦予執行權限 chmod x 文件名然后看一下這個腳本變綠了就可以了 然后開始嘗試執行 ./腳本名 然后就報錯了 然后開始排查問題 1.檢查并修復 She…

Iceberg在圖靈落地應用

導讀 百度MEG上一代大數據產品存在平臺分散、易用性差等問題&#xff0c;導致開發效率低下、學習成本高&#xff0c;業務需求響應遲緩。為了解決這些問題&#xff0c;百度MEG內部開發了圖靈3.0生態系統&#xff0c;包括Turing Data Engine(TDE)計算&存儲引擎、Turing Data…

FPGA設計的用戶約束

FPGA設計的用戶約束 文章目錄 FPGA設計的用戶約束FPGA設計的用戶約束綜合約束管腳約束位置約束時序約束小總結 FPGA設計的用戶約束 至此&#xff0c;HDL到門級網表的轉化已經完成&#xff0c;對于編譯器來說&#xff0c;下一步的任務就是要將門級網表轉換并映射到具體的FPGA硬…