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段 又长灭!
其他段数都正常!
求解啊
展开
 我来答
wupingjun315
推荐于2016-05-06 · TA获得超过339个赞
知道小有建树答主
回答量:103
采纳率:100%
帮助的人:97.2万
展开全部

首先,您的程序有错误。

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管脚。

昕季之文世21
2014-05-28 · 超过11用户采纳过TA的回答
知道答主
回答量:32
采纳率:100%
帮助的人:20.5万
展开全部
sbit dula=P0;
sbit wela=P2;有问题吧。
P2=0xc5;位也能赋值8位?
追问
好像是位声明问题!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式