项目中用到了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
如有遗漏请大家回帖补充
关键驱动代码如下:
- //串口配置代码
- void Uart1_Init(void) //19200bps@11.0592MHz
- {
- USARTCR2 = 0x06; //使能硬件校验,使能奇校验
- SCON = 0xD0; //9位数据,可变波特率
- AUXR |= 0x01; //串口1选择定时器2为波特率发生器
- AUXR |= 0x04; //定时器时钟1T模式
- T2L = 0x70; //设置定时初始值
- T2H = 0xFF; //设置定时初始值
- AUXR |= 0x10; //定时器2开始计时
- }
-
- void main()
- {
- EAXSFR();
- Uart1_Init();
- SBUF = 0x18; //控制帧 帧头
- while(TI==0); TI = 0;
- SBUF = 0x15; //控制命令,占空比为 8/16,段驱动电流为 3/8,显示模式 7 段 6 位
- while(TI==0); TI = 0;
- delay_ms(10); //大于3ms的延时 用于结束帧
-
- SBUF = 0x08; //显示地址,0x08对应GR1地址,
- while(TI==0); TI = 0;
- SBUF = 0xff; //GR1 数据
- while(TI==0); TI = 0;
- SBUF = 0xff; //GR2 数据
- while(TI==0); TI = 0;
- SBUF = 0xff; //GR3 数据
- while(TI==0); TI = 0;
- SBUF = 0xff; //GR4 数据
- while(TI==0); TI = 0;
- SBUF = 0xff; //GR5 数据
- while(TI==0); TI = 0;
- SBUF = 0xff; //GR6 数据
- while(TI==0); TI = 0;
- delay_ms(10); //大于3ms的延时 用于结束帧
- while (1);
- }
复制代码
|