单片机,为什么一秒的延时不起作用了?
#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;
}
} 展开
#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;
}
} 展开
2个回答
展开全部
这个程序对吗?数码管肯定显示不对啊,你用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--);
}
而且用的晶振不同,运行每个指令的时间不同,可以自己算算。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询