请问为什么数码管不显示

2024-12-03 16:41:27
推荐回答(1个)
回答1:

void diasplay(void)//子程序名字错了,主程序调用时是:display();
这在编译时,有提示的,没有看到吗?程序中的变量,都是正数,所以,声明变量时最好都加上 unsigned。
对你的程序做了一些修改,如下,对照一下你原来的程序,有什么不同。
#include
char code TAB[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};
#define ADC P0
#define SCANP P1
#define SEG7P P2
unsigned char disp[4]={0,0,0,0};
unsigned char _adc;
void dataproc(unsigned char data_in);
void display(void);
void delay1ms(unsigned char x);
void main()
{
while(1)
{
display();
_adc=ADC;
dataproc(_adc);
}
}
void dataproc(unsigned char data_in)
{
unsigned int results;
results=data_in*196;
disp[0]=results/1000; //多一个0,这是disp[0]
disp[1]=(results/100)%10;//多一个0,这是disp[1]
disp[2]=(results/10)%10;//多一个0,这是disp[2]
disp[3]=results%10; //这是disp[3]
}
void display(void)//名字错了,多了一个a
{
unsigned char i,scan;
char times=20;
while(--times>=0)
{
scan=1;
for(i=0;i<4;i++)
{
SEG7P=0xff;
SCANP=~scan;
SEG7P=TAB[disp[i]];
delay1ms(10);
scan<<=1;
}
}
}
void delay1ms(unsigned char x)
{
int i,j;
for(i=0;ifor(j=0;j<120;j++);
}