单片机一个简单的程序,不会。。。。

#include<reg52.h>
#include<intrins.h>
char code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
char i,num;
void main()
{
num=0;
P2=0xfe;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
if(i==20)
{
num++;
if(num==9)
num=0;
P0=table[num];
P2=_cror_(P2,1);
}
}

}
void zd() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
}
总共是8个数码管,P2口为位选,P0为段选,编码表就是上面那个table,数码管从左至右的P2口为p2.0到p2.7,共阳极的,为什么下载到单片机里,数码管不是从左至右一次显示0,1,2,3,4,5、、、、、显示乱起八糟的!

位选错误,i没清零。初始化的时候P2=0x01,移位的时候P2=_crol_(P2,1)。另初始化的时候第一个数码管应该显示0,所以加上P0=0xc0。然后完整的程序如下:
#include<reg52.h>
#include<intrins.h>
char code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
char i,num;
void main()
{
num=0;
P2=0x01; //
P0=0xc0; // 初始化
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
if(i==20)
{
i=0; //要清零的
num++;
if(num==9)
num=0;
P0=table[num];
P2=_crol_(P2,1); //不是=_cror_
}
}

}
void zd() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-11
变量i没有给初值,所以i++有可能很久都加不到20,而且你的while(1)循环中if(i==20)后没有再把i给清0,所以、、
第2个回答  2012-05-11
把if中的i值该大一点吧,这样中断的太快,num变化太快了,看着就是乱的
第3个回答  2012-05-10
程序有问题

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网