OpenEdv-开源电子网

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

请教大神,为何加上这句话,程序就无法正常运行呢?if(P1=0x0F){keyNo=0xFF;return;} //无按键按下时提前返回

[复制链接]

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2015-7-25
在线时间
9 小时
发表于 2016-5-17 11:12:56 | 显示全部楼层 |阅读模式
1金钱
void main()
{
          P0 = 0xFF;
        while(1)
        {
                Keys_Scan();
                if (keyNo == 0xFF) {delay_ms(10);continue;}
                P0 = SEG_CODE[keyNo];Beep();
                while (Keys_Scan(), keyNo != 0xFF);
         }

}
void Keys_Scan()
{
        P1=0x0F;delay_ms(1);
//        if(P1=0x0F){keyNo=0xFF;return;}        //无按键按下时提前返回
        //按键后00001111将变成0000XXXX,X中1个为0,3个为1
        //下面判断按键发生在0~3列中的那一列
        switch(P1)
        {
                case 0x0E:keyNo = 0; break;
                case 0x0D:keyNo = 1; break;
                case 0x0B:keyNo = 2; break;
                case 0x07:keyNo = 3; break;
                default: keyNo = 0xFF;return;
         }
         P1 = 0xF0; delay_ms(1);
         //判断按键发生在哪一行并且加上列号确定准确的位置
         switch (P1)
         {
                 case 0xE0: keyNo +=0; break;
                case 0xD0: keyNo +=4; break;
                case 0xB0: keyNo +=8; break;
                case 0x70: keyNo +=12;break;
                default:  keyNo = 0xFF;
         }

               
}


QQ截图20160517111205.jpg

最佳答案

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

你有仔细看if(P1=0x0F){keyNo=0xFF;return;}这一句吗?你有学过C吗?if(P1=0x0F)是什么意思? if(P1=0x0F)永远是成立的,所以永远不会执行这之后的代码
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

188

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2280
金钱
2280
注册时间
2013-12-16
在线时间
448 小时
发表于 2016-5-17 11:12:57 | 显示全部楼层
你有仔细看if(P1=0x0F){keyNo=0xFF;return;}这一句吗?你有学过C吗?if(P1=0x0F)是什么意思?
if(P1=0x0F)永远是成立的,所以永远不会执行这之后的代码
回复

使用道具 举报

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2015-7-25
在线时间
9 小时
 楼主| 发表于 2016-5-17 11:16:07 | 显示全部楼层
将这句话去掉之后,按键扫面程序就能成功运行,我自己推测了一下,应该是Keys_Scan()每次运行就在if(P1=0x0F){keyNo=0xFF;return;}这句话提前返回了,不知道我说的对不对,求大神指点一下。另外,如果要加入这个功能,应该如何修改呢?
回复

使用道具 举报

7

主题

188

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2280
金钱
2280
注册时间
2013-12-16
在线时间
448 小时
发表于 2016-5-17 11:47:54 | 显示全部楼层
你要认真学习呀,我都这么说了,你也还看不出问题!非要最终明确的答案不可吗?这样你很难提高的.按照下面修改就可以了.
if(P1==0x0F){keyNo=0xFF;return;}
回复

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-4-6
在线时间
4 小时
发表于 2016-5-17 13:37:20 | 显示全部楼层
4楼说得对呀,c语言判断相等是==,=是赋值
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6661
金钱
6661
注册时间
2016-5-29
在线时间
909 小时
发表于 2016-5-29 13:49:07 | 显示全部楼层
C语言里面的毛病.条件语句里 可以使用赋值符号=,导致条件语句相等要使用==,实际上可以设计为条件语句里面不可以赋值就行了.那样的话不用==符号了.可惜了,C语言的设计者没有这么想.
回复

使用道具 举报

2

主题

1436

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2209
金钱
2209
注册时间
2010-12-16
在线时间
190 小时
发表于 2016-5-29 22:46:30 | 显示全部楼层
操作系统 发表于 2016-5-29 13:49
C语言里面的毛病.条件语句里 可以使用赋值符号=,导致条件语句相等要使用==,实际上可以设计为条件语句里面不 ...

当年设计的时候还要考虑编译效率和统一性 , 能有个 C 就不错了 , 加个关键字都要详细讨论 , 别说加这种嵌套性规则了 .
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复

使用道具 举报

0

主题

79

帖子

0

精华

高级会员

Rank: 4

积分
726
金钱
726
注册时间
2016-5-27
在线时间
91 小时
发表于 2016-6-19 19:51:08 | 显示全部楼层
一般来说要养成 条件判断语句中  这样写   if(0xff==P1) 即使出现写成 if(0xff=P1) 编译时就过不了,以便及时发现错误。
回复

使用道具 举报

5

主题

168

帖子

0

精华

高级会员

Rank: 4

积分
780
金钱
780
注册时间
2016-5-28
在线时间
64 小时
发表于 2016-6-21 19:37:34 | 显示全部楼层
这个编译器应该有警告的,楼主没有注意吧
回复

使用道具 举报

2

主题

171

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3792
金钱
3792
注册时间
2016-6-26
在线时间
276 小时
发表于 2016-6-26 13:34:34 | 显示全部楼层
应该是if(P1==0x0F) ,不是等号。
回复

使用道具 举报

8

主题

533

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2831
金钱
2831
注册时间
2016-5-13
在线时间
179 小时
发表于 2016-6-27 16:03:25 | 显示全部楼层
这货“ if(P1=0x0F)”   =   这货“if(1)”
虽然不明白你们在说什么,但感觉很厉害的样子。
回复

使用道具 举报

5

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-4-21
在线时间
21 小时
发表于 2016-7-19 22:35:08 | 显示全部楼层
这样编译会有警告的 不要忽略编译警告哦
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 16:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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