单片机问题~我不知道如何点亮所有的数码管~请大虾们帮下忙~

来源:百度知道 编辑:UC知道 时间:2024/06/06 08:20:31
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delayms(uint);
sbit dula=P2^6;
sbit wela=P2^7;
uchar num;
unsigned char code table[]=
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77, 0x7c,
0x39,0x5e,0x79,0x71
};
void main()
{
wela=1;
P0=0xff;//如何让八个数码管全部一起亮?
wela=0;
while(1)
{
for(num=0;num<16;num++)
{
dula=1;
P0=table[num];
delayms(1000);
dula=0;
}

}
}

void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}

/*将此程序下载到单片机里去的时候,我发现不管我将P0的值赋成什么,它只有一个最后一个数码管是亮的。我不知道怎么修改才能让八个数码管
一起亮呢!
在进行位选的时候,我不知道怎么给P0(或者是P2)赋值,才能让八个数码管一起亮。请帮忙将此上程序修改下。*/

你这个图是用138译码器控制位选的,所以不能用这种静态显示,这种连接方法是不能静态显示的。只能动态显示。
看的出来你这是郭天祥的程序吧,呵呵。并不是所有的电路板都是那样连接。我给你个程序吧。你这个图跟我的板子是一样的,正好有一个,拿去用吧。好好看看。
这个程序是我以前做的,八只管显示0-7
#include<reg52.h>
#define uchar unsigned char
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
uchar a;
sbit d=P3^7;
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
while(1)
{
for(a=0;a<8;a++)
{
P2=a;
d=0;
P0=table[a];
d=1;
delay(10);
}
}
}