stc89c52 P1 I/O口函数递归控制亮灯的有关问题
stc89c52 P1 I/O口函数递归控制亮灯的问题#include reg52.h //í·???tvoid sleep(void)void led(int * a
stc89c52 P1 I/O口函数递归控制亮灯的问题
#include <reg52.h> //í·???t
void sleep(void);
void led(int * a,int b);
void main ()
{
int a[8] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
led(a,0);
}
void sleep(void)
{
int i = 0;
//while (i++ < 10000) ; ó??ˉ?°
while (i < 20000) i++; //ó??ˉoó
}
void led(int * a,int b)
{
P1 = a[b++];
sleep();
if (b < 8) led(a,b);
P1 = a[--b];
sleep();
}
想不明白没使用循环啊,为什么上载后会自动循环,,,
[最优解释]单片机平台编译器通常为默认函数为不可重入的
因为重入的代价很高(相对单片机有限的资源来说)
如果非要这么干,须加关键字进行说明
[其他解释]跟你用的编译器有关系 你应该是KEIL吧 这个用C写 它是不断的循环执行MAIN函数的 你可以只在MAIN里面调用sleep 然后单步调试 你就可以看出效果的 另外 C51/52不建议你用递归调用
[其他解释]谢谢版主大大,看了你的博客,我也是专科生,刚好处于大二的迷茫期,,,看了你的博客挺受鼓励的