标题: 51单片机数码管不需要显示的位如何不让显示零 [打印本页]

作者: 用户    时间: 2015-12-7 13:43
标题: 51单片机数码管不需要显示的位如何不让显示零
51单片机数码管不需要显示的位如何不让显示零
作者: wc86110    时间: 2015-12-7 15:00
在编写源代码时设置成头零不显示就可以了
作者: 用户    时间: 2015-12-7 15:17
wc86110 发表于 2015-12-7 15:00
在编写源代码时设置成头零不显示就可以了

能否举个例子
作者: 梁同学    时间: 2015-12-7 15:54
共阴极就给位选项端口写 高电平就好了啊。哪一位不显示就哪一位高电平。
作者: 无量寿经    时间: 2015-12-8 20:19
以下内容来源于《51单片机轻松入门—基于STC15W4K系列》
例12.5  动态显示的秒计数器(整数有效数值前面的0消隐)
在例12.4的数据显示过程中,整数有效数值前面的0都会被点亮,通常是不符合实际使用要求的,本例中判断整数有效位前数值是否为0,若位0则让段码输出口输出0xFF,使对应位数码管不显示,本例只能对整数有效数值前面的0消隐,小数有效数值前面的0消隐将在12章“精密电压表\通用显示器\计数器制作”部分展示完整产品的实例,本例在上例的基础上主要增加了如下代码。
#define     Hidden  16  // 高位消隐码在数据表中的位置,DispTab[15]=0xff
void DataProcessing()            // 数据处理函数
{
  unsigned char tmp[6];        // 最高位tmp[5],最低位 tmp[0]
  tmp[0] = sec%10;             // 16进制转BCD码(个位)
  tmp[1] = sec/10%10;          // 16进制转BCD码(十位)
  tmp[2] = sec/100%10;         // 16进制转BCD码(百位)
  tmp[3] = sec/1000%10;        // 16进制转BCD码(千位)
  tmp[4] = sec/10000%10;       // 16进制转BCD码(万位)
  tmp[5] = sec/100000%10;      // 16进制转BCD码(十万位)   
  if (tmp[5]==0)  DispBuf[5] = Hidden;                           // 十万位消隐
      else    DispBuf[5]= tmp[5];   
  if ((tmp[5]==0)&&(tmp[4]==0))DispBuf[4]= Hidden;               // 万位消隐
      else    DispBuf[4]= tmp[4];   
  if((tmp[5]==0)&&(tmp[4]==0)&&(tmp[3]==0)) DispBuf[3]= Hidden;  // 千位消隐
      else    DispBuf[3]= tmp[3];   
  if((tmp[5]==0)&&(tmp[4]==0)&&(tmp[3]==0)&&(tmp[2]==0))DispBuf[2]= Hidden; //百位消隐
      else    DispBuf[2]= tmp[2];   
  if((tmp[5]==0)&&(tmp[4]==0)&&(tmp[3]==0)&&(tmp[2]==0)&&(tmp[1]==0))DispBuf[1]= Hidden;    // 十位消隐
      else    DispBuf[1] = tmp[1];   
  DispBuf[0] = tmp[0];             // 最低位显示
}


作者: liuzhaoxin1020    时间: 2017-1-1 12:01
锁存位控制




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1