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

[复制链接]
5536|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 | 显示全部楼层
不起用,首先考虑程序问题
自然的天逸 发表于 2010-11-8 10:40 | 显示全部楼层
无图 无真相
 楼主| yuanquan12345 发表于 2010-11-8 11:11 | 显示全部楼层
我是新手,一点小问题就把我给难住了。
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

/***************/
你这能通过编译??
都把花括号给注释掉了。。。
ejack 发表于 2010-11-8 12:56 | 显示全部楼层
7L请看清楚。那是延时消抖……

不过贴出来的这部分括号确实不配对……
sjnh 发表于 2010-11-8 14:04 | 显示全部楼层
你程序的结构是循环的? 你要监测key4按下,必须是有循环的地方, 按你的程序结构, switch-case部分应该是循环的,
 楼主| yuanquan12345 发表于 2010-11-8 14:06 | 显示全部楼层
为全部贴出来,我就想说明这个问题。
ElderFox 发表于 2010-11-8 16:09 | 显示全部楼层
个人认为key4变量定义有问题,你不妨在key4定义的时候家关键字volatile。
hj850920 发表于 2010-11-8 16:41 | 显示全部楼层
赞同11楼的,你试试
 楼主| yuanquan12345 发表于 2010-11-8 17:33 | 显示全部楼层
其他键都是这样定义的,而这个键这样定义在其他地方用没问题,其他键也没问题。
谢谢大家。
ji_dan 发表于 2010-11-8 20:34 | 显示全部楼层
同意11楼的~~
Adu0227 发表于 2010-11-8 22:33 | 显示全部楼层
同意7楼,括号注释掉了!
andy_huang 发表于 2010-11-9 00:09 | 显示全部楼层
你括号注释掉了
有意思 发表于 2010-11-9 00:24 | 显示全部楼层
if (!(Key & (1<<4))) {
........
}
 楼主| yuanquan12345 发表于 2010-11-9 09:17 | 显示全部楼层
向上复制的时候因行太长,有点乱,编译没问题。与{}没关系。
谢谢大家。
请问有意思:if (!(Key & (1<<4))) 这一句是什么意思,我是新手。
123jj 发表于 2010-11-9 10:04 | 显示全部楼层
1<<4   // 1向左移4个bit位,即 00000001b<<4  =  00010000b  = 0x10

if (!(Key & (1<<4))) 这一句话的意思是:  if (!(Key & 0x10 ))
roy13543826592 发表于 2010-11-9 11:08 | 显示全部楼层
不是括号问题,就同意12楼说法.可能问题出在其他地方,你在 case 3: 中检测 key4的话.要cup每次的大循环都要能进入 case 3: .楼主可以在 case 3: 中放一段小程序,例如让led闪烁.看看效果,就知道是不是每次都进入了case 3: 了.如果不是.则考虑在程序的其他地方是不是有把 switch(变量) 中的变量值给改变了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

75

主题

1155

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部