单片机,为什么一秒的延时不起作用了?

#include<reg51.h>#include<intrins.h>#defineLEDP2voiddelay(void);voiddelay(void)//误差0u... #include <reg51.h>
#include <intrins.h>
#define LED P2
void delay(void);

void delay(void) //误差 0us
{
unsigned char a,b,c;
for(c=167;c>0;c--)
for(b=171;b>0;b--)
for(a=16;a>0;a--);
}

main()
{ int i;
LED = 0xff;
while(1)
{
for(i=0;i<255;i++)
{
LED = i;
delay();
}
if(i == 255)
i = 0;
}
}
展开
 我来答
06008333
2012-03-01 · TA获得超过267个赞
知道小有建树答主
回答量:109
采纳率:100%
帮助的人:137万
展开全部
这个程序对吗?数码管肯定显示不对啊,你用P2的8个端口控制显示几个数码管不行。况且直接LED = i;坑定输出的不是连续加的数字。
更多追问追答
追问
我要的是P2控制8个LED灯,显示的是10101010这种的。1就是亮,0就是灭。要让这八个灯按照+1的顺序来亮灭。
追答
我懂了,那你的延时程序肯定有问题。你可以用示波器测测P2^0的波形,看看是不是周期一秒!
void delay(void) //误差 0us
{
unsigned char a,b,c;
for(c=167;c>0;c--)
for(b=171;b>0;b--)
for(a=16;a>0;a--);
}
而且用的晶振不同,运行每个指令的时间不同,可以自己算算。
wangjun403
2012-03-01 · TA获得超过528个赞
知道小有建树答主
回答量:451
采纳率:0%
帮助的人:362万
展开全部
具体说下延迟不了是什么情况
追问
就是LED显示的很快,而我程序要求的是每隔一秒+1,可是在LED上根本达不到一秒,数字+1加的非常快。就感觉延时没起作用一样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式