打印
[学习资料]

74HC59驱动数码管方法

[复制链接]
59|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

先看手册,通过上升沿移位和搬移字节。
所以要用到上升沿

如果级联可以这样
数据会先进入位码的芯片,再进入段码的芯片。
由于是移位寄存器,因此先进入的数据位会移动到最后那个段码里,所以在程序中是先给8位的段码数据,后给8位的位码数据,最后传输完16位的段码与位码数据后再执行将移位寄存器的数据整体搬移到存储寄存器,以显示新的数据。
该芯片显示数码管非静态显示,因此需要不停的执行,每次显示1个数码管,一共八个,循环显示,视觉上就像一直在点亮一样。

使用特权

评论回复
沙发
mintspring|  楼主 | 2025-1-23 11:10 | 只看该作者

为什么低电平也可以呢?
其实初始化IO的时候默认都是低电平,所以在上面的低电平发生前已经发生了一个上升沿了

使用特权

评论回复
板凳
mintspring|  楼主 | 2025-1-23 11:10 | 只看该作者
所以采用下面的写法效果也是一样的,而且更容易理解
/**************** 向HC595发送一个字节函数 ******************/
void Send_595(u8 dat)
{
    u8  i;
    for(i=0; i<8; i++)
    {
        dat <<= 1;
        P_HC595_SER   = CY;
        P_HC595_SRCLK = 0;
        P_HC595_SRCLK = 1;
    }
}

/********************** 显示扫描函数 ************************/
void DisplayScan(void)
{
    Send_595(t_display[LED8[display_index]]);   //输出段码
    Send_595(~T_COM[display_index]);            //输出位码

    P_HC595_RCLK = 0;
    P_HC595_RCLK = 1;
    if(++display_index >= 8)    display_index = 0;  //8位结束回0
}

/********************** Timer0 1ms中断函数 ************************/
void timer0 (void) interrupt 1
{
    DisplayScan();  //1ms扫描显示一位
    B_1ms = 1;      //1ms标志

}

使用特权

评论回复
地板
mintspring|  楼主 | 2025-1-23 11:12 | 只看该作者
这是动态显示,而且需要MCU一直参与扫描过程。如果想让单片机解放出来可以使用类似MAX7219的驱动器,这样驱动器会自己扫描显示相关内容。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

297

主题

4918

帖子

24

粉丝