【本文发布于https://blog.csdn.net/Stack_/article/details/114379996,未经许可不得转载,转载须注明出处】

参考官方手册共阳接法画出原理图(SMG1、SMG2、SMG4从左到右排列,定义从左到右的数码管为第0个 - 第11个)

/* 字模 @ CSDN Tyrion.Mon */
const uint8_t char_NUM[10] =  {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};   //数字 0 -- 9DisplayOne64bitNum(888888888888);  //发起调用/*** @brief  TM16x29D显示一个数字,最大999999999999* @note   这个数从左到右依次对应上面的第0个-第11个数码管* @param  * @retval None* @author @ CSDN Tyrion.Mon* @date   */
void DisplayOne64bitNum(uint64_t num)
{uint8_t pBuf[12];int8_t i;for(i=11; i>=0; i--){pBuf[i] = char_NUM[num%10];num /= 10;}TM1629D_Display(pBuf);
}/*** @brief  TM16x29D送显,共阳接法需要经过处理才能正确显示* @note   调用TM1629D_DealData处理要显示的12个字节数据后发送到TM1629D* @param  * @retval None* @author @ CSDN Tyrion.Mon* @date   */
void TM1629D_Display(uint8_t *TM1629D_data)
{uint8_t TM1629D_buf[16];  //TM1629D处理后的显示缓冲区TM1629D_DealData(TM1629D_data, TM1629D_buf);/* 此处可以for简写 */TM16xx_WriteOneData(0xc0, TM1629D_buf[0]);TM16xx_WriteOneData(0xc2, TM1629D_buf[1]);TM16xx_WriteOneData(0xc4, TM1629D_buf[2]);TM16xx_WriteOneData(0xc6, TM1629D_buf[3]);TM16xx_WriteOneData(0xc8, TM1629D_buf[4]);TM16xx_WriteOneData(0xca, TM1629D_buf[5]);TM16xx_WriteOneData(0xcc, TM1629D_buf[6]);TM16xx_WriteOneData(0xce, TM1629D_buf[7]);TM16xx_WriteOneData(0xc1, TM1629D_buf[8]);TM16xx_WriteOneData(0xc3, TM1629D_buf[9]);TM16xx_WriteOneData(0xc5, TM1629D_buf[10]);TM16xx_WriteOneData(0xc7, TM1629D_buf[11]);TM16xx_WriteOneData(0xc9, TM1629D_buf[12]);TM16xx_WriteOneData(0xcb, TM1629D_buf[13]);TM16xx_WriteOneData(0xcd, TM1629D_buf[14]);TM16xx_WriteOneData(0xcf, TM1629D_buf[15]);
}/*** @brief  TM1629D显示数据处理函数* @note   * @param  TM1629D_data 要显示的12字节数据,共阳接法需要经过处理才能正确显示* @param  TM1629D_buf  处理后发送到TM1629D显示的数据* @retval None* @author @ CSDN Tyrion.Mon* @date   */
void TM1629D_DealData(uint8_t *TM1629D_data, uint8_t *TM1629D_buf)
{uint8_t i = 0, j = 0;for (i = 0; i < 16; i++)TM1629D_buf[i] = 0x00;for (i = 0; i < 8; i++){for (j = 0; j < 8; j++){TM1629D_buf[j] >>= 1;if ((TM1629D_data[i] >> j) & 0x01)TM1629D_buf[j] |= 0x80;}}for (i = 8; i < 12; i++){for (j = 8; j < 16; j++){TM1629D_buf[j] >>= 1;if ((TM1629D_data[i] >> (j-8)) & 0x01)TM1629D_buf[j] |= 0x80;}}for (j = 8; j < 16; j++)TM1629D_buf[j] >>= 4;
}

TM1629D_DealData函数最初版本,根据手册写、调试得出的,废了不少脑细胞。上面是简化版本

@ CSDN Tyrion.Mon
void TM1629D_DealData(void)
{uint8_t i = 0, j = 0;for(i=0; i<16; i++)        //清零缓冲区TM1629D_buf[i] = 0x00;for(i=0; i<8; i++)         //将TM1629D_data[]数组数据分配到SEG1 - SEG8 ,即 数码管第 1 -- 8 个{for(j=0; j<8; j++)TM1629D_buf[j] >>= 1;if((TM1629D_data[i]>>0) & 0x01)TM1629D_buf[0] |= 0x80;if((TM1629D_data[i]>>1) & 0x01)TM1629D_buf[1] |= 0x80;if((TM1629D_data[i]>>2) & 0x01)TM1629D_buf[2] |= 0x80;if((TM1629D_data[i]>>3) & 0x01)TM1629D_buf[3] |= 0x80;if((TM1629D_data[i]>>4) & 0x01)TM1629D_buf[4] |= 0x80;if((TM1629D_data[i]>>5) & 0x01)TM1629D_buf[5] |= 0x80;if((TM1629D_data[i]>>6) & 0x01)TM1629D_buf[6] |= 0x80;if((TM1629D_data[i]>>7) & 0x01)TM1629D_buf[7] |= 0x80;}for(i=8; i<12; i++)        //将TM1629D_data[]数组数据分配到SEG9 - SEG12 ,即 数码管第 9 -- 12 个{for(j=8; j<16; j++)TM1629D_buf[j] >>= 1;if((TM1629D_data[i]>>0) & 0x01)TM1629D_buf[8] |= 0x80;if((TM1629D_data[i]>>1) & 0x01)TM1629D_buf[9] |= 0x80;if((TM1629D_data[i]>>2) & 0x01)TM1629D_buf[10] |= 0x80;if((TM1629D_data[i]>>3) & 0x01)TM1629D_buf[11] |= 0x80;if((TM1629D_data[i]>>4) & 0x01)TM1629D_buf[12] |= 0x80;if((TM1629D_data[i]>>5) & 0x01)TM1629D_buf[13] |= 0x80;if((TM1629D_data[i]>>6) & 0x01)TM1629D_buf[14] |= 0x80;if((TM1629D_data[i]>>7) & 0x01)TM1629D_buf[15] |= 0x80;}for(j=8; j<16; j++)        //SEG9 - SEG12  低四位有效,高四位无效TM1629D_buf[j] >>= 4;
}

12段8位驱动芯片TM1629D驱动12位8段共阳数码管相关推荐

  1. Arduino 驱动TM1638显示十位的共阳数码管

    Arduino 驱动TM1638显示十位的共阳数码管 二话不说先上图: 这个是电路图,下面我在上传TM1638的手册 哈哈太乱了先凑合着看吧!效果是实现了,画了板还没有发过来. 我也不多说什么了上代码 ...

  2. STM32F1与STM32CubeIDE编程实例-MAX7219驱动8位7段数码管(基于SPI)

    MAX7219驱动8位7段数码管(基于SPI) 在前面的文章中,我们实现了纯GPIO方式通过MAX7219驱动8位7段数码管.由于MAX7219支持SPI.QSPI接口,最大支持10MHz的通信速率, ...

  3. STM32F1与STM32CubeIDE编程实例-74HC595驱动4位7段数码管

    74HC595驱动4位7段数码管 1.74HC595介绍 74HCT595 是一个 8 位串行输入/串行或并行输出移位寄存器,带有一个存储寄存器和三态输出.移位寄存器和存储寄存器都有独立的时钟.该器件 ...

  4. 共阳数码管段码表_正点原子开拓者FPGA开发板资料连载第十一章 静态数码管显示实验...

    1)实验平台:正点原子开拓者FPGA 开发板 2)摘自<开拓者FPGA开发指南>关注官方微信号公众号,获取更多资料:正点原子 3)全套实验源码+手册+视频下载地址:http://www.o ...

  5. 【Multisim仿真】74LS47译码器驱动共阳数码管显示(0-8)数字显示

    [Multisim仿真]74LS47译码器驱动共阳数码管显示(0-8)数字显示 Multisim仿真演示 74ls47引脚功能 LT: 试灯输入,是为了检查数码管各段是否能正常发光而设置的.当LT=0 ...

  6. STM32F103C8T6 I/O口驱动4位共阳数码管

    STM32F103C8T6 I/O口驱动4位共阳数码管 看了网上很多的资料.很少有单独讲解STM32 I/O口直接驱动数码管的资料,有的网上还禁用了JTAG和SWD口,对很多刚入门的学者会造成不必要的 ...

  7. 共阳数码管段码表_C51编程7数码管显示原理

    如果将单片机的比喻计算的主机,而按键相当于电脑的输入设备(键盘或者鼠标),那么LED灯可以作为输出设备的显示器:如果8位数据,使用8个LED显示数据表示,相当于是以二进制显示数据,非常不利于阅读. 为 ...

  8. 共阴数码管段码-共阳数码管段码

    单片机系统中常用的显示器有:发光二极管LED(Light Emitting Diode)显示器.液晶LCD(Liquid Crystal Display)显示器.CRT显示器等.LED.LCD显示器有 ...

  9. 共阳数码管段码表_简单共阴极数码管电路图大全

    共阴极则是把所有LED的阴极连接到共同接点com,而每个LED的阳极分别为a.b.c.d.e.f.g及dp(小数点),如下图所示.图中的8个LED分别与上面那个图中的A~DP各段相对应,通过控制各个L ...

最新文章

  1. CSS3学习手记(1) 选择器
  2. java wav 波形_java读取wav文件(波形文件)并绘制波形图的方法
  3. 构建Android的交叉编译器、用NDK编译移植
  4. SQLSever 存储过程创建
  5. 游戏即艺术,深度解读《地平线:零之曙光》这款“视觉教科书“
  6. php 判断 单选按钮事件,jquery如何判断单选按钮是否选中
  7. gamma校正_Log与Gamma校正视频
  8. pku 2387 Til the Cows Come Home
  9. 解决Mysql安装之后没有my.ini配置文件问题
  10. 读取xml中的指定节点的值
  11. android web sevice,Web Service在Android开发中的应用研究
  12. 警惕!全球酒店门锁很容易受到黑客攻击
  13. 什么叫pmt测试分析_DVT测试是什么意思?(smt术语详解)
  14. C语言 7-3 统计大写字母个数
  15. leofs管理工具之s3 browser连接
  16. 微信分享后端接口简单实现
  17. 【C语言网】C语言基础题集训练详解(一)
  18. 视频号如何引流?怎样利用视频号引流?视频号引流的方法和技巧
  19. ISA2006禁止BT下载方法
  20. mongodb数据库优缺点分析(扫盲)

热门文章

  1. 联想搜索实现方案(java基于字典树算法的实现方式)
  2. 新一代数字化转型信息化总体规划方案
  3. 移动端UI自动化之appium的使用(二)
  4. 内存不能read written常见原因
  5. 1990-2020年各行业竞争度--赫芬达尔指数表
  6. 蓝牙脂肪秤模块测量原理
  7. 985博士走红,粉丝超800万遭网暴!如今状告“施暴者”
  8. layui表格显示后台的多表的级联查询(多对多,多对一)带mybatis级联查询源码,已解决
  9. 【Apple】用iphone,ipad看电脑上的视频
  10. 【MOOC】数学实验 - 电子科技大学-第1讲