你的led_caculate函数写的有问题,两片595级联驱动8位数码管是使用动态扫描的方式显示,如果每位数码管的显示时间不同,就会造成亮度不均的现象,而且一位数码管连续两次显示的时间间隔不应该大于20ms(50hz),要不然会看到数码管有明显的闪烁。
你delay(200);人的眼睛。只要超过20MS就会看起来感觉会闪了。所以你delay的时间要短点。
void main()
{
unsigned int i;
while(1) {
for(i = 0;i<30;i++) {
led_caculate(i);
// delay(200);----删除这句
}
}
}