51单片机编程,为什么只有第一个数码管亮。单片机是STC89C52RC,程序是看的郭天祥的。

程序:
#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;

void main()
{
wela=1;
P0=0xfc;
wela=0;

dula=1;
P0=0x06;
dula=0;
while(1);
}

本该是点亮前两个数码管的,为什么只有第一个亮呢,而且每次单片机通电第一个数码管就亮了,显示的是原来编的数字,即使通电后没下载程序。

来高手解答一下啊,我是新手。在线等,急求!!

第1个回答  2011-11-26
你要个延时吧,不然你怎么能看见两个数码管同时点亮(动态扫描)
#include<reg52.h>
sbit dula = P2^6;
sbit wela = P2^7;

void delayms(unsigned char ms)
{
unsigned char t;
while(ms--)
{
for(t=0;t<114;t++)
{ ;}
}
}

void main(void)
{
while(1)
{
wela= 1;
P0 = 0xfc;
delayms(1);
wela = 0;
dula = 1;
P0 = 0x06;
delayms(1);
dula = 0;
}
}
第2个回答  2011-11-24
这个问题 是你锁存器 信号没控制好
#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;

void main()
{
P0=0xfc;
wela=1;
wela=0;

P0=0x06;
dula=1;
dula=0;
while(1);
}

和是不是在while循环没有关系~
第3个回答  2011-11-22
解释一下wela,dula是指什么?如果是数码管的公共端,那说明一下是共阴还是共阳? 根据我的理解,如果要两个数码管一起亮,应该把上面的几句都包含在while(1)循环内吧?
即:

#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;

void main()
{
while(1)
{
wela=1;
P0=0xfc;
wela=0;

dula=1;
P0=0x06;
dula=0;
}
}追问

dula和wela分别是段选和位选锁存器的锁存端。数码管是共阴的。改成你上面的还是不行。

本回答被提问者和网友采纳
第4个回答  2011-11-27
//如果共阴极改为如下:
#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;

void main()
{
while(1)
{
wela=1;
dula=1;
P0=0xfc;
wela=0;
delay();//延时15ms
wela=1;
P0=0x06;
dula=0;
delay();//延时15ms
}
}
第5个回答  2011-11-28
回答之前先问一下,数字1显示是否正常?周围有没有暗影?
相似回答