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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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硬…