C语言51单片机 关于数码管问题!
程序:#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharsbitdula=P0;sbitwel...
程序:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P0;
sbit wela=P2;
uchar num;
uchar code bianma[]={
0x3f,0x30,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);
void main()
{
P2=0xc5;
while(1)
{
for(num=0;num<16;num++)
{
dula=1;
P0=bianma[num];
dula=0;
delay(500);
}
}
}
void delay(uint z)
{
uint x,y;
for(x=100;x>0;x--)
for(y=z;y>0;y--);
}
为什么此程序数码管的a段 长亮呢?
然后我把
{
dula=1;
P0=bianma[num];
dula=0;
delay(500);
}
上面这一段程序的dula=1和dula=0 对换,,
数码管a段 又长灭!
其他段数都正常!
求解啊 展开
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P0;
sbit wela=P2;
uchar num;
uchar code bianma[]={
0x3f,0x30,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);
void main()
{
P2=0xc5;
while(1)
{
for(num=0;num<16;num++)
{
dula=1;
P0=bianma[num];
dula=0;
delay(500);
}
}
}
void delay(uint z)
{
uint x,y;
for(x=100;x>0;x--)
for(y=z;y>0;y--);
}
为什么此程序数码管的a段 长亮呢?
然后我把
{
dula=1;
P0=bianma[num];
dula=0;
delay(500);
}
上面这一段程序的dula=1和dula=0 对换,,
数码管a段 又长灭!
其他段数都正常!
求解啊 展开
展开全部
首先,您的程序有错误。
sbit 是位声明指令,不能像你这样使用
sbit dula=P0;
sbit wela=P2;
这样是错误的!
应该声明dula对应着P0的第几位管脚
sbit dula = P0^0;
sbit wela = P2^1;
以上代码描述了dula为P0^0管脚,wela为P2^1管脚;
还有您的这段程序:
for(num=0;num<16;num++)
{
dula = 1;
P0 = bianma[num];
dula = 0;
delay(500);
}
结合您前面的错误声明——sbit dula=P0;
请问上述程序是不是等于
{
P0 = 1;
P0 = bianma[num];
P0 = 0;
delay(500);
}
这是一段完全错误的代码。
由于你错误声明了sbit dula=P0 ,所以导致dula并不代表整个P0口,而只代表了P0^0管脚。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询