51单片机 8*8点阵 LED灯全灭 没有效果

2025-01-24 06:40:23
推荐回答(4个)
回答1:

你加个延时程序在P3=0xFF下面,不然你刚全灭了,就跳到P3=tab[cnta];在一个时钟周期内,肉眼是看不到的,要延时几秒吧

回答2:

#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;
}

回答3:

很长时间不看了。大概看了下,感觉你这个程序有问题,看你程序的“ P3 = 0xFF;
}
P3=tab[cnta];”这个P3刚赋过值又赋值会覆盖之前的值,所以。。。。

回答4:

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];

人的眼睛是看不出来的 造成的