STM32、GD32驱动TM1640原理图、源码分享
一、原理图分享


二、源码分享
/*************************************************
* @copyright:
* @author:Xupeng
* @date:2024-07-18
* @description:
**************************************************/
#include "smg.h"#define DBG_TAG "smg"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>static const int sckPin = GET_PIN(D,2);
static const int sdaPin = GET_PIN(D,3);/*************************************************
* @function:static int tm1640_init()
* @description: tm1640初始化
* @calls:
* @input:
* @return:
* @others:
*************************************************/
static int tm1640_init()
{rt_pin_mode(sckPin,PIN_MODE_OUTPUT);rt_pin_mode(sdaPin,PIN_MODE_OUTPUT);rt_pin_write(sckPin,PIN_HIGH);rt_pin_write(sdaPin,PIN_HIGH);return 0;
}INIT_BOARD_EXPORT(tm1640_init);
/*************************************************
* @function:static int tm1640_start()
* @description: tm1640启动
* @calls:
* @input:
* @return:
* @others:
*************************************************/
static void tm1640_start()
{rt_pin_write(sckPin,PIN_HIGH);rt_pin_write(sdaPin,PIN_HIGH);rt_hw_us_delay(5);rt_pin_write(sdaPin,PIN_LOW);rt_hw_us_delay(5);rt_pin_write(sckPin,PIN_LOW);
}
/*************************************************
* @function:static int tm1640_stop()
* @description: tm1640停止
* @calls:
* @input:
* @return:
* @others:
*************************************************/
static void tm1640_stop()
{rt_pin_write(sdaPin,PIN_LOW);rt_pin_write(sckPin,PIN_HIGH);rt_hw_us_delay(5);rt_pin_write(sdaPin,PIN_HIGH);rt_hw_us_delay(5);rt_pin_write(sckPin,PIN_HIGH);}
/*************************************************
* @function:static void tm1640_write_byte(uint8_t data)
* @description: tm1640发送字节
* @calls:
* @input:
* @return:
* @others:
*************************************************/
static void tm1640_write_byte(uint8_t data)
{uint8_t i;for(i=0;i<8;i++){rt_pin_write(sckPin,PIN_LOW);if(data & 0x01)rt_pin_write(sdaPin,PIN_HIGH);elsert_pin_write(sdaPin,PIN_LOW);data>>=1;rt_hw_us_delay(5);rt_pin_write(sckPin,PIN_HIGH);}
}static const uint8_t smgCode[]={//显示段码 数码管字跟 0x3F, //[0] '0'0x06, //[1] '1'0x5B, //[2] '2'0x4F, //[3] '3'0x66, //[4] '4'0x6D, //[5] '5'0x7D, //[6] '6'0x07, //[7] '7'0x7F, //[8] '8'0x6F, //[9] '9'0x77, //[10] 'A'0x7C, //[11] 'b'0x58, //[12] 'c'0x39, //[13] 'C'0x5E, //[14] 'd'0x79, //[15] 'E'0x71, //[16] 'F'0x3D, //[17] 'G'0x74, //[18] 'h'0x76, //[19] 'H'0x0E, //[20] 'J'0x38, //[21] 'L'0x54, //[22] 'n'0x37, //[23] 'N'0x5C, //[24] 'o'0x73, //[25] 'P'0x67, //[26] 'q'0x67, //[27] 'R'0x50, //[28] 'r'0x3E, //[29] 'u'0x1C, //[30] 'v'0x6E, //[31] 'y'0x40, //[32] '-'0x00,
};static uint8_t showBuf[16] = {0};
/*************************************************
* @function:void smg_show_value(float value)
* @description: 数码管显示值
* @calls:
* @input:
* @return:
* @others:
*************************************************/
void smg_show_value(float value)
{if( weight > 99999 || weight < -99999){for(uint8_t i=0;i<8;i++)showBuf[i] = 0x40;return;}int32_t w = weight*100;//保留两位小数//显示符号if(w > 0)showBuf[0] = 0;elseshowBuf[0] = 0x40;w = abs(w);showBuf[7] = smgCode[w%10];showBuf[6] = smgCode[w/10%10];showBuf[5] = smgCode[w/100%10] | 0x80;showBuf[4] = smgCode[w/1000%10];showBuf[3] = smgCode[w/10000%10];showBuf[2] = smgCode[w/100000%10];showBuf[1] = smgCode[w/1000000%10];//取消前面0的显示for(uint8_t i=1;i<6;i++){if(showBuf[i] == smgCode[0])showBuf[i] = 0x00;elsebreak;}}
/*************************************************
* @function:void smg_send_data(bool on,uint8_t brightness)
* @description: 数码管发送数据
* @calls:
* @input:
* @return:
* @others:
*************************************************/
void smg_send_data(bool on,uint8_t brightness)
{tm1640_start();tm1640_write_byte(0x40); //设置数据命令tm1640_stop();tm1640_start();tm1640_write_byte(0xc0); //设置显示地址for(uint8_t i=0;i<sizeof(showBuf);i++){tm1640_write_byte(showBuf[i]);}tm1640_stop();tm1640_start();tm1640_write_byte(0x80 | on<<3 | brightness); //设置显示控制命令tm1640_stop();
}相关文章:
STM32、GD32驱动TM1640原理图、源码分享
一、原理图分享 二、源码分享 /************************************************* * copyright: * author:Xupeng * date:2024-07-18 * description: **************************************************/ #include "smg.h"#define DBG_TAG "smg&…...
spring boot 对接aws 的S3 服务,实现上传和查询
1.aws S3介绍 AWS S3(Amazon Simple Storage Service)是亚马逊提供的一种对象存储服务,旨在提供可扩展、高可用性和安全的数据存储解决方案。以下是AWS S3的一些主要特点和功能: 1.1. 对象存储 对象存储模型:S3使用…...
PH热榜 | 2025-02-12
1. FirstHR 2.0 with HR Copilot 标语:小型企业的一站式人力资源平台 介绍:对小型企业来说,FirstHR是一个人力资源平台,专注于招聘和团队发展,并融合了一点人工智能技术。 产品网站: 立即访问 Product …...
通过例子学 rust 个人精简版 1-1
1-1 Hello World fn main() {println!("Hello World!");// 动手试一试println!("Im a Rustacean!"); }Hello World! Im a Rustacean!要点1 :println 自带换行符 注释 fn main() {let x 5 /* 90 */ 5;println!("Is x 10 or 100? x …...
HTTP的前世今生:如何塑造现代互联网的交互方式?
一、关于HTTP 1.1 简介 “没有HTTP协议,就没有今天的互联网。” 从简单的文本传输到支撑全球数十亿设备的实时交互,HTTP协议始终是Web世界的核心纽带。本文将深入剖析其设计思想、演进历程及底层工作原理。 HTTP(HyperText Transfer Protoco…...
Flutter_学习记录_动画的简单了解
用AnimationController简单实现如下的效果图: 1. 只用AnimationController实现简单动画 1.1 完整代码案例 import package:flutter/material.dart;class AnimationDemo extends StatefulWidget {const AnimationDemo({super.key});overrideState<AnimationDe…...
【java】for (int num : numbers) { System.out.print(num + “ “); } for里的是什么意思
for (int num : numbers) 是 Java 中的一种 增强型 for 循环(也称为 for-each 循环)。它的作用是遍历数组或集合中的每一个元素,并对每个元素执行循环体中的操作。 1. 增强型 for 循环的语法 java Copy for (元素类型 变量名 : 数组或集合…...
内容中台驱动企业CMS架构优化与高效策略
内容概要 在数字化转型浪潮中,企业内容管理系统(CMS)正面临从单一内容存储向智能化、协同化方向演进的迫切需求。通过引入内容中台架构,企业能够有效整合元数据管理、版本控制与智能协作能力,从而优化传统CMS的底层逻…...
我用 Cursor 开发了一款个人小记系统
https://note.iiter.cn 项目背景 在日常工作和学习中,我们经常需要快速记录一些想法、收藏一些有用的链接或者保存一些重要的文本、图片内容。虽然市面上已经有很多笔记软件,但我想要一个更轻量、更简单的工具,专注于快速记录和智能检索。于是我开发了这款个人小记系统。 系统…...
百问网(100ask)提供的烧写工具的原理和详解;将自己编译生成的u-boot镜像文件烧写到eMMC中
百问网(100ask)提供的烧写工具的原理 具体的实现原理见链接 http://wiki.100ask.org/100ask_imx6ull_tool 为了防止上面这个链接失效,我还对上面这个链接指向的页面保存成了mhtml文件,这个mhtml文件的百度网盘下载链接: https://pan.baidu.c…...
doris:异步物化视图概述
物化视图作为一种高效的解决方案,兼具了视图的灵活性和物理表的高性能优势。 它能够预先计算并存储查询的结果集,从而在查询请求到达时,直接从已存储的物化视图中快速获取结果,避免了重新执行复杂的查询语句所带来的开销。 使用场…...
图像缩放的双线性插值实现方式
1、双线性插值概念 双线性插值是一种用于在二维网格上进行插值的方法,适用于图像处理、计算机图形学等领域。它通过利用四个邻近点的已知值,估算出任意点的值。双线性插值在两个方向(通常是水平和垂直)上分别进行线性插值&#x…...
深入剖析 Vue 的响应式原理:构建高效 Web 应用的基石
深入剖析 Vue 的响应式原理:构建高效 Web 应用的基石 在前端开发的广阔天地里,Vue.js 凭借其简洁易用的特性和强大的功能,成为众多开发者的心头好。其中,响应式原理作为 Vue 的核心亮点之一,让数据与视图之间实现了高…...
40.日常算法
1.无重复字符的最长子串 题目来源 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 class Solution { public:int lengthOfL…...
CAS单点登录(第7版)11.SSO SLO
如有疑问,请看视频:CAS单点登录(第7版) SSO & SLO 安装IDEA Download IntelliJ IDEA – The IDE for Professional Development in Java and Kotlin 安装Maven Download Apache Maven – Maven MAVEN_HOMED:\apache-maven…...
Bob the Canadian
1:around the house Hi! Bob the Canadian here! Let’s learn English around the house. Come on in! Hi, Bob the Canadian here. Welcome to this video. If this is your first time here, don’t forget to click the subscribe button below, and give…...
CAS单点登录(第7版)16.模仿
如有疑问,请看视频:CAS单点登录(第7版) 模仿 概述 代理身份验证 代理身份验证(模拟),有时称为 Web 的 sudo,是代表其他用户进行身份验证的能力。 在这种情况下,两个参…...
预留:大数据Hadoop之——部署hadoop+hive+Mysql环境(Linux)
传送门目录 前期准备 一、JDK的安装 1、安装jdk 2、配置Java环境变量 3、加载环境变量 4、进行校验 二、hadoop的集群搭建 1、hadoop的下载安装 2、配置文件设置 2.1. 配置 hadoop-env.sh 2.2. 配置 core-site.xml 2.3. 配置hdfs-site.xml 2.4. 配置 yarn-site.xm…...
RabbitMQ介绍以及基本使用
文章目录 一、什么是消息队列? 二、消息队列的作用(优点) 1、解耦 2、流量削峰 3、异步 4、顺序性 三、RabbitMQ基本结构 四、RabbitMQ队列模式 1、简单队列模式 2、工作队列模式 3、发布/订阅模式 4、路由模式 5、主题模式 6、…...
C++演示中介模式
避免两个模块之间的耦合,使用中介模式解决。下面是C代码 #include <iostream> #include <vector>using namespace std;class client;//中介 class mediator { public:void addclient(client* client) {clientVec.push_back(client);}void send(const s…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
