#include <reg52.h> //?·????
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++; //?????ó
}
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不建议你用递归调用
------其他解决方案--------------------
谢谢版主大大,看了你的博客,我也是专科生,刚好处于大二的迷茫期,,,看了你的博客挺受鼓励的