本帖最后由 jianwei2030 于 2017-10-7 21:37 编辑
自己做了块万年历的板子,使用STC15W408单片机,使用74HC573驱动数码管,数码管每一段采用三颗LED并联组成,采用共阳方式连接,共8位数码管。
调时程序时发现无法解决消隐问题,单个位不该显示的段乱闪,如果刷新频率太高,数码管显示亮度过低,以至于白天不能分辨显示字符,请大家帮忙看看程序怎么改进下。
其中:delay(MAX)\delay(PWM)分别是延时不同的时间。
for(i = 0;i < 150;i++)
{
xianshi_data();//读取DS1302时钟数据
du = 1; P1 = 0xff; du = 0; delay(PWM);
we = 1; P1 = 0x00; we = 0; delay(MAX);
du = 1; P1 = duan[year/10]; du = 0;
we = 1; P1 = 0x01; we = 0; delay(SPEED); //年的十位 1111 1110
//
du = 1; P1 = 0xff; du = 0; delay(PWM);
we = 1; P1 = 0x00; we = 0; delay(MAX);
du = 1; P1 = duan[year%10]; du = 0;
we = 1; P1 = 0x02; we = 0; delay(SPEED); //年的个位 1111 1101
//
du = 1; P1 = 0xff; du = 0; delay(PWM);
we = 1; P1 = 0x00; we = 0; delay(MAX);
du = 1; P1 = 0x85; du = 0;
we = 1; P1 = 0x04; we = 0; delay(SPEED); //间隔横线 1111 1011
//
du = 1; P1 = 0xff; du = 0; delay(PWM);
we = 1; P1 = 0x00; we = 0; delay(MAX);
du = 1; P1 = duan[mouth/10]; du = 0;
we = 1; P1 = 0x08; we = 0; delay(SPEED); //月的十位 1111 0111
//
du = 1; P1 = 0x0ff; du = 0; delay(PWM);
we = 1; P1 = 0x00; we = 0; delay(MAX);
du = 1;P1 = duan[mouth%10]; du = 0;
we = 1; P1 = 0x10; we = 0; delay(SPEED); //月的个位 1110 1111
//
du = 1; P1 = 0xff; du = 0; delay(PWM);
we = 1; P1 = 0x00; we = 0; delay(MAX);
du = 1; P1 = 0xfd; du = 0;
we = 1; P1 = 0x20; we = 0; delay(SPEED); //间隔横线位 1101 1111
// du = 1; P1 = 0x00; du = 0; delay(50);
du = 1; P1 = 0xff; du = 0; delay(PWM);
we = 1; P1 = 0x00; we = 0; delay(MAX);
du = 1; P1 = duan[day/10]; du = 0; ;
we = 1; P1 = 0x40; we = 0; delay(SPEED); //天的十位 1011 1111
// du = 1; P1 = 0x00; du = 0; delay(50);
du = 1; P1 = 0xff; du = 0; delay(PWM);
we = 1; P1 = 0x00; we = 0; delay(MAX);
du = 1; P1 = duan[day%10]; du = 0;
we = 1;P1 = 0x80; we = 0; delay(SPEED); //天的个位 0111 1111
// du = 1; P1 = 0x00; du = 0; delay(50);
}
}
|