C51编程:sos!!大虾们请过来
下面是我的vfd的相关程序清单,中断程序只要放上,不管开不开中断,都显示不正常,而
不加时正常,是我环境设置问题?该怎么设?或是什么其他问题?
vfd.c如下:
void send(uchar x)
{uchar j;
for (j=8;j>0;j--)
{DIS_DT=(bit)(x&0x01);
DIS_CLK=1;
x=x>>1;
DIS_CLK=0;
}
}
void display2(p,n )
//updata specific address
uchar *p,n;
{uchar i,send0;
DIS_STB=0;
send0=0x40;
//command2
send(send0);
DIS_STB=1;
for (i=0;i<3;i++)
{DIS_STB=0;
send0=0xc0+3*n+i;
//command3
send(send0);
send0=p[i];
send(send0);
DIS_STB=1;
}
}
void display1(p)
uchar p[12][3];
{ uchar commond[]={0x0b,0x40,0xc0,0x8f};
uchar i,j,send0;
void send(uchar x); //send 36data to vfd
DIS_STB=1;
DIS_DT=1;
DIS_CLK=1;
for (i=0;i<2;i++)
{DIS_STB=1;
send0=commond[i];
DIS_STB=0;
DIS_CLK=0;
send(send0);
DIS_STB=0;
}
for (i=0;i<12;i++)
for (j=0;j<3;j++)
{send0=p[i][j];
send(send0);
}
DIS_STB=1;
send0=commond[3];
DIS_STB=0;
send(send0);
DIS_STB=1;
}
define.c如下:
#include<reg51.h>
typedef unsigned char uchar;
/****define special bit for I/O*****/
sbit DIS_DT=P1^2; /**data**/
sbit DIS_CLK=P1^1; /**CLK**/
sbit DIS_STB=P1^0;
sbit WB0=P3^2;
uchar data *data mab;
主程序3008.c如下:
#include<define.c>
#include<vfd.c>
uchar data *data mab;
void main(void)
{ uchar code vfddis[12][3]={{00,00,00},{00,00,00},{00,00,00},{00,00,00},
{0x8c,0xc4,00},{0x20,0x10,00},
{0x0c,0x87,00},{0x0c,0xc3,00},
{0x88,0x43,00},{0x84,0xc3,00},{0x84,0xc7,00},
{0x0c,0x40,00}};
uchar p[3];
uchar i;
display1(vfddis);
EA=1;
IT0=1;
ET0=1;
for(i=0;i<3;i++){p[i]=vfddis[4][i];}
display2(p,4); //send 1data to vfd
// if(mab[0]==mab[1]!=0)
// if(mab[2]==~mab[3])
// switch(mab[2])
// {case(0x01): for(i=0;i<3;i++){p[i]=vfddis[4][i];}
// display2(p,8);
// break;
// case(0x02): for(i=0;i<3;i++){p[i]=vfddis[4][i];}
// display2(p,7);
// break;
// case(0x03): for(i=0;i<3;i++){p[i]=vfddis[4][i];}
// display2(p,6);
// break;
// case(0x04): for(i=0;i<3;i++){p[i]=vfddis[4][i];}
// display2(p,5);
// break;
// case(0x05): for(i=0;i<3;i++){p[i]=vfddis[4][i];}display2(p,6);
// break;
// case(0x06): for(i=0;i<3;i++){p[i]=vfddis[4][i];}display2(p,7);
// break;
// case(0x07): for(i=0;i<3;i++){p[i]=vfddis[4][i];}display2(p,8);
// break;
// case(0x08): for(i=0;i<3;i++){p[i]=vfddis[4][i];}display2(p,9);
// break;
// case(0x09): for(i=0;i<3;i++){p[i]=vfddis[4][i];}display2(p,10);
// break;
// case(0x0a): for(i=0;i<3;i++){p[i]=vfddis[4][i];}display2(p,11);
// break;
// case(0x0b): for(i=0;i<3;i++){p[i]=vfddis[4][i];}display2(p,10);
// break;
// case(0x0c): for(i=0;i<3;i++){p[i]=vfddis[4][i];}display2(p,9);
// break;
// case(0x0d): for(i=0;i<3;i++){p[i]=vfddis[4][i];}display2(p,8);
// break;
// case(0x0e): for(i=0;i<3;i++){p[i]=vfddis[4][i];}display2(p,7);
// break;
// case(0x0f): for(i=0;i<3;i++){p[i]=vfddis[4][i];}display2(p,6);
// break;
// case(0x11): for(i=0;i<3;i++){p[i]=vfddis[4][i];}display2(p,5);
// break;
// case(0x12): for(i=0;i<3;i++){p[i]=vfddis[4][i];}display2(p,6);
// break;
// case(0x13): for(i=0;i<3;i++){p[i]=vfddis[4][i];}display2(p,7);
// break;
// case(0x14): for(i=0;i<3;i++){p[i]=vfddis[4][i];}display2(p,8);
// break;
// case(0x15): for(i=0;i<3;i++){p[i]=vfddis[4][i];}display2(p,9);
// break;
// case(0x16): for(i=0;i<3;i++){p[i]=vfddis[4][i];}//display2(p,10);
// break;
// case(0x17): for(i=0;i<3;i++){p[i]=vfddis[4][i];}//display2(p,11);
// break;
// case(0x18): for(i=0;i<3;i++){p[i]=vfddis[4][i];}//display2(p,10);
// break;
// case(0x19): for(i=0;i<3;i++){p[i]=vfddis[4][i];}//display2(p,9);
// break;
// case(0x1a): for(i=0;i<3;i++){p[i]=vfddis[4][i];}//display2(p,8);
// break;
// case(0x1b): for(i=0;i<3;i++){p[i]=vfddis[4][i];}//display2(p,7);
// break;
// case(0x1c): for(i=0;i<3;i++){p[i]=vfddis[4][i];}//display2(p,6);
/// break;
// case(0x1d): for(i=0;i<3;i++){p[i]=vfddis[4][i];}//display2(p,5);
// break;
// case(0x1e): for(i=0;i<3;i++){p[i]=vfddis[4][i];}//display2(p,6);
// break;
// case(0x1f): for(i=0;i<3;i++){p[i]=vfddis[4][i];}//display2(p,7);
// break;
// case(0x20): for(i=0;i<3;i++){p[i]=vfddis[4][i];}//display2(p,8);
// break;
// case(0x60): for(i=0;i<3;i++){p[i]=vfddis[4][i];}//display2(p,9);
// break;
// case(0xa0): for(i=0;i<3;i++){p[i]=vfddis[4][i];}//display2(p,10);
/// break;
/// case(0xe0): for(i=0;i<3;i++){p[i]=vfddis[4][i];}//display2(p,11);
// break;
// default: break;
// }
}
//中断/*******for remo scan**********/
/*void scan1()interrupt 0 //using 1
{ uchar i,j,k,maa[3]={0};
EA=0; //prohibit interrupt
for(i=3;i>0;i--)
{ for(j=0xf9;j>0&&WB0;j--){;}
} //delay 4.5ms
if(WB0)
{while(WB0); //wait low lever
for(i=3;i>0;i--)
{ for(j=0xf9;j>0&&!WB0;j--){;}
} //delay 4.5ms
if(!WB0)
{while(!WB0); //wait data
for(k=0;k<32;k++)
{j=k/8;
for(i=90;i>0&&WB0;i--){;} //delay 0.5ms
while(WB0);
for(i=94;i>0&&!WB0;i--){;} //delay 0.58ms
if(!WB0){maa[j]<<=1;
maa[j]+=1;
}
else {maa[j]<<=1;
for(i=90;i>0&&!WB0;i--){;} //delay 0.5ms
}
}
//for(j=3;j>=0;j--)mab[j]=maa[j];
mab=maa;
EA=1;
}
}
}
*/
发表时间:2002年5月31日15:34:00