找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2967|回复: 20
收起左侧

此单片机程序如何让不需要的0不显示?

  [复制链接]
ID:360552 发表于 2019-6-24 09:22 | 显示全部楼层 |阅读模式
定义和显示函数如下
#include <REG52.H>
#define uint  unsigned int
#define uchar unsigned char
#define     Hidden  16  //DispTab[15]=0xff
uchar ms,shij,miao;
uchar shu1,shu2,shu_f;
bit a1;
sbit s1=P3^2;
sbit s2=P3^3;
sbit s3=P3^4;
sbit s4=P3^5;
sbit lin=P3^7;
sbit w1=P2^0;
sbit w2=P2^1;
sbit w3=P2^2;
sbit w4=P2^3;
sbit w5=P2^4;
sbit w6=P2^5;
sbit w7=P2^6;
sbit w8=P2^7;

uchar code su[]={
   0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
};
void delay(uchar ms)
    {       //
  uchar i ;
  while(ms--)
  {
    for(i = 0 ; i<250;i++) ;
  }
   }


void xianshi()
      {
    P0=su[shij%100/10];
    w1=1;
    delay(1);
    w1=0;
    P0=su[shij%10];
    w2=1;
    delay(1);
    w2=0;
  
    P0=su[miao%100/10];
    w3=1;
    delay(1);
    w3=0;
    P0=su[miao%10];
    w4=1;
    delay(1);
    w4=0;
     P0=su[shu1%100/10];
     w5=1;
   delay(1);
   w5=0;
    P0=su[shu1%10];
    w6=1;
    delay(1);
    w6=0;
    P0=su[shu2%100/10];
    w7=1;
    delay(1);
    w7=0;
    P0=su[shu2%10];
    w8=1;
    delay(1);
    w8=0;
   
   }


篮球计分器

篮球计分器
回复

使用道具 举报

ID:570488 发表于 2019-6-24 10:59 | 显示全部楼层
通过if之类的条件判断语句。比如当只有后面一位的时候,执行一种显示模式。如果有高位大于零的时候,再显示出来。
回复

使用道具 举报

ID:570685 发表于 2019-6-24 11:37 | 显示全部楼层
把表示0的oxc0直接换成0xff让他熄灭就好了
回复

使用道具 举报

ID:140275 发表于 2019-6-24 11:39 | 显示全部楼层
判断首位为0送#20H显示空,不为0正常显示,依次类推
回复

使用道具 举报

ID:565305 发表于 2019-6-24 11:42 | 显示全部楼层
说个简单的逻辑代码,

假定 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

正负数可以先判断符号位,然后转成正数再弄
回复

使用道具 举报

ID:332444 发表于 2019-6-24 11:45 | 显示全部楼层
P0=su[(miao%100/10>0?miao%100/10:255)];
回复

使用道具 举报

ID:529540 发表于 2019-6-24 11:46 | 显示全部楼层
额,你把位选关了不就行了,不过关了的话,10几分时怎么办?嗯。。加个判断,=0就把位选关了。
回复

使用道具 举报

ID:105364 发表于 2019-6-24 11:49 | 显示全部楼层
判断高位是不是0,是0关显示
回复

使用道具 举报

ID:460466 发表于 2019-6-24 12:35 | 显示全部楼层
记得有的芯片有“无效零”显示脚,,,,,,,,,,我说的是数字集成电路
回复

使用道具 举报

ID:570759 发表于 2019-6-24 13:39 | 显示全部楼层
把表示0的oxc0直接换成0xff让他熄灭就好了
回复

使用道具 举报

ID:522502 发表于 2019-6-24 14:49 | 显示全部楼层
吧第一个管脚屏蔽了就行
回复

使用道具 举报

ID:245053 发表于 2019-6-24 14:51 | 显示全部楼层
在第一个非0数字出现前的数字都不显示,其后的都要显示,除非有小数点的个位数的0要显示
回复

使用道具 举报

ID:564631 发表于 2019-6-24 16:44 | 显示全部楼层
显示的时候判断一下就可以了,当第一位数据是0的时候关掉第一位数码的共同端就可以了,其他的数据管正常显示,比如  P0=su[shij%100/10];
    w1=1;
    delay(1);
    w1=0;
语句中的W1,如果这个是首位数码管的显示是0就W1全部=0,使数码管不工作,OK
回复

使用道具 举报

ID:569475 发表于 2019-6-24 17:14 | 显示全部楼层
将定义的位选由1变为0,比如w1=1改为w1=0;或者删除该位选也可以
回复

使用道具 举报

ID:160500 发表于 2019-6-24 19:02 | 显示全部楼层
判断要显示的数是否小于10,是则把十位显示关闭,否则显示
回复

使用道具 举报

ID:7485 发表于 2019-6-24 19:26 | 显示全部楼层
如果最高位是“0”,则各段全部熄灭。然后判断第二位,如果也是“0”.......
回复

使用道具 举报

ID:483407 发表于 2019-6-24 19:54 | 显示全部楼层
这么改:
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;
回复

使用道具 举报

ID:207421 发表于 2019-6-24 21:36 | 显示全部楼层
判断两次
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);
        }

下面的都这样改,或封装成函数也行
回复

使用道具 举报

ID:332444 发表于 2019-6-25 10:41 | 显示全部楼层
更正P0=(miao%100/10>0?su[miao%100/10]:255);
回复

使用道具 举报

ID:171556 发表于 2019-6-25 16:10 | 显示全部楼层
扫描时判断要现实的值是否为0,是0就跳过这一位
回复

使用道具 举报

ID:160500 发表于 2019-6-25 16:53 | 显示全部楼层
个位的零还是要显示的吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表