打印

这样做为什么进不到if(key4==0)内?

[复制链接]
4039|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yuanquan12345|  楼主 | 2010-11-8 10:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
case 3:                                //按动3次,shi
                        Chinese_disp_1(4,0,xtiao);
                        Chinese_disp_1(4,16,xshi);
                            if(key4==0)//                               {
                                    delay(9);//延时,用于消抖动
                                    if(key4==0)//延时后再次确认按键按下
                                    {
                                         buzzer=1;
                                         delay(40);
                                         buzzer=0;//蜂鸣器短鸣
                                         while(!key4);    //检                                          {
                                             write_ds(1,miao);
                                            write_ds(3,fen);    //分
                                            write_ds(5,shi);    //时
                                         }
                                     }
                                 }
                             else

相关帖子

沙发
yuanquan12345|  楼主 | 2010-11-8 10:29 | 只看该作者
我的目的是:当功能键按三次,也就是调整完小时时,如果此时按下key4键,就将此时的时,分,秒,存到887的闹钟地址,如果没按下key4键,就将即时值存到时钟的地址。
不知道我说清楚了没有。
请大家指点。

使用特权

评论回复
板凳
yuanquan12345|  楼主 | 2010-11-8 10:32 | 只看该作者
现在程序能编译,可是下载以后,按key4键不起作用。

使用特权

评论回复
地板
ayb_ice| | 2010-11-8 10:39 | 只看该作者
不起用,首先考虑程序问题

使用特权

评论回复
5
自然的天逸| | 2010-11-8 10:40 | 只看该作者
无图 无真相

使用特权

评论回复
6
yuanquan12345|  楼主 | 2010-11-8 11:11 | 只看该作者
我是新手,一点小问题就把我给难住了。

使用特权

评论回复
7
roy13543826592| | 2010-11-8 11:57 | 只看该作者
case 3:                                //按动3次,shi
                        Chinese_disp_1(4,0,xtiao);
                        Chinese_disp_1(4,16,xshi);
                            if(key4==0)//    ...
yuanquan12345 发表于 2010-11-8 10:16

/***************/
你这能通过编译??
都把花括号给注释掉了。。。

使用特权

评论回复
8
ejack| | 2010-11-8 12:56 | 只看该作者
7L请看清楚。那是延时消抖……

不过贴出来的这部分括号确实不配对……

使用特权

评论回复
9
sjnh| | 2010-11-8 14:04 | 只看该作者
你程序的结构是循环的? 你要监测key4按下,必须是有循环的地方, 按你的程序结构, switch-case部分应该是循环的,

使用特权

评论回复
10
yuanquan12345|  楼主 | 2010-11-8 14:06 | 只看该作者
为全部贴出来,我就想说明这个问题。

使用特权

评论回复
11
ElderFox| | 2010-11-8 16:09 | 只看该作者
个人认为key4变量定义有问题,你不妨在key4定义的时候家关键字volatile。

使用特权

评论回复
12
hj850920| | 2010-11-8 16:41 | 只看该作者
赞同11楼的,你试试

使用特权

评论回复
13
yuanquan12345|  楼主 | 2010-11-8 17:33 | 只看该作者
其他键都是这样定义的,而这个键这样定义在其他地方用没问题,其他键也没问题。
谢谢大家。

使用特权

评论回复
14
ji_dan| | 2010-11-8 20:34 | 只看该作者
同意11楼的~~

使用特权

评论回复
15
Adu0227| | 2010-11-8 22:33 | 只看该作者
同意7楼,括号注释掉了!

使用特权

评论回复
16
andy_huang| | 2010-11-9 00:09 | 只看该作者
你括号注释掉了

使用特权

评论回复
17
有意思| | 2010-11-9 00:24 | 只看该作者
if (!(Key & (1<<4))) {
........
}

使用特权

评论回复
18
yuanquan12345|  楼主 | 2010-11-9 09:17 | 只看该作者
向上复制的时候因行太长,有点乱,编译没问题。与{}没关系。
谢谢大家。
请问有意思:if (!(Key & (1<<4))) 这一句是什么意思,我是新手。

使用特权

评论回复
19
123jj| | 2010-11-9 10:04 | 只看该作者
1<<4   // 1向左移4个bit位,即 00000001b<<4  =  00010000b  = 0x10

if (!(Key & (1<<4))) 这一句话的意思是:  if (!(Key & 0x10 ))

使用特权

评论回复
20
roy13543826592| | 2010-11-9 11:08 | 只看该作者
不是括号问题,就同意12楼说法.可能问题出在其他地方,你在 case 3: 中检测 key4的话.要cup每次的大循环都要能进入 case 3: .楼主可以在 case 3: 中放一段小程序,例如让led闪烁.看看效果,就知道是不是每次都进入了case 3: 了.如果不是.则考虑在程序的其他地方是不是有把 switch(变量) 中的变量值给改变了.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

75

主题

1155

帖子

3

粉丝