单片机1秒延时闪烁的LED灯程序,如果不加延时或者去掉其中一个延时delay,效果会怎样?求大神谢谢!
#include<reg52.h>#defineu16unsignedintsbitled=P1^0;voiddelay(u16num){u16x,y;for(x=num...
#include <reg52.h>
#define u16 unsigned int
sbit led = P1^0;
void delay (u16 num)
{
u16 x,y;
for(x=num;x>0;x--)
{
for(y=110;y>0;y--)
{
; //延时1ms
}
}
}
void main (void)
{
led=1;
while(1)
{
led=0;
delay(500);
led=1;
delay(500);
}
}
如题,如果上面的while程序中去掉两个delay会怎样?这时是灯闪烁速度最快的吗?或者我把其中一个delay,运行效果会是怎样?还有怎样 才可以达到最快闪烁速度和最慢闪烁速度,求写详细点,谢谢! 展开
#define u16 unsigned int
sbit led = P1^0;
void delay (u16 num)
{
u16 x,y;
for(x=num;x>0;x--)
{
for(y=110;y>0;y--)
{
; //延时1ms
}
}
}
void main (void)
{
led=1;
while(1)
{
led=0;
delay(500);
led=1;
delay(500);
}
}
如题,如果上面的while程序中去掉两个delay会怎样?这时是灯闪烁速度最快的吗?或者我把其中一个delay,运行效果会是怎样?还有怎样 才可以达到最快闪烁速度和最慢闪烁速度,求写详细点,谢谢! 展开
3个回答
展开全部
1、同时去掉两个delay,会导致led引脚的电平持续在0、1之间变化,变化频率非常快,在MHz量级,导致的结果就是直接看不到灯闪烁,如果灯的初始状态是灭的,则灯会基本看不到亮度。
2、见上一条,见不到闪烁。
3、去掉第一个delay,实际灯会持续表现出led=1指令的状态,该状态与硬件中led灯的控制端是接在阴极还是阳极有关;类似地,去掉第二个delay,实际灯会持续表现出led=1指令的状态。
4、人眼能分辨的灯闪烁最快的情况应该在几十Hz左右,可以实际更改delay函数的值,进行测试;最慢闪烁速度,则取决于delay的最长延时时间,这里delay的参数num为16位,则当num取65535时,灯闪烁最慢,另外,还可以增大delay函数内部参数“y=110”的值,增加延时时间,降低闪烁速度。
2、见上一条,见不到闪烁。
3、去掉第一个delay,实际灯会持续表现出led=1指令的状态,该状态与硬件中led灯的控制端是接在阴极还是阳极有关;类似地,去掉第二个delay,实际灯会持续表现出led=1指令的状态。
4、人眼能分辨的灯闪烁最快的情况应该在几十Hz左右,可以实际更改delay函数的值,进行测试;最慢闪烁速度,则取决于delay的最长延时时间,这里delay的参数num为16位,则当num取65535时,灯闪烁最慢,另外,还可以增大delay函数内部参数“y=110”的值,增加延时时间,降低闪烁速度。
更多追问追答
追问
你好,谢谢!我的这个led是共阳极的,还想问下我同时去掉两个delay函数的时候,在keil里面编译为什么会显示1个waring(s)的?是哪里出问题了吗?
追答
看下waring的内容 ,应该是提示你指令达不到预期效果的——就是前一条不起作用了
丁丁舞台
2024-12-13 广告
2024-12-13 广告
作为广州丁丁舞台技术有限公司的工作人员,我们深知LED显示屏维护的重要性。日常维护需确保工作环境温度在-20℃至50℃、湿度10%至90%RH内,避免恶劣环境,远离易燃易爆物品。需定期清洁模组表面,使用软毛刷或酒精擦拭,避免使用液体。同时,...
点击进入详情页
本回答由丁丁舞台提供
展开全部
如果输出低电平灯亮,去掉第一个或都去掉,灯看起来不亮,去掉第二个,灯看起来常亮。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
很简单的,你就去掉啊,然后看一下实际效果就知道了吗。
什么是最慢和最快,你同样需要一边改延时的长短,一边试试看效果,直以满意为止呀。
但不知是实物,还是仿真呀,还是就为了写程序,什么也不做,就想问结果呢?
什么是最慢和最快,你同样需要一边改延时的长短,一边试试看效果,直以满意为止呀。
但不知是实物,还是仿真呀,还是就为了写程序,什么也不做,就想问结果呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询