初学单片机,麻烦帮看下程序,问题注释在程序上了。

#include <reg52.H>
#include<intrins.h>
//心形显示
unsigned char code tabP0[]={0x30,0x48,0x44,0x22,0x44,0x48,0x30,0x00};
unsigned char code tabP2[]={0x7F,0xBF,0x0DF,0x0EF,0x0F7,0x0FB,0x0FD,0x0FE};
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void main()
{
int i;
while(1)
{
for(i=0;i<8;i++)
{
P0=0; // 为什么这里要有个P0=0,不是很理解。
P2=tabP2[i];
_nop_();
_nop_();
_nop_();
P0=tabP0[i];
_nop_();
_nop_();
_nop_();
}
}
}

执行循环时,每一行对应一个值,tabP2[1]对应tabP0[1];动态扫描。
当一次循环结束后,如不将P0清0,那么当第二次循环开始后,P0还是上一次的值,执行到P2=tabP2[i]后,就会出错了,就会出现tabP2[2]对应tabP0[1],乱套了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-15
P0=0意思是使数码管初始的显示,使之全部熄灭,就相当于数码管的初使化,延时一下再显示你所需要显示的数字。