你加个延时程序在P3=0xFF下面,不然你刚全灭了,就跳到P3=tab[cnta];在一个时钟周期内,肉眼是看不到的,要延时几秒吧
#include
unsigned char code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char code graph[]={0x30,0x48,0x44,0x22,0x44,0x48,0x30,0x00};
unsigned char cnta;
unsigned int counter = 0;
void main(void)
{
TMOD = 0x10;
TR1 = 1;
ET1 = 1;
EA = 1;
while(1);
}
void t0(void) interrupt 3
{
TH1 = 0xFC;
TL1 = 0x67;
P3 = 0xFF;//全灭
P0 = graph[cnta];
P3 = tab[cnta];
cnta++;
if(8 == cnta) cnta = 0;
}
很长时间不看了。大概看了下,感觉你这个程序有问题,看你程序的“ P3 = 0xFF;
}
P3=tab[cnta];”这个P3刚赋过值又赋值会覆盖之前的值,所以。。。。
if(200 == counter)
{
counter = 0;
counter++;
P3 = 0xFF;//全灭 ,但是没效果,为什么?
}
P3=tab[cnta];
P0=graph[cnta];
P3=tab[cnta];
P0=graph[cnta];
cnta++;
if(8==cnta)
{
cnta=0;
}
上边这几句 也就是说当 counter==200的时候会执行 P3 = 0xFF;
但是counter==200 这个执行的太快了,而且执行P3 = 0xFF;后又立即执行了P3=tab[cnta];
人的眼睛是看不出来的 改成下边的试试。
if( counter>200)
{
P3 = 0xFF;//全灭 ,但是没效果,为什么?
}
else if(( counter>400){
counter = 0;
}
else
{
P3=tab[cnta];
P0=graph[cnta];
P3=tab[cnta];
P0=graph[cnta];
cnta++;
if(8==cnta)
{
cnta=0;
}
}
这只是我的想法改成的程序,不排斥编译有问题,但是你的问题就是
counter==200 这个执行的太快了,而且执行P3 = 0xFF;后又立即执行了P3=tab[cnta];
人的眼睛是看不出来的 造成的