我写了个LED灯显示二进制,对应数码管的十进制数。可是注入到51上,只显示数码管的000,LED不显示,就是说只显示初始值。我怀疑没进入中断计时if中,但是我调试表明进入过了,可是为什么在开发板没有显示呢?
#include
unsigned char jishu,ge,shi,bai,a,b;
***it wei=P2^7;
***it duan=P2^6;
unsigned char code array[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //定义数码管0~9数模
void init(); //初始化函数
void dis(unsigned char w,unsigned char e,unsigned char r,unsigned char deng); //显示函数
void de(unsigned char x); //延时函数
void main()
{
init();
while(1)
{
if(jishu==20) //递增
{
a=a--;
b=255-a;
bai=b/100;
shi=b%100/10;
ge=b%10;
jishu=0;
}
dis(bai,shi,ge,a);
}
}
void init()
{
a=255;
jishu=0;
TMOD=0x01; //定时器中断初始化
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void dis(unsigned char w,unsigned char e,unsigned char r,unsigned char deng)
{
duan=1; //第一位数码管
P0=array[w];
duan=0;
P0=0xff;
wei=1;
P0=0xfe;
wei=0;
de(1);
duan=1; //第二位数码管
P0=array[e];
duan=0;
P0=0xff;
wei=1;
P0=0xfd;
wei=0;
de(1);
duan=1; //第三位数码管
P0=array[r];
duan=0;
P0=0xff;
wei=1;
P0=0xfb;
wei=0;
de(1);
P1=deng;
}
void de(unsigned char x)
{
unsigned char q,p;
for(p=x;p>0;p--)
for(q=0;q<124;q++);
}
void timer() interrupt 1 //定时器
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
jishu=jishu++;
}
|