大家好,
我用两片74HC595D 控制8位数码管动态扫描,一片做8位段码的控制,另一片做8位位码的控制。
因为之前是直接用单片机IO连接数码管来控制的,代码里面需要有消隐和延时程序,用起来没啥问题,现在改用74HC595后,发现不需要消隐和延时了,加了消隐和延时发现反而无法正常显示了,我不知道为啥是这样,代码里我就直接放显示部分了。
显示是没啥问题,但是现在有一个小问题,就是前面7位亮度一致,最后一位比较亮,也就是最后一位比前7位都亮。这个应该是最后一位扫描到的时间比前面长造成的,但是我不知道如何解决。
各位大神有解决这个问题的比较成熟的方法么?
显示程序大概如下:
void SendData595(uint8_t DataSendH15_8, uint8_t DataSendL7_0); // 74HC595数据发送
uint8_t weima_table[]= {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe} //8位位码
uint8_t duanma_table[]={0xd7,0x82,0xcd,0x5d,0x1e,0x5b,0xdb,0x15,0xdf,0x5f} //段码,0~9
void SHG_DISPLAY() // 数码管显示,此处无需消隐和延时
{
SendData_hc595(weima_table[0], duanma_table[5]);
SendData_hc595(weima_table[1], duanma_table[2]);
SendData_hc595(weima_table[2], duanma_table[1])
SendData_hc595(weima_table[3], duanma_table[4])
SendData_hc595(weima_table[4], duanma_table[0]);
SendData_hc595(weima_table[5], duanma_table[8])
SendData_hc595(weima_table[6], duanma_table[3]); //以上7位显示亮度均匀一致
SendData_hc595(weima_table[7], duanma_table[7]); //这一位特别亮,比前7位都亮
}
|