为什么数码管显示缺划

2020-02-09 09:18发布

自己学习数码管,仿例子做了一个程序,但不知怎么回事,笔划显示不全,求大家帮忙看一下。
#include<pic.h>
#define uchar unsigned char
#define uint  unsigned int
__CONFIG(0x3f71);
const uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
                     0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴数码管编码

uchar key_num;
void delay(uint x);
void init();
void scan();
void disp(uchar num1,uchar num2,uchar num3,uchar num4);
void main()
{
     init();
     while(1)
    {
         scan();
         disp(key_num,2,3,6);
     }
}
void delay(uint x)
{
     uint a,b;
     for(a=x;a>0;a--)
      for(b=110;b>0;b--);
}
void init()
{
     TRISB=0xff;
     TRISC=0;
     TRISA=0;
     PORTC=0;
     ADCON1=0x06;
     RBPU=0;
     PORTA=0;
}
void scan()
{
    if(RB0==0)
    {
          delay(10);
          if(RB0==0)
          {
               while(!RB0)
                {
                      disp(key_num,2,3,6);
                      key_num=1;//PORTD=0x01;
                }
          }
     }
     if(RB1==0)
     {
          delay(10);
          if(RB1==0)
           {
                 while(!RB1)
                  {
                         disp(key_num,2,3,6);
                         key_num=2;//PORTD=0x02;}
                  }
            }
      }

}
void disp(uchar num1,uchar num2,uchar num3,uchar num4)
{
     PORTC=table[num1];//显示第一个数码管
     PORTA=0x08;//0000 1000
     delay(2);
     PORTC=table[num2];//显示第二个数码管   (用ICD2单步仿真到这一步时,程序会跳回delay(2)的一行重复执行,不知为什么?)
     PORTA=0x04;//0000 0100
     delay(2);
     PORTC=table[num3];//显示第三个数码管
     PORTA=0x02;//0000 0010
     delay(2);
     PORTC=table[num4];//显示第四个数码管
     PORTA=0x01;//0000 0001
     delay(2);
}


以下是此程序的电路图


(原文件名:名.jpg)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。