个位的零还是要显示的吧 |
扫描时判断要现实的值是否为0,是0就跳过这一位 |
更正P0=(miao%100/10>0?su[miao%100/10]:255); |
判断两次 1. 判断两位数是否大于0,如果不大于0就关闭位选 2. 如果十位数大于0,就显示十位数和个位数,否则只显示个位数 如判断 shij if(shij>0) { if((shij/10)>0) { P0=su[shij/10]; w1=1; delay(1); w1=0; }else{ delay(1); w1=0; } P0=su[shij%10]; w2=1; delay(1); w2=0; }else{ w1 = 0; w2 = 0; delay(1); } 下面的都这样改,或封装成函数也行 |
这么改: void xianshi() { P0=su[shij%100/10]; w1=1; ////此行改为:if(P0==0xc0)w1=0;else w1=1; //下面w3=1;w5=1;w7=1;类推 delay(1); w1=0; P0=su[shij%10]; w2=1; delay(1); w2=0; |
如果最高位是“0”,则各段全部熄灭。然后判断第二位,如果也是“0”....... |
判断要显示的数是否小于10,是则把十位显示关闭,否则显示 |
将定义的位选由1变为0,比如w1=1改为w1=0;或者删除该位选也可以 |
显示的时候判断一下就可以了,当第一位数据是0的时候关掉第一位数码的共同端就可以了,其他的数据管正常显示,比如 P0=su[shij%100/10]; w1=1; delay(1); w1=0; 语句中的W1,如果这个是首位数码管的显示是0就W1全部=0,使数码管不工作,OK |
在第一个非0数字出现前的数字都不显示,其后的都要显示,除非有小数点的个位数的0要显示 |
吧第一个管脚屏蔽了就行 |
把表示0的oxc0直接换成0xff让他熄灭就好了 |
记得有的芯片有“无效零”显示脚,,,,,,,,,,我说的是数字集成电路 |
判断高位是不是0,是0关显示 |
额,你把位选关了不就行了,不过关了的话,10几分时怎么办?嗯。。加个判断,=0就把位选关了。 |
P0=su[(miao%100/10>0?miao%100/10:255)]; |
说个简单的逻辑代码, 假定 number 为待显示的数 假定 show_enable 函数为显示数码管的函数(亮),入口参数分别为 显示位置 和 显示值。 假定 show_disable 函数为禁止显示数码管的函数(灭),入口参数为 显示位置。 u8 seek=0; u16 t; do { t=number%10; number=number/10; show(seek,t); seek++; } while(number>0); for(;seek<5;seek++) { show_disable(seek); } 简单手工模拟下: number=00078 时, 断点在 while 处看到值 t=8,number=7,seek=1 t=7,number=0,seek=2 number=00100 时, 断点在 while 处看到值 t=0,number=10,seek=1 t=0,number=1,seek=2 t=1,number=0,seek=3 正负数可以先判断符号位,然后转成正数再弄 |
判断首位为0送#20H显示空,不为0正常显示,依次类推 |
把表示0的oxc0直接换成0xff让他熄灭就好了 |
通过if之类的条件判断语句。比如当只有后面一位的时候,执行一种显示模式。如果有高位大于零的时候,再显示出来。 |