这个程序写入单片机后为什么十位数会闪烁而各位不会,请大神指点一下,谢谢
#include
#define uchar unsigned char
#define uint unsigned int
void delay(uint i);
void disp(uchar j);
unsigned char led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar miao=0;
void delay1s()
{
uchar i;
for(i=0;i<20;i++)
{
while(!TF1);
TF1=0;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
}
}
void main()
{
TMOD=0x10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
while(1)
{
disp(miao);
delay1s();
miao++;
if(miao==60)
miao=0;
}
}
void disp(uchar j)
{
P2=0xfe;
P1=led[j/10];
delay(100);
P2=0xfd;
P1=led[j%10];
delay(100);
}
void delay(uint i)
{
uint k;
for(k=0;k
}
你好好检查一下这个函数,void disp(uchar j)看看逻辑上是否有问题,电路连接情况,你自己和单片机引脚对应一下,看看操作的引脚和实际段位是否一致。
你这led[j/10]、led[j%10],小于10,P1没变啊,怎么闪烁
楼主代码是截取了一部分吗?你那的j的取值是多少?正如2楼所说的,如果led [j/10]、led[j%10],小于10,P1就不会达到预期的效果了!你看看是否是j的取值的问题!
个位有闪烁,但是由于你间隔的时间有问题,P2.0亮的时间是delay(100);,尔灭的时间是delay(100);+delay1s();,所以就看不清了!