PIC16F877A单片机控制数码管有问题,请高手指教!

2020-02-08 12:10发布

我的实验目的是在数码管前二位显示数字,一上电,前二位数码管为二个0,按第一个按键,按一加一个数字,第二个按键按一下减一个数,第三个按键按一下,直接为0。请大家看看我的程序那里有错吧!先谢谢了!数码管为共阳的!
程序如下
*#include<pic.h>
#define uint unsigned int
#define uchar unsigned char
const uchar smg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x7F};
__CONFIG(0x3B31);
uchar num;
void delay(uint x)
{uint a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
void init()
{TRISB=0xfe;//1111 1110
TRISC=0;//0000 0000
TRISD=0;//0000 0000
}
void xianshi(uchar num1)
{
uchar shi,ge;
shi=num1/10;
ge=num1%10;
PORTC=smg[shi];
PORTD=0x01;//1000 0000
delay(5);
PORTC=smg[ge];
PORTD=0x02;//0100 0000
delay(5);
}
void keyscan()//RB为按键RC为LED灯RD为位选
{
if(RB1==0)
{delay(10);
if(RB1==0)
{
while(!RB1);
{xianshi(num);
num++;
if(num==99)
num=0;
}
}
}
if(RB2==0)
{delay(10);
if(RB2==0)
{
while(!RB2);
{xianshi(num);
if(num==0)
  num=99;
  num--;
}
}
}
if(RB3==0)
{delay(10);
if(RB3==0)
{
while(!RB3);
{xianshi(num);
num=0;
}
}
}
}
void xianshi()
{PORTC=smg[2];
PORTD=0x01;//1000 0000
delay(5);
PORTC=smg[8];
PORTD=0x02;//0100 0000
delay(5);
}
void main()
{init();
while(1)
{//keyscan();
PORTB=0x80;
xianshi(num);
}
}

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