标题: 51单片机数码管不需要显示的位如何不让显示零 [打印本页]
作者: 用户 时间: 2015-12-7 13:43
标题: 51单片机数码管不需要显示的位如何不让显示零
51单片机数码管不需要显示的位如何不让显示零
作者: wc86110 时间: 2015-12-7 15:00
在编写源代码时设置成头零不显示就可以了
作者: 用户 时间: 2015-12-7 15:17
能否举个例子
作者: 梁同学 时间: 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 |