数码管点亮后很暗

2019-07-16 01:39发布

求解:该程序为什么缺少while语句后数码管点亮后很暗而且显示不对是什么原因,while语句在这除了循环外在这还有什么作用?


#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;
void main()
{
wela=1;
P0=0xfe;
wela=0;
dula=1;
P0=0x7f;
dula=0;
while(1);

}

谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
wyb0104
2019-07-16 07:27
你写程序的顺序有问题,本来是这样的:
#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;
void main()
{
wela=1;//位锁开
P0=0xfe;//P0赋值0xfe,就是最后一个数码管点亮
wela=0;//位锁关,锁定0xfe,锁定最后一个数码管亮
dula=1;//段锁开
P0=0x7f;//P0赋值0x7f,就是显示8
dula=0;//段锁关,锁定0x7f,锁定显示8
while(1);//while的空循环,程序停在这里不动了,不改变P0,也不改变位锁和段锁
}这样,程序貌似是正常的
但是去掉while(1)之后,程序不会停止在某一处,程序运行完后单片机会重复跑程序
#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;
void main()
{
wela=1;//位锁开,第一次运行是没什么,但第二次运行呢?P0赋值任然是0x7f,位的值给了0x7f,所以出现乱码
P0=0xfe;//改变P0口赋值
wela=0;//位锁关
dula=1;//段锁开,注意,P0值任然是0xfe,段的值给了0xfe,所以数码管变暗
P0=0x7f;//改变P0口赋值
dula=0;//段锁关
}出现问题了
所以我一般不这样写程序。建议改成:
#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;
void main()
{
while(1)//while循环写到这是因为while循环比程序重新运行要快,可以试一试把while去掉
{
P0=0xfe;//改变P0口赋值
wela=1;//位锁开,位的值赋给0xfe
wela=0;/位锁关,位的值锁定0xfe
P0=0x7f;//改变P0口赋值
dula=1;//段锁开,段的值赋给0x7f
dula=0;//段锁关,段的值锁定0x7f
}
}这样,不管你让程序停在某处还是让程序循环都不会出现错误

一周热门 更多>