首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

有关问题请问

2012-03-09 
问题请教#includereg52.h#includeintrins.hsbit dulaP2^6sbit welaP2^7#define uncharunsigned ch

问题请教
#include<reg52.h>
#include<intrins.h>
sbit dula=P2^6;
sbit wela=P2^7;
#define uncharunsigned char
int num=432;
unchar aa,tt1,tt2,tt3,ge,shi,bai,flag;
unchar table[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
};
void display(unchar a,unchar b,unchar c,unchar d,unchar e,unchar f);
void delayms(int z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init()
{
TH1=(65535-50000)/256;
TL1=(65535-50000)%256;

EA=1;
ET1=1;
TR1=1;
TMOD=0X10;

}
void main()
{
while(1)
{
bai=num/100;
shi=num%100/10;
ge=num%10;
display(7,6,5,bai,shi,ge);

}
}


void temer1()interrupt3
{

TH1=(65535-50000)/256;
TL1=(65535-50000)%256;
tt3++;
if(tt3==2)
{
tt3=0;
num--;
}
if(num==398)
TR1=0;


}


void display(unchar a,unchar b,unchar c,unchar bai,unchar shi,unchar ge)
{
dula=1;
P0=table[a];
dula=0;
P0=0Xff;

wela=1;
P0=0Xfe;
wela=0;
delayms(1);

dula=1;
P0=table[b];
dula=0;
P0=0Xff;

wela=1;
P0=0Xfd;
wela=0;
delayms(1);


dula=1;
P0=table[c];
dula=0;
P0=0XFF;

wela=1;
P0=0Xfb;
wela=0;
delayms(1);

dula=1;
P0=table[bai];
dula=0;
P0=0Xff;

wela=1;
P0=0Xf7;
wela=0;
delayms(1);

dula=1;
P0=table[shi];
dula=0;
P0=0Xff;

wela=1;
P0=0Xef;
wela=0;
delayms(1);


dula=1;
P0=table[ge];
dula=0;
P0=0XFF;

wela=1;
P0=0Xdf;
wela=0;
delayms(1);
}

这个程序是像让数码管从765432减到765398,可是数码管只显示765432,一直没变化

[解决办法]
从逻辑上看,应该是你用的编译器不会初始化全局变量导致tt3的初值不是0

main进来第一句把变量都初始化一下

然后timer中断里面的if(tt3==2)改成if(tt3>=2)会比较安全

热点排行