STM32关于驱动段码屏显示

2023-05-16

本篇文章主要记录一下我在工作中用STM32单片机驱动段码屏显示内容,不讲解具体的驱动原理,只是单纯记录如何编写驱动屏幕图标显示的代码,以便我日后查看。

单片机:STM32L152RCT6A
IDE:Keil5.25.2.0
代码生成:STM32CUBEMX4.23.0

具体段码屏的驱动代码我直接贴出来:

/* LCD init function */
static void MX_LCD_Init(void)
{
    hlcd.Instance = LCD;
    hlcd.Init.Prescaler = LCD_PRESCALER_1;
    hlcd.Init.Divider = LCD_DIVIDER_31;
    hlcd.Init.Duty = LCD_DUTY_1_4;
    hlcd.Init.Bias = LCD_BIAS_1_3;
    hlcd.Init.VoltageSource = LCD_VOLTAGESOURCE_INTERNAL;
    hlcd.Init.Contrast = LCD_CONTRASTLEVEL_3;
    hlcd.Init.DeadTime = LCD_DEADTIME_0;
    hlcd.Init.PulseOnDuration = LCD_PULSEONDURATION_4;
    hlcd.Init.MuxSegment = LCD_MUXSEGMENT_DISABLE;
    hlcd.Init.BlinkMode = LCD_BLINKMODE_OFF;
    hlcd.Init.BlinkFrequency = LCD_BLINKFREQUENCY_DIV8;
    if (HAL_LCD_Init(&hlcd) != HAL_OK)
    {
        _Error_Handler(__FILE__, __LINE__);
    }
}


void HAL_LCD_MspInit(LCD_HandleTypeDef* hlcd)
{
    GPIO_InitTypeDef GPIO_InitStruct;
    if(hlcd->Instance==LCD)
    {
        /* USER CODE BEGIN LCD_MspInit 0 */

        /* USER CODE END LCD_MspInit 0 */
        /* Peripheral clock enable */
        __HAL_RCC_LCD_CLK_ENABLE();

        /**LCD GPIO Configuration
        PB8     ------> LCD_SEG16
        PA15    ------> LCD_SEG17
        PC0     ------> LCD_SEG18
        PC1     ------> LCD_SEG19
        PC2     ------> LCD_SEG20
        PC3     ------> LCD_SEG21
        PC4     ------> LCD_SEG22
        PC5     ------> LCD_SEG23
        PC6     ------> LCD_SEG24
        PC7     ------> LCD_SEG25
        PC8     ------> LCD_SEG26
		PC9     ------> LCD_SEG27
        PA8     ------> LCD_COM0
        PA9     ------> LCD_COM1
        PA10    ------> LCD_COM2
        PB9     ------> LCD_COM3
        */
        GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
                              |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7
                              |GPIO_PIN_8|GPIO_PIN_9;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
        GPIO_InitStruct.Alternate = GPIO_AF11_LCD;
        HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

        GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_15;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
        GPIO_InitStruct.Alternate = GPIO_AF11_LCD;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

        GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_8;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
        GPIO_InitStruct.Alternate = GPIO_AF11_LCD;
        HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

        /* USER CODE BEGIN LCD_MspInit 1 */

        /* USER CODE END LCD_MspInit 1 */
    }
}

void HAL_LCD_MspDeInit(LCD_HandleTypeDef* hlcd)
{

    if(hlcd->Instance==LCD)
    {
        /* USER CODE BEGIN LCD_MspDeInit 0 */

        /* USER CODE END LCD_MspDeInit 0 */
        /* Peripheral clock disable */
        __HAL_RCC_LCD_CLK_DISABLE();

        /**LCD GPIO Configuration
        PB8     ------> LCD_SEG16
        PA15    ------> LCD_SEG17
        PC0     ------> LCD_SEG18
        PC1     ------> LCD_SEG19
        PC2     ------> LCD_SEG20
        PC3     ------> LCD_SEG21
        PC4     ------> LCD_SEG22
        PC5     ------> LCD_SEG23
        PC6     ------> LCD_SEG24
        PC7     ------> LCD_SEG25
        PC8     ------> LCD_SEG26
        PC9     ------> LCD_SEG27
        PA8     ------> LCD_COM0
        PA9     ------> LCD_COM1
        PA10     ------> LCD_COM2
        PB9     ------> LCD_COM3
        */
        HAL_GPIO_DeInit(GPIOC, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
                        |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7
                        |GPIO_PIN_8|GPIO_PIN_9);

        HAL_GPIO_DeInit(GPIOA, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_15);

        HAL_GPIO_DeInit(GPIOB, GPIO_PIN_9|GPIO_PIN_8);

        /* USER CODE BEGIN LCD_MspDeInit 1 */

        /* USER CODE END LCD_MspDeInit 1 */
    }
}

从上面的初始化代码可以知道,段码屏共有4个 COM 端,12个 SEG 端。下图是某厂商生产的段码屏的资料:
在这里插入图片描述
最终程序中驱动段码屏显示图标的代码如下:

#include "main.h"
extern LCD_HandleTypeDef hlcd;

//T1 minus
//T2 gps
//T3 cloud
//T4 bluetooth
//T5 play
//T6 stop
//T7 charge

const u32 DISP_PLAY[2] = {9, LCD_RAM_REGISTER0};
const u32 DISP_STOP[2] = {9, LCD_RAM_REGISTER2};
const u32 DISP_GPS[2] = {4, LCD_RAM_REGISTER0};		
const u32 DISP_CLOUD[2] = {4, LCD_RAM_REGISTER2};	
const u32 DISP_BT[2] = {4, LCD_RAM_REGISTER4};		
const u32 DISP_CHARGE[2] = {9, LCD_RAM_REGISTER4};	
const u32 DISP_BATCASE[2] = {9, LCD_RAM_REGISTER6};
const u32 DISP_NOSIGN[2] = {11, LCD_RAM_REGISTER6};
const u32 DISP_EMAX[2] = {1, LCD_RAM_REGISTER2};
const u32 DISP_EMIN[2] = {1, LCD_RAM_REGISTER6};
const u32 DISP_DGREE[2] = {11, LCD_RAM_REGISTER0};
const u32 DISP_RH[2] = {11, LCD_RAM_REGISTER4};
const u32 DISP_DAY[2] = {11, LCD_RAM_REGISTER2};	
const u32 DISP_DOT[2] = {7, LCD_RAM_REGISTER6};
const u32 DISP_MINUS[2] = {1, LCD_RAM_REGISTER4};
const u32 DISP_BAT[4][2] = {
	{10, LCD_RAM_REGISTER2}, //BAR1
	{10, LCD_RAM_REGISTER4}, //BAR2
	{10, LCD_RAM_REGISTER0}, //BAR3
	{10, LCD_RAM_REGISTER6}, //BAR4
};
const u32 DISP_SIGN[5][2] = {
	{0, LCD_RAM_REGISTER6}, //L1
	{0, LCD_RAM_REGISTER4}, //L2
	{0, LCD_RAM_REGISTER2}, //L3
	{0, LCD_RAM_REGISTER0}, //L4
	{1, LCD_RAM_REGISTER0}, //L5
};

const u8 DISP_NUM[3] = {2, 5, 7};
const u8 DISP_NUM_TAB[10][4] =
{
	{3, 2, 3, 2}, 	//0
	{0, 2, 2, 0}, 	//1
	{2, 3, 1, 2}, 	//2
	{2, 3, 2, 2}, 	//3
	{1, 3, 2, 0},	//4
	{3, 1, 2, 2}, 	//5
	{3, 1, 3, 2}, 	//6
	{2, 2, 2, 0}, 	//7
	{3, 3, 3, 2}, 	//8
	{3, 3, 2, 2},	//9
};

void Set_Lcd_Dot(const u32 *dot)
{
    HAL_LCD_Write(&hlcd, dot[1], (u32)~(1<<(dot[0]+16)), (u32)(1<<(dot[0]+16)));
}

void Clr_Lcd_Dot(const u32 *dot)
{
    HAL_LCD_Write(&hlcd, dot[1], (u32)~(1<<(dot[0]+16)), 0);
}

void Set_Lcd_Num(const u8 c, u8 num)
{
    HAL_LCD_Write(&hlcd, LCD_RAM_REGISTER0, (u32)~(3<<(DISP_NUM[c]+16)), (u32)(DISP_NUM_TAB[num][0]<<(DISP_NUM[c]+16)));
    HAL_LCD_Write(&hlcd, LCD_RAM_REGISTER2, (u32)~(3<<(DISP_NUM[c]+16)), (u32)(DISP_NUM_TAB[num][1]<<(DISP_NUM[c]+16)));
    HAL_LCD_Write(&hlcd, LCD_RAM_REGISTER4, (u32)~(3<<(DISP_NUM[c]+16)), (u32)(DISP_NUM_TAB[num][2]<<(DISP_NUM[c]+16)));
    HAL_LCD_Write(&hlcd, LCD_RAM_REGISTER6, (u32)~(2<<(DISP_NUM[c]+16)), (u32)(DISP_NUM_TAB[num][3]<<(DISP_NUM[c]+16)));
}

void Clr_Lcd_Num(const u8 c)
{
    HAL_LCD_Write(&hlcd, LCD_RAM_REGISTER0, (u32)~(3<<(DISP_NUM[c]+16)), 0);
    HAL_LCD_Write(&hlcd, LCD_RAM_REGISTER2, (u32)~(3<<(DISP_NUM[c]+16)), 0);
    HAL_LCD_Write(&hlcd, LCD_RAM_REGISTER4, (u32)~(3<<(DISP_NUM[c]+16)), 0);
    HAL_LCD_Write(&hlcd, LCD_RAM_REGISTER6, (u32)~(2<<(DISP_NUM[c]+16)), 0);
}

上面的驱动代码中 DISP_PLAY 这样的数组是怎么得来的?根据段码屏资料有如下表(表1):

PIN12345678910111213141516
COM1---COM1L4L51F1AT22F2A3F3AT5BAR3C
COM2--COM2-L3Max1G1BT32G2B3G3BT6BAR1Day
COM3-COM3--L2T11E1CT42E2C3E3CT7BAR2%RH
COM4COM4---L1Min-1D--2DDP3DBAR5BAR4X

我们把上表转换一下,方便我们查看(表2):

01234567891011
COM1L4L51F1AT22F2A3F3AT5BAR3C
COM2L3Max1G1BT32G2B3G3BT6BAR1Day
COM3L2T11E1CT42E2C3E3CT7BAR2%RH
COM4L1Min-1D--2DDP3DBAR5BAR4X

其中 COM1 对应 STM32 的 LCD_RAM_REGISTER 为 LCD_RAM_REGISTER0,COM2 对应 LCD_RAM_REGISTER2,COM3 对应 LCD_RAM_REGISTER4,COM4 对应 LCD_RAM_REGISTER6,如下表:

COMRAM
COM1LCD_RAM_REGISTER0
COM2LCD_RAM_REGISTER2
COM3LCD_RAM_REGISTER4
COM4LCD_RAM_REGISTER6
COM(n)LCD_RAM_REGISTER 2*(n-1)

所以,我们来看一下 DISP_PLAY[2] = {9, LCD_RAM_REGISTER0},其中第一个值 9 就是 表2 中 T5 所处的列数(SEG端);第二个值 LCD_RAM_REGISTER0 为 T5 所在的行数(COM端)。使用这种方法把段码屏中的所有图标都写下来即可。

接下来看下 DISP_NUM[3] = {2, 5, 7} 这行是怎么来的?
变量 DISP_NUM 是记录段码屏中数字所在列位置的起始位置。例如,段码屏中的第 1 个数字最先出现在 表2 中的第 2 列;第 2 个数字最先出现在第 5 列;第 3 个数字最先出现在第 7 列。所以用一个变量 DISP_NUM 记录这些数字就得到 DISP_NUM[3] = {2, 5, 7} 。

接下来再看下 DISP_NUM_TAB[10][4] 二维数组里面的一堆数字是怎么来的?
注意,DISP_NUM,以及 DISP_NUM_TAB 里面的内容可以按自己的方法写,这里不一定要这样写。我这样写的目的是配合 Set_Lcd_Num() 这个函数的,此函数不同的实现方法,会导致 DISP_NUM、DISP_NUM_TAB 变量里面的内容不同。

由于 Set_Lcd_Num() 函数是一行一行显示段码屏中数字部分内容的,所以 DISP_NUM_TAB 里面的每一个一维数组从 [0] ~ [3] 都完整表达了一个数字。我们就 {3, 2, 3, 2}, //0 数字 0 来说:
在这里插入图片描述
因为 3 个数字的段码一样,所以我们只解析一个数字,把 DISP_NUM_TAB 里的内容填满即可。因为段码每个段都是独立的,显示时不能相互干扰,所以有上图中的权值,就相当于左移,避免段码显示时干扰。那我们来先来填 0,数字 0 占用段码为 A,B,C,D,E,F(只看其中一个数字),第一行 F*1+A*2 = 3; 第二行 0*1+B*2 = 2;第三行 E*1+C*2 = 3;第四行 0*1+D*2 = 2,所以最终数字 0 为 {3, 2, 3, 2};我们再写一个数字 1,数字 1 点段码 B,C,第一行没有B,C,所以为 0*1+0*2 = 0;第二行 0*1+B*2 = 2;第三行 0*1+C*2 = 2;第四行 0*0+0*0 = 0,所以数字 1 最终表示为 {0, 2, 2, 0},后面 2 ~ 9 都是这样写的。

接下来看一下 Set_Lcd_Num() 函数中 16 是怎么来的?
在这里插入图片描述
这里就要看 STM32L152RC 数据手册了,手册中 LCD 显示缓存如下图:
在这里插入图片描述
上图中 LCD_RAM 寄存器中每一位都是一个 SEG,而我们实际硬件中段码屏的 SEG 只接了 12 个,分别为 SEG16 ~ SEG 27,其它没有用到,所以最终的段码屏数据也要写到 SEG16 ~ SEG27 之中,因此,在写的时候需要偏移到第 16位,因为 0 ~ 15硬件中没使用,写入无效。比如你的硬件中段码屏使用的是 SEG18 ~ SEG26,那你写数据的时候就必须要偏移到第18位。

最后我们来看一下 Set_Lcd_Num() 函数中 3,3,3,2 这四个数字怎么来的?
在这里插入图片描述
上图中的 3,3,3,2 的意思就是在写数字之前,要先把对应位置的缓存给清除掉,看下图就会明白:
在这里插入图片描述

后面还有 Clr_Lcd_Num() 函数,此函数里的内容就很简单了,搞清楚前面文章内容,此函数内容就不成问题了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32关于驱动段码屏显示 的相关文章

  • MIPS指令格式定义

  • PTA 浙大版《C语言程序设计(第3版)》题目集--练习2-1 Programming in C is fun!

    题目 本题要求编写程序 xff0c 输出一个短句 Programming in C is fun 输入格式 本题目没有输入 输出格式 在一行中输出短句 Programming in C is fun 思路 一个简单的输出 代码 includ
  • 带参数的宏

    定义两个带参数的宏 xff0c 一个用来求s xff0c 另一个用来求area include lt iostream gt using namespace std define s a b c a 43 b 43 c 2 define A
  • RTK和网络RTK

    浅谈传统RTK工作模式与网络RTK工作模式 谈谈传统RTK工作模式与网络RTK工作模式 传统RTK工作模式就是电台工作模式 xff0c 网络RTK工作模式就是CORS系统测量 本文主旨 有网络信号和CORS覆盖范围的地方就选择网络RTK工作
  • KITTI数据集国内下载地址

    文件列表 xff1a http www functionweb tk kitti 如果遭遇下载失败的情况请访问 https blog csdn net weixin 43599336 article details 87801040 原始图
  • HTTP ERROR 405 Method Not Allowed

    一般访问web UI的时候出现以上错误 xff0c 都是浏览器的防火墙问题 可以进行在安全设置里取消一些防护功能即可
  • 【ubuntu16.04 LTS】更换国内清华源

    目录 1 xff0c 备份原始源文件sources list2 xff0c 修改源文件sources list3 xff0c 更新源 1 xff0c 备份原始源文件sources list 在终端输入如下命令 xff1a span clas
  • 串行通信——异步串行通信

    目录 I 串口通信简介 一 定义 二 意义 三 分类 II 异步串行通信详解 一 数据格式 1 起始位 2 数据位 3 奇偶校验位 4 停止位 二 通信制式 1 单工 2 半双工 3 全双工 三 通信速率 I 串口通信简介 一 定义 在一条
  • shell发送请求解析结果

    需求shell发送请求到服务获取返回结果 xff0c 解析结果后提取需要的数据 再次请求服务 1 发送get请求到服务器 xff0c 格式化返回结果输出到result json文件 2 解析json文件并循环处理解析结果 curl命令 X
  • VScode编辑器快捷键整理

    记录 xff1a VScode编辑器快捷键记录 1 代码块折叠 展开 操作光标所在文件中的所有代码块 xff1a 折叠所有 Ctrl 43 K 43 0 展开所有 Ctrl 43 K 43 J 仅仅操作光标所处代码块内的代码 xff1a 折
  • ROS不同版本消息传递问题

    ROS不同版本消息传递问题 问题 不同版本ros间可通信 xff0c 但消息发送接收有问题 主机 xff1a x86 BECKHOFF Ubuntu16 04 ROS Kinetic 从机 xff1a ARM AGX Xavier Ubun
  • 复位电路

    单片机复位电路 系统开始运行和重新启动都是依靠复位电路实现的 以MCS 51为例 xff0c 复位是需要在RST引脚加上2个机器周期 xff08 24个时钟周期 xff09 以上的高电平 简单的计算 xff1a 如果单片机的时钟频率是12M
  • WIFI原理

    1 路由器向下提供给接入的用户一个id xff0c 也就是类似于192 168 1 231 xff0c 这样的ip地址 xff0c 所有在这个路由器下的用户的ip地址的前面的网络号是相同的 xff0c 都是192 168 1 xff08 x
  • :: 在 C++ 中的作用

    一 作用域符号 xff1a 作用域符号 的前面一般是类名称 xff0c 后面一般是该类的成员名称 xff0c C 43 43 为例避免不同的类有名称相同的成员而采用作用域的方式进行区分 另外 xff0c 在类外定义类中已申明的函数成员时 x
  • PX4-4-任务调度

    PX4所有的功能都封装在独立的模块中 xff0c uORB是任务间数据交互和同步的工具 xff0c 而管理和调度每个任务 xff0c PX4也提供了一套很好的机制 xff0c 这一篇我们分享PX4的任务调度机制 我们以PX4 1 11 3版
  • 基于stm32的mpu6050传感器实验

    64 TOCMPU6050 43 STM32学习笔记 学习了差不多两天的mpu6050 xff0c 参考了很多篇博客还有看一些资料 xff0c 今晚终于把这个东西在我的串口显示出来了 xff0c 下面就废话不多说 xff0c 开始我的笔记啦
  • Ubuntu 20.04 ROS Noetic及Realsense-ROS的安装和多机通信

    Ubuntu 20 04 ROS Noetic及Realsense ROS的安装和多机通信 1 Ubuntu20 04 ROS Noetic安装 参考官方安装教程 ROS Installation 请以以上安装步骤为准 xff0c 因为随着
  • 机械硬盘基本知识

    硬盘内部的物理结构很复杂 xff0c 只能从大的颗粒度去看内部的结构 xff0c 总体来说 xff0c 硬盘结构包括 xff1a 盘片 磁头 盘片主轴 控制电机 磁头控制器 数据转换器 接口 缓存 等几个部份 所有的盘片 xff08 一般硬
  • RTK八大基础知识

    RTK作为现代化测量中的测绘仪器 xff0c 已经非常普及 RTK在测量中的优越性也是不言而喻 为了能让RTK的优越性能在使用中充分的发挥出来 xff0c 为了能让RTK使用人员能灵活的应用RTK xff0c 我认为RTK使用人员必须了解以
  • 游戏思考04:网络游戏同步算法产生原因和相关介绍:跟随(插值)、预测、延迟补偿,三种算法(未完待续02/07)

    文章目录 一 网络同步的典型场景二 简单粗暴的数据同步为何行不通 xff1f xff08 帧同步的难题 xff09 1 xff09 网络同步的流程2 xff09 网络延迟和抖动的直观解释3 xff09 产生卡顿 瞬移的原因分析4 xff09

随机推荐

  • 51单片机定时器实现流水灯实验

    实验内容 xff1a 利用AT89C51的定时器0 方式1实现流水灯效果 xff0c 并用仿真验证 定时器0方式1的工作方式 xff1a 定时器的工作方式选择由寄存器TMOD控制 方式选择通过M0和M1控制 xff0c 方式1为16位定时器
  • 51单片机七段数码管显示时钟无按键控制—①—74HC595版

    参考链接 xff1a 51单片机七段数码管显示时钟加按键控制 74HC595版 51单片机七段数码管显示时钟加按键控制 74HC595版 文章目录 一 实验内容 xff1a 二 实验分析 xff1a 三 仿真图 xff1a 四 源代码 xf
  • 51单片机lcd1602显示时间日期

    实验内容 xff1a 使用51单片机控制LCD1602液晶显示屏显示 时间 日期 星期 温度 信息 xff0c 并可通过按键设置值 仿真效果展示 xff1a proteus仿真图 xff1a 硬件测试图 xff1a 说明 xff1a 硬件测
  • 51单片机实现普通时钟

    一 实验内容 xff1a 1 打开单片机 xff0c 数码管显示当前时间0 0 0 xff0c 时 分 秒 xff08 时间为24小时制 xff09 2 按键1 xff1a 按下一次进入秒的修改 xff0c 按下两次修改分钟 xff0c 按
  • No suitable kits found.——QT创建项目错误

    才开始学QT就遇到一个问题 xff0c 无法创建项目 xff0c 在 Kits 这一步提示 No suitable kits found 我的错误原因 xff1a 因为以前装过MinGw环境 xff0c 而且环境里还包含着中文 xff0c
  • Keil5高亮显示相同变量加上护眼配色方案

    先上效果图 xff1a 我们知道 xff0c 之前版本的Keil是不会对相同代码进行高亮显示的 xff0c 不过现在最新版的Keil已经支持对其高亮显示了 xff0c 只不过其配色还是和原来一样有些差强人意 初始效果如下 xff1a 实现上
  • 螺旋队列公式解释

    以1为坐标零点 xff0c 向右为X正 xff0c 向下为Y正 xff0c 任意输入一坐标 xff08 x y xff0c r 61 max x y 为当前所在层数 xff0c 得到下面公式 上边 xff1a top 61 max r 43
  • Bilibili缓存视频在电脑端直接打开方式

    哔哩哔哩移动端缓存的视频和音频分开了 xff0c 使用PotPlayer播放器可以在播放视频的时候加载音频 xff0c 从而不用合并两个文件 具体操作 xff1a 使用PotPlayer播放器打开video m4s文件 打开后点鼠标右键 x
  • C语言数组、结构体、结构体数组作为函数参数

    数组作为函数参数 如果想把一个数组名参数传递给函数 xff0c 正确的函数形参应该是怎样的 xff1f 它是应该声明为一个指针还是一个数组 xff1f 调用函数时实际传递的是一个指针 xff0c 所以函数的形参实际上是一个指针 xff0c
  • 有道词典离线数据包位置

    软件版本 xff1a 9 1 0 位置 xff1a C Users 用户名 AppData Local Yodao DeskDict nmt model 将离线包放入nmt model文件夹后重新启动有道词典即可断网使用长句翻译 汉英互译离
  • 改变Keil5所有窗口的背景颜色

    在网上找了很多都没有找到如何更改Keil5左侧和下侧的背景颜色 xff0c 后来根据一些提示找到了改背景的方法 xff0c 在此分享给有需要的人 首先 xff0c 更换中间那块的背景颜色相信大家都会 xff0c 不过我还是写一下 xff0c
  • ros入门(题尾一键安装)

    运行ros 96 提示 xff1a 因为手头有英伟达树莓派跟激光雷达 xff0c 也有ros小车 直接上现成的 xff0c 但是会卡 而且不好用 xff0c 所以建议自己安装一个 链接 xff1a https pan baidu com s
  • git 基础

    git可以实现分布式的版本管理 xff0c 合作开发工具 github和gitee是代码托管平台 查看配置信息 xff1a git config list 1 我们可以通过下面两条命令配置名字和邮箱 xff0c 使代码提交有迹可循 配置名字
  • idf.py基本使用

    1 idf py set target lt target gt 设置构建项目的目标 xff08 芯片 xff09 2 idf py menuconfig 运行menuconfig工具配置项目 3 idf py build 构建在当前目录下
  • rviz更改机器人位置,不考虑gazebo环境。

    文章目录 问题描述解决方案 问题描述 在RVIZ中想要去更改机器人模型位置 xff0c 但不想考虑gazebo的各种因素 xff0c 只想通过别人给的数据流去实时更改机器人在rviz中的位置 解决方案 首先 xff0c 先将原理弄清楚 在R
  • STM32+RTC实现时钟无法设置时间以及掉电时间清零的问题

    最近在实现一个万年历的功能 xff0c 其中遇到了无法设置时间以及掉电时间清零的问题 h文件代码如下 xff1a span class token macro property span class token directive keyw
  • contains an incorrect path解决方法

    在移植UCOS 时出现如下报警 在确认头文件路径添加无误的情况下 xff0c 发现是因为文件名的UCOS 这个3不应用罗马数字 xff0c 用字母I代替 xff0c 改为UCOSIII并重新添加文件后错误消失
  • 理论 - 半波偶极子天线原理与计算

    概述 半波偶极子天线是一种结构简单的基本线天线 xff0c 也是一种经典的 迄今为止使用最广泛的天线之一 半波偶极子天线由两根直径和长度都相等的直导线组成 xff0c 每根导线的长度为1 4个工作波长 导线的直径远小于工作波长 xff0c
  • HFSS - 半波偶极子天线的设计与仿真

    一 理论计算 原理及理论计算部分可以看我上一篇文章理论 半波偶极子天线原理与计算 二 模型创建 1 模型概图如下 2 变量参数 变量意义变量名变量值 单位 mm 工作波长wavelength100天线总长度length0 48 x wave
  • STM32关于驱动段码屏显示

    本篇文章主要记录一下我在工作中用STM32单片机驱动段码屏显示内容 xff0c 不讲解具体的驱动原理 xff0c 只是单纯记录如何编写驱动屏幕图标显示的代码 xff0c 以便我日后查看 单片机 xff1a STM32L152RCT6A ID