OpenEdv-开源电子网

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

i++实验求帮助,新手上路事故多

[复制链接]

1

主题

5

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2019-6-12
在线时间
2 小时
发表于 2019-6-12 11:55:13 | 显示全部楼层 |阅读模式
1金钱
按键达到次数互换,为什么永远都是i++,跑不到 j 计数下?新手上路求帮助

S2`L]4DF0RR4@[{GWAN`X4Q.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2019-6-12
在线时间
2 小时
 楼主| 发表于 2019-6-12 12:00:57 | 显示全部楼层
int i=0;
  int j=0;
int main(void)
{
        u8 key;
        Stm32_Clock_Init(360,25,2,8);//éèÖÃê±Öó,180Mhz
        delay_init(180);                //3õê¼»ˉÑóê±oˉêy
        LED_Init();                                //3õê¼»ˉLEDê±Öó
        KEY_Init();                 //3õê¼»ˉóë°′¼üᬽóμÄó2¼t½ó¿ú
        //LED0=0;                                        //ÏèμãááoìμÆ  
        while(1)
        {
                key=KEY_Scan(0);         //μÃμ½¼üÖμ
          i=i+1;
                if(key)
                {                    
                        switch(key)       
         while(i<3)                               
                        {                                          
                                case KEY2_PRES:        //&#191;&#216;&#214;&#198;LED0·-×a
                                        LED0=!LED0;
                                        break;
                                case KEY1_PRES:        //&#191;&#216;&#214;&#198;LED1·-×a         
                                        LED1=!LED1;
                                        break;                               
                        }
                                                if (i>=3)       
                                                {j=0;
                                                }                                                       
                else{                       
              j=j+1;       
                                        switch(key)       
          while(j<3)                                               
                            {                                                
                                case KEY2_PRES:        //&#191;&#216;&#214;&#198;LED0·-×a
                                        LED1=!LED0;
                                        break;
                                case KEY1_PRES:        //&#191;&#216;&#214;&#198;LED1·-×a         
                                        LED0=!LED1;
                                         break;
                            }
                        if (j>=3)
                          {i=0;
                     }                
            }                       
                }else delay_ms(10);
        }
}
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2019-6-12
在线时间
2 小时
 楼主| 发表于 2019-6-12 13:38:49 | 显示全部楼层
.......
回复

使用道具 举报

2

主题

84

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1104
金钱
1104
注册时间
2019-1-5
在线时间
258 小时
发表于 2019-6-12 14:22:34 | 显示全部楼层
switch()case之间不能放while()这种...建议看一下基础语句
回复

使用道具 举报

2

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
247
金钱
247
注册时间
2014-10-22
在线时间
40 小时
发表于 2019-6-12 16:23:26 | 显示全部楼层
看图
回复

使用道具 举报

2

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
247
金钱
247
注册时间
2014-10-22
在线时间
40 小时
发表于 2019-6-12 16:24:15 | 显示全部楼层
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2019-6-12
在线时间
2 小时
 楼主| 发表于 2019-6-12 17:58:03 | 显示全部楼层

int i=0;
  int j=0;
int main(void)
{
        u8 key;
        Stm32_Clock_Init(360,25,2,8);//éè&#214;&#195;ê±&#214;ó,180Mhz
        delay_init(180);                //3&#245;ê&#188;&#187;ˉ&#209;óê±oˉêy
        LED_Init();                                //3&#245;ê&#188;&#187;ˉLEDê±&#214;ó
        KEY_Init();                 //3&#245;ê&#188;&#187;ˉó&#235;°′&#188;üá&#172;&#189;óμ&#196;ó2&#188;t&#189;ó&#191;ú
        //LED0=0;                                        //&#207;èμ&#227;ááoìμ&#198;  
        while(1)
        {
                key=KEY_Scan(0);         //μ&#195;μ&#189;&#188;ü&#214;μ
          i=i+1;
                if(key)
                {        while(i<3)                    
                        switch(key)                                      
                        {                                          
                                case KEY2_PRES:        //&#191;&#216;&#214;&#198;LED0·-×a
                                        LED0=!LED0;
                                        break;
                                case KEY1_PRES:        //&#191;&#216;&#214;&#198;LED1·-×a         
                                        LED1=!LED1;
                                        break;                               
                        }
                                                if (i>=3)       
                                                {j=0;
                                                }                                                       
                else{                       
              j=j+1;       
                               while(j<3)
                                        switch(key)                                                                 
                            {                                                
                                case KEY2_PRES:        //&#191;&#216;&#214;&#198;LED0·-×a
                                        LED1=!LED0;
                                        break;
                                case KEY1_PRES:        //&#191;&#216;&#214;&#198;LED1·-×a         
                                        LED0=!LED1;
                                         break;
                            }
                        if (j>=3)
                          {i=0;
                     }                
            }                       
                }else delay_ms(10);
        }
}
这样吗
回复

使用道具 举报

2

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
247
金钱
247
注册时间
2014-10-22
在线时间
40 小时
发表于 2019-6-12 18:00:35 | 显示全部楼层
辣个男人 发表于 2019-6-12 17:58
int i=0;
  int j=0;
int main(void)

你一定要加一个while(i<3)用途是什么?如果不需要去掉
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-6-13 02:48:10 | 显示全部楼层
仿真找问题。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2019-6-12
在线时间
2 小时
 楼主| 发表于 2019-6-13 10:58:03 | 显示全部楼层
zhouzhiqiao223 发表于 2019-6-12 18:00
你一定要加一个while(i

不然怎么互相循环?第一个循环里的次数达到了跑第二个循环,第二个循环次数到了跑第一个循环
回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
发表于 2019-6-13 17:28:36 | 显示全部楼层
你下面這段代碼應該沒人知道它是怎麼跑的...
第一次看到switch後面不是接case的@@


         switch(key)        
         while(i<3)                                
         {                                          
                                case KEY2_PRES:        //&#191;&#216;&#214;&#198;LED0·-×a
                                        LED0=!LED0;
                                        break;
                                case KEY1_PRES:        //&#191;&#216;&#214;&#198;LED1·-×a         
                                        LED1=!LED1;
                                        break;                                
               }
回复

使用道具 举报

2

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
247
金钱
247
注册时间
2014-10-22
在线时间
40 小时
发表于 2019-6-14 09:17:37 | 显示全部楼层
辣个男人 发表于 2019-6-13 10:58
不然怎么互相循环?第一个循环里的次数达到了跑第二个循环,第二个循环次数到了跑第一个循环

你理解错了吧while(i<3)里面没有i++  啊!~
回复

使用道具 举报

0

主题

64

帖子

0

精华

高级会员

Rank: 4

积分
715
金钱
715
注册时间
2012-6-27
在线时间
69 小时
发表于 2019-6-15 08:50:56 | 显示全部楼层
学习一下在线调试
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-13 19:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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