| 
 
| 我用的是周立功公司的easyarm2114,ADS1.2,EasyJTAG.<br />参考板子的程序,我稍微改动拉一下,发现有个问题.这个问题我不知道是C语言规则的问题,还是其他问题,大伙看看.<br />我主程序实现的目的是当key1键按下是,led亮一下后熄灭.<br />我的程序如下: <br />void Delay(uint8 x)<br />{ uint8 i;<br />  for(;x>0;x--)<br />  for(i=0;i<50000;i++);<br />}<br />void Waitkey(void)<br />{  uint32 i;  <br />   while(1)<br />     {  while((IO0PIN&key1)!=0);         //等待key1键按下,按下为低电平<br />       <br />            for(i=0;i<50000;i++);                    //延迟去抖<br />        if((IO0PIN&key1)==0) break;        //若按键有效,跳出while循环<br />     <br />     }<br />     while((IO0PIN&key1)==0);            //等待key1键松开<br />}<br />int main()<br />{     <br />   PINSEL0=0x00000000;<br />   PINSEL1=0x00000000;<br />   IO0SET=ledcon;<br />   IO0DIR=ledcon;<br />   <br />   <br />   InitUART0(115200);<br />   while(1)<br />   { <br />     Waitkey();<br />     IO0CLR=ledcon;<br />  for(i=0;i<500000;i++);<br />    // Delay(10);<br />     IO0SET=ledcon;<br />   // Delay(10);<br />  for(i=0;i<500000;i++);<br />  <br />    }<br />return(0);<br />}<br />我在main()函数的while中用for(i=0;i<500000;i++);程序没问题,运行正常.<br />但如果我在while中调用Delay(10);实现延迟,程序运行是没有问题,但按下key1键后,led一直亮,不熄灭.我单步执行程序是执行到IO0CLR=ledcon;还是正常的,但接下拉就跳不出Delay(10).<br />是不是我调用函数有问题啊,我很是不明白.<br />希望大家给些建议 | 
 |