当前位置: 首页 > news >正文

STM32 F103 标准库CH452A 4线 数码管驱动芯片显示数码管

公司生产测试需要统一去检查这版CH452A的好坏,网上找了一下没有现成可以用的4线CH452A的驱动程序,所以直接就肝了移植官方的51程序到stm32上面去,亲测可以使用!!

文末有代码

测试图片:

如你所见我测了一堆都没有问题,随意用,我这边原理图画的是共阴极的哦!!

这是官方手册的接线图哈,参考一下以后你就会发现,这个Dout用不上,所以4线更多时候三线就可以使用了。

接下来我贴一点芯片的资料水个字数吧,看了一下带锁存的很好用啊哈哈

官方介绍

CH452 是数码管显示驱动和键盘扫描控制芯片。CH452内置时钟振荡电路,可以动态驱动8位数 码管或者64只LED,具有BCD译码、闪烁、移位、段位寻址、光柱译码等功能;同时还可以进行64 键的键盘扫描;CH452通过可以级联的4线串行接口或者2线串行接口与单片机等交换数据;并且可 以对单片机提供上电复位信号。

CH452对数码管和发光管采用动态扫描驱动,顺序为DIG0至DIG7,当其中一个引脚吸入电流时, 其它引脚则不吸入电流。CH452内部具有电流驱动级,可以直接驱动0.5英寸至1英寸的共阴数码管, 段驱动引脚SEG6~SEG0分别对应数码管的段G~段A,段驱动引脚SEG7对应数码管的小数点,字驱 动引脚DIG7~DIG0分别连接8个数码管的阴极;CH452也可以连接8×8矩阵的发光二级管LED阵列 或者64个独立发光管或者64级光柱;CH452可以改变字驱动输出极性以便直接驱动共阳数码管(不 译码方式),或者通过外接反相驱动器支持共阳数码管,或者外接大功率管支持大尺寸的数码管。 CH452支持扫描极限控制,并且只为有效数码管分配扫描时间。当扫描极限设定为1时,唯一的 数码管DIG0将得到所有的动态驱动时间,从而等同于静态驱动;当扫描极限设定为8时,8个数码 管DIG7~DIG0各得到1/8的动态驱动时间;当扫描极限设定为4时,4个数码管DIG3~DIG0各得到 1/4的动态驱动时间,此时各数码管的平均驱动电流将比扫描极限为8时增加一倍,所以降低扫描极 限可以提高数码管的显示亮度。 CH452内部具有8个8位的数据寄存器,用于保存8个字数据,分别对应于CH452所驱动的8个 数码管或者8组每组8个的发光二极管。CH452支持数据寄存器中的字数据左移、右移、左循环、右 循环,并且支持各数码管的独立闪烁控制,在字数据左右移动或者左右循环移动的过程中,闪烁控制 的属性不会随数据移动。 CH452支持任意段位寻址,可以用于独立控制64个发光管LED中的任意一个或者数码管中的特 定段(例如小数点),所有段位统一编址从00H到3FH。当用“段位寻址置1”命令将某个地址的段位 置1后,该地址对应的发光管LED或者数码管的段会点亮,该操作不影响任何其它LED或者数码管其 它段的状态。

源文件:

bsp_ch452.c

#include "bsp_CH452.h"
#include "delay.h"// 共阴数码管段码表
static const uint8_t SegCode[] = {0x3F, // 00x06, // 10x5B, // 20x4F, // 30x66, // 40x6D, // 50x7D, // 60x07, // 70x7F, // 80x6F, // 90x77, // A0x7C, // b0x39, // C0x5E, // d0x79, // E0x71  // F
};void CH452_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;// 配置DCLKGPIO_InitStruct.GPIO_Pin = CH452_DCLK_PIN;GPIO_Init(CH452_DCLK_PORT, &GPIO_InitStruct);// 配置DINGPIO_InitStruct.GPIO_Pin = CH452_DIN_PIN;GPIO_Init(CH452_DIN_PORT, &GPIO_InitStruct);// 配置LOADGPIO_InitStruct.GPIO_Pin = CH452_LOAD_PIN;GPIO_Init(CH452_LOAD_PORT, &GPIO_InitStruct);// 初始状态GPIO_SetBits(CH452_DCLK_PORT, CH452_DCLK_PIN);GPIO_SetBits(CH452_DIN_PORT, CH452_DIN_PIN);GPIO_SetBits(CH452_LOAD_PORT, CH452_LOAD_PIN);
}void CH452_WriteCommand(uint16_t cmd) {GPIO_ResetBits(CH452_LOAD_PORT, CH452_LOAD_PIN);Delay_us(2);for(int i = 0; i < 12; ++i) {(cmd & 0x01) ? GPIO_SetBits(CH452_DIN_PORT, CH452_DIN_PIN) : GPIO_ResetBits(CH452_DIN_PORT, CH452_DIN_PIN);Delay_us(1);GPIO_ResetBits(CH452_DCLK_PORT, CH452_DCLK_PIN);Delay_us(1);GPIO_SetBits(CH452_DCLK_PORT, CH452_DCLK_PIN);Delay_us(1);cmd >>= 1;}GPIO_SetBits(CH452_LOAD_PORT, CH452_LOAD_PIN);Delay_us(5);
}void CH452_Init(void) {CH452_GPIO_Init();// 复位芯片CH452_WriteCommand(CH452_RESET);Delay_ms(20);// 配置显示参数CH452_WriteCommand(CH452_NO_BCD | 0x07); // 不译码+8位数码管// 开启显示和键盘CH452_WriteCommand(CH452_SYSON2);
}void CH452_DisplayNum(uint8_t pos, uint8_t num, uint8_t dot) 
{if(pos > 7 || num >= sizeof(SegCode)/sizeof(SegCode[0])) return;uint8_t seg_data = SegCode[num];if(dot) seg_data |= 0x80;uint16_t cmd = 0x8000 | (pos << 8) | seg_data;CH452_WriteCommand(cmd);
}

头文件

bsp_ch452.h

#ifndef __BSP_CH452_H
#define __BSP_CH452_H#include "stm32f10x.h"// 引脚定义
#define CH452_DCLK_PIN    GPIO_Pin_2
#define CH452_DCLK_PORT   GPIOA
#define CH452_DIN_PIN     GPIO_Pin_3
#define CH452_DIN_PORT    GPIOA
#define CH452_LOAD_PIN    GPIO_Pin_13
#define CH452_LOAD_PORT   GPIOB// 命令定义
#define CH452_RESET      0x0201
#define CH452_SYSON2     0x0403
#define CH452_NO_BCD     0x0500void CH452_GPIO_Init(void);
void CH452_WriteCommand(uint16_t cmd);
void CH452_Init(void);
void CH452_DisplayNum(uint8_t pos, uint8_t num, uint8_t dot);#endif

直接拿去放你们文件中就可以使用了,不用谢啊,什么你找我要工程?看我资料列表吧,我资源列表有

相关文章:

  • LVS+Keepalived+dns高可用项目架构
  • Obsidian无门槛简明教程
  • 写项目时一些疑惑:组件间的通信、createDownloadUrl和DownloadUrl,ArrayBuffer与Blob等
  • C++十进制与十六进制
  • 20个常用的初级Java笔试题及其参考答案
  • 这几天调试VR,几个渲染效果不错
  • 【随身WIFI】随身WiFi Debian系统优化教程
  • Sql刷题日志(day3)
  • Vue基础(5)_事件修饰符
  • 软件工程知识体系全面梳理
  • libevent的各个基本函数的使用
  • STM32+dht11+rc522+jq8400的简单使用
  • Minecraft盔甲机制详解(1.9之后)
  • 文件的加密与解密学习笔记
  • MIR-2025 | 多模态知识助力机器人导航:从复杂环境到高效路径规划
  • 2025年4月16日华为笔试第三题300分
  • 数据结构与算法-顺序表专题
  • 【裁员感想】
  • 禁用USB接口的电脑管理软件推荐
  • 移植firefly core-1126-jd4官方sdk源码到其他rv1126板卡时 kernel启动中失去响应问题解决
  • 深圳一季度GDP为8950.49亿元,同比增长5.2%
  • 图像编辑新增一款开源模型,阶跃星辰发布Step1X-Edit
  • 靳燕出任中央戏剧学院党委副书记,原任中戏院长助理
  • “爱泼斯坦案”关键证人弗吉尼亚·朱弗雷自杀身亡
  • 俄总统助理:普京与美特使讨论了恢复俄乌直接谈判的可能性
  • 航天科技集团质量技术部部长严泽想升任集团副总经理