OpenEdv-开源电子网

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

LED闪烁10次后停止闪烁程序出错如何修改

[复制链接]

3

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-6-9
在线时间
11 小时
发表于 2018-5-28 16:10:53 | 显示全部楼层 |阅读模式
本帖最后由 yinfeng1314520 于 2018-5-28 16:55 编辑

如题,我用stm32的mini板控制开发板上的一个LED灯闪烁10次后停止闪烁,结果却一直在闪烁,怎么回事,如何修改?我用51单片机这样写程序可以实现LED闪烁10次后停止闪烁,出现问题的程序如下:
#include "stm32f10x.h"
#include "delay.h"
#include "key.h"
#include "led.h"
u8 flag_mode=0;
u8 flag_z0=10;
u8 flag_z1=10;

int main(void)
{       
        u8 t=0;
         int i;
         int j;
         int k;
        LED_Init();
        KEY_Init();
  delay_init();         
         
  while(1)
        {
                for(i=0;i<10;i++){
                    PAout(8)=0;
                          delay_ms(500);
                                PAout(8)=1;
                          delay_ms(500);
                 }
           //PAout(8)=1;
                // delay_ms(500);
                    
                /*t=KEY_Scan(0);                //μ&#195;μ&#189;&#188;ü&#214;μ
                switch(t)
                {                                 
                        case KEY0_PRES:  //éè&#214;&#195;&#197;ü&#194;íμ&#198;éá&#203;&#184;′&#206;êy×&#212;&#212;&#246;
                                if(flag_mode==1){flag_z0++;}
                                if(flag_mode==2){flag_z1++;}
                                if(flag_mode==3){flag_z0++;flag_z1++;}
                                break;
                        case KEY1_PRES:  //éè&#214;&#195;&#197;ü&#194;íμ&#198;éá&#203;&#184;′&#206;êy×&#212;&#188;&#245;
                                if(flag_mode==1){flag_z0--;}
                                if(flag_mode==2){flag_z1--;}
                                if(flag_mode==3){flag_z0--;flag_z1--;}
                                break;
                        case WKUP_PRES:                //&#209;&#161;&#212;&#241;&#196;&#199;&#184;&#246;μ&#198;éá&#203;&#184;               
                                flag_mode++;
                          if(flag_mode==5){flag_mode=0;}
                                break;
                        default:
                                delay_ms(10);       
                }
                if(flag_mode==0){
                        PAout(8)=1;
                        PDout(2)=1;
                }
                else if(flag_mode==1){
                 for(i=0;i<flag_z0;i++){
                    PAout(8)=0;
                          delay_ms(100);
                                PAout(8)=1;
                          delay_ms(100);
                  }
                }
                else if(flag_mode==2){
                 for(j=0;j<flag_z1;j++){
                    PDout(2)=0;
                          delay_ms(100);
                                PDout(2)=1;
                          delay_ms(100);
                  }
                }
                else if(flag_mode==3){
                        if(flag_z0>=flag_z1){
                                for(k=0;k<flag_z0;k++){
                                PAout(8)=0;
                                if(k<flag_z1){PDout(2)=0;}       
                                else{PDout(2)=1;}
                          delay_ms(100);
                                PAout(8)=1;
                                PDout(2)=1;
                          delay_ms(100);
                           }
                         }
                  else{
                                for(k=0;k<flag_z1;k++){
                                PAout(8)=0;
                                if(k<flag_z0){PDout(2)=0;}       
                                else{PDout(2)=1;}
                          delay_ms(100);
                                PAout(8)=1;
                                PDout(2)=1;
                          delay_ms(100);
                          }
                        }       
                }
                else if(flag_mode==4){
                        PAout(8)=0;
                        PDout(2)=0;
                }*/
               
               
               
        }
}


Template.zip

6.12 MB, 下载次数: 107

LED闪烁10次出错程序

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4926
金钱
4926
注册时间
2017-7-6
在线时间
721 小时
发表于 2018-5-28 16:24:35 | 显示全部楼层
你还不如直接贴代码 贴LED灯那块代码  谁没事下载你的工程
我是小白,很白很白的小白!!!
回复 支持 反对

使用道具 举报

117

主题

598

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
1702
金钱
1702
注册时间
2012-5-10
在线时间
439 小时
发表于 2018-5-28 16:30:12 | 显示全部楼层
下载次数47次了,楼上的
如有技术问题,微信扫头像交流,STM32,JAVA,服务器
回复 支持 反对

使用道具 举报

3

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-6-9
在线时间
11 小时
 楼主| 发表于 2018-5-28 16:49:29 | 显示全部楼层
#include "stm32f10x.h"
#include "delay.h"
#include "key.h"
#include "led.h"


int main(void)
{       
       
         int i;
        LED_Init();
       
  delay_init();         
         
  while(1)
        {
                for(i=0;i<10;i++){
                    PAout(8)=0;
                          delay_ms(500);
                                PAout(8)=1;
                          delay_ms(500);
                 }
          
               
               
               
        }
}

回复 支持 反对

使用道具 举报

3

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-6-9
在线时间
11 小时
 楼主| 发表于 2018-5-28 16:51:03 | 显示全部楼层
代码是这样的,为什么不能跳出for循环,一直在闪烁
回复 支持 反对

使用道具 举报

1

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2017-9-18
在线时间
97 小时
发表于 2018-5-28 16:57:07 | 显示全部楼层
for有跳出,只是while一直在执行又重头开始
回复 支持 反对

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4926
金钱
4926
注册时间
2017-7-6
在线时间
721 小时
发表于 2018-5-28 17:00:24 | 显示全部楼层
xsx127 发表于 2018-5-28 16:30
下载次数47次了,楼上的

哈哈
我是小白,很白很白的小白!!!
回复 支持 反对

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4926
金钱
4926
注册时间
2017-7-6
在线时间
721 小时
发表于 2018-5-28 17:02:48 | 显示全部楼层
while一直在循环,跳出for语句了还是会从新执行,你可以做个标志,10次之后只执行一次
我是小白,很白很白的小白!!!
回复 支持 反对

使用道具 举报

3

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-6-9
在线时间
11 小时
 楼主| 发表于 2018-5-28 17:07:39 | 显示全部楼层
我把while(1)去掉,直接在main函数里还是死循环了,一直在闪烁
回复 支持 反对

使用道具 举报

117

主题

598

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
1702
金钱
1702
注册时间
2012-5-10
在线时间
439 小时
发表于 2018-5-28 17:09:13 | 显示全部楼层
i=0,写到while外面
如有技术问题,微信扫头像交流,STM32,JAVA,服务器
回复 支持 反对

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4926
金钱
4926
注册时间
2017-7-6
在线时间
721 小时
发表于 2018-5-28 17:56:13 | 显示全部楼层
yinfeng1314520 发表于 2018-5-28 17:07
我把while(1)去掉,直接在main函数里还是死循环了,一直在闪烁

也可以用10楼说的一样,for语句里面的i=0写到while之前
我是小白,很白很白的小白!!!
回复 支持 反对

使用道具 举报

3

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-6-9
在线时间
11 小时
 楼主| 发表于 2018-5-30 21:23:06 | 显示全部楼层
把i=0移动while(1)外面就好使了,还是自己太水
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2018-5-16
在线时间
30 小时
发表于 2018-6-1 16:52:08 | 显示全部楼层
把i=0移动while(1) 怎么 弄
回复 支持 反对

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4926
金钱
4926
注册时间
2017-7-6
在线时间
721 小时
发表于 2018-6-1 17:24:35 | 显示全部楼层
yinfeng1314520 发表于 2018-5-30 21:23
把i=0移动while(1)外面就好使了,还是自己太水

把这个i=0移到while外面,开始i=0;然后进入for语句,i加到10后,不小于10,跳出循环,i一直保留10,while怎么循环都不会再跳进for语句里面去了
我是小白,很白很白的小白!!!
回复 支持 反对

使用道具 举报

7

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2018-7-19
在线时间
126 小时
发表于 2018-7-27 14:45:09 | 显示全部楼层
for循环后面加一句while(1);   就可以了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-17 22:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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