C语言调用一个函数无法跳出,死循环

这是主函数:main(){//Init_lcd1602();Init_timer();//Wlcd_string(0x80,word1);//Wlcd_string(0x... 这是主函数:
main()
{
// Init_lcd1602();
Init_timer();

// Wlcd_string(0x80,word1);
// Wlcd_string(0xc0,word2);
while(1)
{
// Wlcd_string(0xc0,word2);
keyscan(); 问题是调用keyscan()函数后还会继续跳回这一句,循环调用这个函数,不往下走,这是怎么回事?请大侠们给指导一下。
Wlcd_cmd(0xc0);
Wlcd_data(2 + '0');
}
}

这是被调用的子函数,单独源文件
void keyscan (void)
{
P2 = 0xf0;
if((P2&0xf0) != 0xf0)
{
switch (P2)
{
case 0xe0:
row = 1;
break;
case 0xd0:
row = 2;
break;
case 0xb0:
row = 3;
break;
case 0x70:
row = 4;
break;
default:
break;
}
}
for (i=1000;i>0;i--);

P2 = 0x0f;
if((P2&0x0f) != 0x0f)
{
switch (P2)
{
case 0x07:
tier = 1;
break;
case 0x0b:
tier = 2;
break;
case 0x0d:
tier = 3;
break;
case 0x0e:
tier = 4;
break;
default:
break;

}
}
Key_value = 4*(tier-1)+row;
}
可能是我没说太清楚,现在的问题不是while(1)死循环的问题,我就是要这个死循环。
问题是main函数里调用keyscan()函数后,不继续往下走,而是重新调用keyscan(),这个死循环不是我想要的,也想知道问题在哪?

不过我自己已经解决了。就是把Key_value = 4*(tier-1)+row;这句提到它上面那个大括号以内。原因大家可以探讨一下,我暂时还没想通。
展开
 我来答
不潇撒的渔
2012-11-14
知道答主
回答量:17
采纳率:0%
帮助的人:5.3万
展开全部
程序没看懂,不过是不是for (i=1000;i>0;i--);这句执行时间过长,你误以为死循环了?
还有,即使往下走,你的While(1)还是很有可能死循环的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
o梦影风铃
2012-11-14 · TA获得超过327个赞
知道小有建树答主
回答量:185
采纳率:0%
帮助的人:48.5万
展开全部
 
int keyscan() //扫描法
{
unsigned char k k_temp;
P1=0xf0; //低位置0,准备查询按键
k=P1; //取得当前P1口状态
if(k!=0xf0) //如果有变化则表示有按键按下
{
delay(10); //延迟 消抖
k_temp=p1;
if(k==k_temp) //确实有键按下
{
k=0xfe;
do //循环扫描每一行
{
p1=k;
if(k!=p1)
{
switch(P1) //判断按键 并返回键值
{
//第1行
case 0x7e:{return 0; break;}
case 0xbe:{return 1; break;}
case 0xde:{return 2; break;}
case 0xee:{return 3; break;}
//第2行
case 0x7d:{return 4; break;}
case 0xbd:{return 5; break;}
case 0xdd:{return 6; break;}
case 0xed:{return 7; break;}
//第3行
case 0x7b:{return 8; break;}
case 0xbb:{return 9; break;}
case 0xdb:{return 10;break;}
case 0xeb:{return 11;break;}
//第4行
case 0x77:{return 12;break;}
case 0xb7:{return 13;break;}
case 0xd7:{return 14;break;}
case 0xe7:{return 15;break;}
}
}
k=_crol_(k,1); //移位 进入下一行扫描
}
while(k!=0xef); //超过列范围 退出扫描
}
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
foxVSgod
2012-11-14 · 超过23用户采纳过TA的回答
知道答主
回答量:105
采纳率:0%
帮助的人:39.9万
展开全部
看代码应该不会不往下走,你是怎么确定他没有继续往下走的 ?
追问
设断点
追答
可是代码没有循环啊,唯一的可能就是代码出问题了,只是错误消息你没有看到,tier,row,你有没有初始化,他们在default会是什么情况
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式