找回密码
 立即注册
查看: 106|回复: 0

TM1652驱动方法@支持硬件奇偶校验的单片机名单

[复制链接]
  • 打卡等级:以坛为家III
  • 打卡总天数:705
  • 最近打卡:2026-04-03 00:02:15
已绑定手机

49

主题

2648

回帖

2901

积分

荣誉版主

积分
2901
发表于 2026-2-7 17:38:36 | 显示全部楼层 |阅读模式
项目中用到了TM1652数码管驱动芯片,简单明了的分享一下驱动方法
  • 波特率19200bps 停止位1 数据位8 校验位Odd(奇校验) ,8个数据位中 1 的个数为奇数,校验位设为 0(置低电平),否则为 1(置高电平)
  • 数据帧分为两种:显示数据帧和控制命令帧,分别用来刷新显示数据和设置显示模式,数据无帧头,通过超时结束帧,超时时间3ms以上,
  • 显示帧:地址0x08 + 显示数据+显示数据n,6个显示缓存地址分别为0x08 0x88 0x48 0xC8 0x28 0xA8, 一帧可以设置一个数据,也可以多个,
  • 控制帧:0x18 + 控制指令,控制指令的位4~7控制驱动占空比,位1~3控制驱动电流,位0控制8x5或者7x6显示模式
  • 寄存器的具体含义需自行查看手册,

另外,STC大家庭中,支持硬件奇偶校验的芯片如下:
STC8H2K32U系列
STC8H2K12U系列
STC32全系仅USART1~2
STC32G144K246的USART1~8
如有遗漏请大家回帖补充

关键驱动代码如下:
  1. //串口配置代码
  2. void Uart1_Init(void)        //19200bps@11.0592MHz
  3. {
  4.         USARTCR2 = 0x06;        //使能硬件校验,使能奇校验
  5.         SCON = 0xD0;              //9位数据,可变波特率
  6.         AUXR |= 0x01;             //串口1选择定时器2为波特率发生器
  7.         AUXR |= 0x04;             //定时器时钟1T模式
  8.         T2L = 0x70;                 //设置定时初始值
  9.         T2H = 0xFF;                //设置定时初始值
  10.         AUXR |= 0x10;            //定时器2开始计时
  11. }
  12. void main()
  13. {
  14.     EAXSFR();
  15.         Uart1_Init();
  16.         SBUF = 0x18;        //控制帧 帧头
  17.         while(TI==0);    TI = 0;
  18.         SBUF = 0x15;        //控制命令,占空比为 8/16,段驱动电流为 3/8,显示模式 7 段 6 位
  19.         while(TI==0);    TI = 0;
  20.         delay_ms(10);        //大于3ms的延时 用于结束帧
  21.         
  22.         SBUF = 0x08;        //显示地址,0x08对应GR1地址,
  23.         while(TI==0);    TI = 0;
  24.         SBUF = 0xff;        //GR1 数据
  25.         while(TI==0);    TI = 0;
  26.         SBUF = 0xff;        //GR2 数据
  27.         while(TI==0);    TI = 0;
  28.         SBUF = 0xff;        //GR3 数据
  29.         while(TI==0);    TI = 0;
  30.         SBUF = 0xff;        //GR4 数据
  31.         while(TI==0);    TI = 0;
  32.         SBUF = 0xff;        //GR5 数据
  33.         while(TI==0);    TI = 0;
  34.         SBUF = 0xff;        //GR6 数据
  35.         while(TI==0);    TI = 0;               
  36.         delay_ms(10);         //大于3ms的延时 用于结束帧
  37.         while (1);
  38. }
复制代码








~~~
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-4-3 02:15 , Processed in 0.103982 second(s), 40 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表