采用595驱动4位数码管程序,本想把显示用74hc595驱动void disp();放在中断中运行,但后来调试时发现,这在主程序中AAA运行正常,在中断中BBB运行不正常,相当于没运行的样子,中断中红绿灯闪烁正常.以下是修改后简单的只显示一位一个数也是一样.不知是何原因?本人菜鸟一只.
unsigned int us
sbit MOSIO =P3^4; //串行数据线
sbit R_CLK =P3^5; //数据并行输出控制
sbit S_CLK =P3^6; //串行时钟线
sbit led=P1^0; //绿灯
sbit led1=P1^1; //红灯
bit led2 ;
void HC595in(unsigned int disp)
{
unsigned char i;
S_CLK=0;
R_CLK=0;
for(i=0;i<8;i++)
{
if((disp<<i)&0x80) MOSIO=1;
else MOSIO=0;
S_CLK=0;
NOP();
NOP();
S_CLK=1;
}
}
void disp()
{
HC595in(0x3F);
HC595in(0xef);/
R_CLK=0; //
NOP();
NOP();
R_CLK=1;
}
void time (void) interrupt 1 using 1
{ TR0=0;
ET0=0;
us++;
if(us>=1550)
{
led1=~led1; //红灯闪
//disp(); /////BBB放这里不正常
led=~led; //绿灯闪
led2=1;
us=0;
}
TL0 =tl0;
TH0 =th0;
ET0=1;
TR0=1;
}
main()
{
TR0=0;
TL0 =tl0;
TH0 =th0;
TMOD = 0x11;
EA =1;
ET0=1;
TR0=1;
key1=0;
key=1
while(1)
{
if(key2==1)
{
//disp(); //AAA放这里正常
key2=0;
}
}
}
unsigned int us
sbit MOSIO =P3^4; //串行数据线
sbit R_CLK =P3^5; //数据并行输出控制
sbit S_CLK =P3^6; //串行时钟线
sbit led=P1^0; //绿灯
sbit led1=P1^1; //红灯
bit led2 ;
void HC595in(unsigned int disp)
{
unsigned char i;
S_CLK=0;
R_CLK=0;
for(i=0;i<8;i++)
{
if((disp<<i)&0x80) MOSIO=1;
else MOSIO=0;
S_CLK=0;
NOP();
NOP();
S_CLK=1;
}
}
void disp()
{
HC595in(0x3F);
HC595in(0xef);/
R_CLK=0; //
NOP();
NOP();
R_CLK=1;
}
void time (void) interrupt 1 using 1
{ TR0=0;
ET0=0;
us++;
if(us>=1550)
{
led1=~led1; //红灯闪
//disp(); /////BBB放这里不正常
led=~led; //绿灯闪
led2=1;
us=0;
}
TL0 =tl0;
TH0 =th0;
ET0=1;
TR0=1;
}
main()
{
TR0=0;
TL0 =tl0;
TH0 =th0;
TMOD = 0x11;
EA =1;
ET0=1;
TR0=1;
key1=0;
key=1
while(1)
{
if(key2==1)
{
//disp(); //AAA放这里正常
key2=0;
}
}
}
