打印
[51单片机]

如何实现数码管对0消隐

[复制链接]
2379|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jinpf1974|  楼主 | 2016-5-20 10:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg51.h>//51系列单片机定义文件
#include <intrins.h>
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符
#define uint unsigned int
#define uchar unsigned char         
#define key P1        //矩阵键盘接口
#define wei P2 //         位选
#define seg P0           // 段选
uint count0=0;        
uchar count1=0;
uchar second=0;
uchar gewei;
uchar shiwei;
uchar scan=0;

char disp[2]={0xc0,0xc0};

char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
void timer0() interrupt 1
{
gewei=second%10;
shiwei=second/10;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count0++;
if(count0==20)
{count0=0;
         second++;
         if(second==60)
        {
        second=0;
        }
}
disp[0]=tab[gewei];
disp[1]=tab[shiwei];
}
void timer1() interrupt 3
{

count1++;
if(count1==32)
{count1=0;
}
scan++;
if(scan==2) scan=0;
   switch(scan)
   {
            case(1):
         {
          seg=0xff;
          wei=0xfe;
          seg=disp[0];
         }break;
            case(0):
         {
          seg=0xff;
          wei=0xfd;
          seg=disp[1];
         }break;
   }

}

void main()
{
        
           TMOD=0x21;         //t1位方式2;t0为方式1
        TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
        TH1=(256-250);
    TL1=(256-250);
        IE=0x8a;
        TR0=1;
        TR1=1;

   while(1)
if(shiwei==0)
   {
     seg=0xff;
     wei=0xfd;
            seg=disp[0];
      }
          }
这是我写的数码管程序,实现0-59的秒计数,想在计数<10时,不要显示十位的0,但是按照上面的程序,十位也被隐约点亮。如何实现当<10时,十位切底不亮?

相关帖子

沙发
梦在那| | 2016-5-20 11:03 | 只看该作者
是不是IO上拉电压不够啊

使用特权

评论回复
板凳
jinpf1974|  楼主 | 2016-5-20 11:28 | 只看该作者
应该不是的,我用定时器完成秒计数,1个实现秒定时,1个实现数码管扫描,用的是开发板,不是电路的问题,不清楚软件如何消去十位的0

使用特权

评论回复
地板
ningling_21| | 2016-5-21 08:41 | 只看该作者
jinpf1974 发表于 2016-5-20 11:28
应该不是的,我用定时器完成秒计数,1个实现秒定时,1个实现数码管扫描,用的是开发板,不是电路的问题,不 ...

这个不是消隐实现的,需要关闭显示时加判断,如果当前位置显示数字为0,且不需显示这个0,把当前位的段码送成0X00(共阴极数码管)或0XFF(共阳极数码管)或者关闭当前位选,即可

使用特权

评论回复
5
hgjinwei| | 2016-5-21 10:17 | 只看该作者
软件结构问题造成的,
main 函数后面改为:
while(1){
    continue;  // 反正也没啥事了
}
void timer0() interrupt 1 后面改为:
    if(shiwei > 0){
        disp[1]=tab[shiwei];
    }
    else{
        disp[1]=0xFF;
    }
    disp[0]=tab[gewei];

好了,应该可以不显示十位了。

PS:学生?

使用特权

评论回复
6
ywlzh| | 2016-5-21 21:48 | 只看该作者
对零消隐?什么鬼

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

7

帖子

0

粉丝