TM1650 数码管驱动, 无效位不显示的问题,找解决方法!

玩命搏击 2021-05-05 09:26:07
采用STM32接TM1650驱动共阴数码管, 程序在调试时其它一起正常, 但是有个问题困惑很久无法解决: 数值从0~9999增加,刚开始在千百十位不能显示“0”,随着数值增加,大于等于10时开始显示十位,大于等于100时显示百位,大于等于1000时显示千位,希望大神帮忙指点方法!!


void TM16_Display(unsigned int data) //显示函数,data为显示的数据,0-9999
{
static unsigned char TM16_Display_buf[11]={0x3F,0x6,0x5B,0x4F,0x66,0x6D,0x7D,0x7,0x7F,0x6F,0x00};
unsigned char ge,shi,bai,qian;


ge=data%10; // 求余
shi=(data/10)%10; //先除再求余
bai=(data/100)%10; //先除再求余
qian=(data/1000)%10; //先除再求余



TM16_Write_REG(0x6e,TM16_Display_buf[ge]); //写个位发送显示
TM16_Write_REG(0x6c,TM16_Display_buf[shi]); //写十位发送显示 |0x80可增加小数点
TM16_Write_REG(0x6a,TM16_Display_buf[bai]); //写百位发送显示 |0x80可增加小数点
TM16_Write_REG(0x68,TM16_Display_buf[qian]); //写千位发送显示 |0x80可增加小数点


}


...全文
728 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dceacho 2021-05-05
  • 打赏
  • 举报
回复
没啥难度就是麻烦点而已
if(num<10)
{

}
else if(num<100)
{

}
else if(num<1000)
{

}
else if(num<10000)
{

}
seedundersnow 2021-05-05
  • 打赏
  • 举报
回复
TM16_Write_REG(0x6e,TM16_Display_buf[ge]); //写个位发送显示 if (qian || bai || shi) TM16_Write_REG(0x6c,TM16_Display_buf[shi]); //写十位发送显示 |0x80可增加小数点 else SHI_BLANK(); /* 写空白 */ if (bai || qian) TM16_Write_REG(0x6a,TM16_Display_buf[bai]); //写百位发送显示 |0x80可增加小数点 else BAI_BLANK(); if (qian) TM16_Write_REG(0x68,TM16_Display_buf[qian]); //写千位发送显示 |0x80可增加小数点 else QIAN_BLANK(); 看起来简单一点。。。实际代码量不一定少。。
seedundersnow 2021-05-05
  • 打赏
  • 举报
回复
用3个辅助信号。 虽然看起来有点麻烦。。。。 ALL_OFF(); if (qian) { QIAN_ON(); BAI_ON(); SHI_ON(); else if (bai) { BAI_ON(); SHI_ON(); } else if(shi) { SHI_ON(); } TM16_Write_REG(0x6e,TM16_Display_buf[ge]); //写个位发送显示 if (SHI_IS_ON()) TM16_Write_REG(0x6c,TM16_Display_buf[shi]); //写十位发送显示 |0x80可增加小数点 if (BAI_IS_ON()) TM16_Write_REG(0x6a,TM16_Display_buf[bai]); //写百位发送显示 |0x80可增加小数点 if (QIAN_IS_ON()) TM16_Write_REG(0x68,TM16_Display_buf[qian]); //写千位发送显示 |0x80可增加小数点
dceacho 2021-05-05
  • 打赏
  • 举报
回复
引用 4 楼 玩命搏击 的回复:
[quote=引用 2 楼 seedundersnow 的回复:] TM16_Write_REG(0x6e,TM16_Display_buf[ge]); //写个位发送显示 if (qian || bai || shi) TM16_Write_REG(0x6c,TM16_Display_buf[shi]); //写十位发送显示 |0x80可增加小数点 else SHI_BLANK(); /* 写空白 */ if (bai || qian) TM16_Write_REG(0x6a,TM16_Display_buf[bai]); //写百位发送显示 |0x80可增加小数点 else BAI_BLANK(); if (qian) TM16_Write_REG(0x68,TM16_Display_buf[qian]); //写千位发送显示 |0x80可增加小数点 else QIAN_BLANK(); 看起来简单一点。。。实际代码量不一定少。。
谢谢回复, 那这几个SHI_BLANK(),... 函数该咋写呢[/quote] TM16_Write_REG(0x6e,0); //写个位发送显示 后面依次类推
玩命搏击 2021-05-05
  • 打赏
  • 举报
回复
引用 2 楼 seedundersnow 的回复:
TM16_Write_REG(0x6e,TM16_Display_buf[ge]); //写个位发送显示 if (qian || bai || shi) TM16_Write_REG(0x6c,TM16_Display_buf[shi]); //写十位发送显示 |0x80可增加小数点 else SHI_BLANK(); /* 写空白 */ if (bai || qian) TM16_Write_REG(0x6a,TM16_Display_buf[bai]); //写百位发送显示 |0x80可增加小数点 else BAI_BLANK(); if (qian) TM16_Write_REG(0x68,TM16_Display_buf[qian]); //写千位发送显示 |0x80可增加小数点 else QIAN_BLANK(); 看起来简单一点。。。实际代码量不一定少。。
谢谢回复, 那这几个SHI_BLANK(),... 函数该咋写呢

27,508

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧