微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 数码管动态显示时有多余的另外一个数码管也亮

数码管动态显示时有多余的另外一个数码管也亮

时间:10-02 整理:3721RD 点击:
数码管动态显示从1到59循环计时,每秒加1,但是除了正常显示的两个数码管外,其他应该不亮的数码管中有一个亮了,而且数字会变,亮度较低。消影和改延时都没校,不知道问题出在哪里?求指出,谢谢!
程序如下,共阳极的数码管,没有用锁存器,P2接位选,P0接段选
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num,num1;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,                               //数码管编码
0x99,0x92,0x82,0xf8,
0x80,0x90};
uchar shi,ge;
void delayms(uint xms);
void display(uchar,uchar);
void display(uchar shi,uchar ge)
{

   P0=table[shi];
   P2=0xfd;
   delayms(5);
   P2=0xff;
   delayms(5);
   P2=0xfe;
   P0=table[ge];
   delayms(5);
   P2=0xff;
   delayms(5);
      
}
void delayms(uint xms)
{
   uint i,j;
   for(i=xms;i>0;i--)
      for(j=110;j>0;j--);
}
void main()
{
   TMOD=0x10;
   TH0=(65536-45872)/256;                           //装初值
   TL0=(65536-45872)%256;
   EA=1;
   ET1=1;
   TR1=1;
   while(1)
   {
      display(shi,ge);
   }
}

void T1_time() interrupt 3
{
    TH0=(65536-45872)/256;                           //装初值
    TL0=(65536-45872)%256;
    num1++;
    if(num1==20)
     {
       num1=0;
       num++;
       if(num==60)
         {
         num=0;     
         }
        shi=num/10;
        ge=num%10;}
   
   
}


void T1_time() interrupt 3
{
    TH0=(65536-45872)/256;                           //装初值
    TL0=(65536-45872)%256;、。

   TMOD=0x10;
   TH0=(65536-45872)/256;                           //装初值
   TL0=(65536-45872)%256;
   EA=1;
   ET1=1;
   TR1=1;
。你到底是用定时器0还是定时器1 啊

居然有这么低级的问题,不过我改了之后也没有变好,不知道还有什么问题?

我又不知道你改成什么样了  怎么知道你哪里还有错呢?

void display(uchar shi,uchar ge)都定义全局变量了这里面的参数就不用了吧。还有这函数里面怎么不直接用一个for循环不是更简单么P2=0XFF的那个应该可以取消掉吧?

改成这样之后,那个多余的数码管基本上没有亮度了,但仔细看还是看得出来有在闪,不知道是硬件问题还是程序的原因。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num,num1;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,                               //数码管编码
0x99,0x92,0x82,0xf8,
0x80,0x90};
uchar shi,ge;
void delayms(uint xms);
void display(uchar,uchar);
void display(uchar shi,uchar ge)
{

   P0=table[shi];
   P2=0xfd;
   delayms(5);
   P2=0xff;
   
   P2=0xfe;
   P0=table[ge];
   delayms(5);
   P2=0xff;
   
      
}
void delayms(uint xms)
{
   uint i,j;
   for(i=xms;i>0;i--)
      for(j=110;j>0;j--);
}
void main()
{
   TMOD=0x10;
   TH1=(65536-45872)/256;                           //装初值
   TL1=(65536-45872)%256;
   EA=1;
   ET1=1;
   TR1=1;
   while(1)
   {
      display(shi,ge);
   }
}

void T1_time() interrupt 3
{
    TH1=(65536-45872)/256;                           //装初值
    TL1=(65536-45872)%256;
    num1++;
    if(num1==20)
     {
       num1=0;
       num++;
       if(num==60)
         {
         num=0;     
         }
        shi=num/10;
        ge=num%10;}
   
   
}

程序没发现问题啊  给我看看你的原理图吧。或者你换个单片机试试?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top