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