OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3596|回复: 8

关于能看见灯亮灭的延时

[复制链接]

7

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2015-7-18
在线时间
0 小时
发表于 2015-7-26 18:42:48 | 显示全部楼层 |阅读模式
5金钱
delay_ms(300);这句的位置有什么要求么?为什么不能放在LED=0;后面呢,放在它后面灯就不灭

最佳答案

查看完整内容[请看2#楼]

这是第一个例子啊,你都不理解吗?原子哥的不完全手册很详细了把,哈哈,原子哥哭晕在厕所了。 那我就给你简单说说也行,这个就是个延时函数,只是他用滴答定时器写的,比较准,没啥特别的,为什么+延时?因为你是肉眼啊,你要是眼睛跟的上他的频率,也可以不+。 原子哥的例子是在死循环里,电路图你可以看出来是低电平有效的,那么:                 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

39

主题

598

帖子

0

精华

高级会员

Rank: 4

积分
875
金钱
875
注册时间
2013-12-18
在线时间
41 小时
发表于 2015-7-26 18:42:49 | 显示全部楼层
这是第一个例子啊,你都不理解吗?原子哥的不完全手册很详细了把,哈哈,原子哥哭晕在厕所了。
那我就给你简单说说也行,这个就是个延时函数,只是他用滴答定时器写的,比较准,没啥特别的,为什么+延时?因为你是肉眼啊,你要是眼睛跟的上他的频率,也可以不+。
原子哥的例子是在死循环里,电路图你可以看出来是低电平有效的,那么:
                LED0=0;//LED0亮
LED1=1;//LED1灭
delay_ms(300);//为了让人类的眼睛能看到这一现象。。。如果取消了所有延时,其实也是跑马灯,只不过不是给人看的跑马灯...
LED0=1;//led0灭
LED1=0;//led1亮
delay_ms(300);//再次让你看到
够详细?理解了?
给你的建议:
如果坚持走这一行,回去好好看C语言先,在仔细的跟着原子哥 的例子做,我第一次看到有人弄不懂跑马灯的。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-26 19:50:49 | 显示全部楼层
你其他代码的问题,不是这个函数的问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

39

主题

598

帖子

0

精华

高级会员

Rank: 4

积分
875
金钱
875
注册时间
2013-12-18
在线时间
41 小时
发表于 2015-7-26 20:03:07 | 显示全部楼层
哦,对,你说的那个不灭哈,忘记说了,你看看把延时放在LED=0;后面,那么LED1=1;后面没了延时,就马上该LED1=0了,所以他其实不是不灭,他灭过,你眼睛捕捉不到而已。
回复

使用道具 举报

7

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2015-7-18
在线时间
0 小时
 楼主| 发表于 2015-7-26 22:07:33 | 显示全部楼层
回复【4楼】w417074951:
---------------------------------
int main(void)
{
  Stm32_Clock_Init(9); //系统时钟设置
delay_init(72);      //延时初始化
uart_init(72,9600);  //串口初始化 
LED_Init();     //初始化与LED连接的硬件接口
KEY_Init();          //按键初始化  
delay_ms(300);     //让人看得到灭
IWDG_Init(4,625);    //与分频数为64,重载值为625,溢出时间为1s    
LED0=0;  //点亮LED0
while(1)
{
if(KEY_Scan(0)==WKUP_PRES)IWDG_Feed();//如果WK_UP按下,则喂狗
delay_ms(10);
};
}
并没有LED=1;
回复

使用道具 举报

7

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2015-7-18
在线时间
0 小时
 楼主| 发表于 2015-7-26 22:09:22 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
其他代码我没动啊,我只动了delay_ms(300)的位置
回复

使用道具 举报

7

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2015-7-18
在线时间
0 小时
 楼主| 发表于 2015-7-26 22:17:33 | 显示全部楼层
回复【4楼】w417074951:
---------------------------------
可以加你QQ么?
回复

使用道具 举报

39

主题

598

帖子

0

精华

高级会员

Rank: 4

积分
875
金钱
875
注册时间
2013-12-18
在线时间
41 小时
发表于 2015-7-26 22:31:01 | 显示全部楼层
回复【7楼】zhaozhao:
---------------------------------
额,我以为是跑马灯呢,你开始没贴程序,对不起啊,这个是一样的意思把?
你看,LED_Init();我虽然没看到,我的例子和你可能不一样,我是2.0版本的,我就不打开找了,但是你应该是设置了推挽、?然后输出了高把?也就是说灯是灭的把初始,延时了300以后,好让你看的到,然后死循环了,那么该你操作了,看门狗定时器溢出了以后,程序重新跑,那么此时就要重新开始,那么你把延时放在了LED=0后面,那么也就是说,程序刚配置的LED引脚,输出高,刚灭,就马上LED=0变亮了,你当然看不见他灭,其实他灭过了,还是那句画,你眼睛捕捉不到。
还有,虽然我不知道你哪个例子刚开始,代码里看似没有LED=1,但是你看看开始设置LED引脚的时候,是不是设置输出以后把他先输出高电平了?是不是就等价与LED=1呢?
不知道我说明白没有,就是,延时是要让你看到现象而已,那么延时的位置就要放在你想看到的那个语句后面,你放在下一个他改变成另一个状态的语句那里,那第一个状态由于时间太短,速度太快,你就会看不到。
我QQ就我帐号啊,看的出来把,随便+
回复

使用道具 举报

56

主题

1237

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2643
金钱
2643
注册时间
2014-2-13
在线时间
518 小时
发表于 2015-7-27 10:23:07 | 显示全部楼层
估计LZ连51都没怎么学过,学习第一步要学会如何找资料,看资料
技术交流,Sell 中颖单片机,欢迎私信骚扰
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 11:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表