• 用74HC573进行LED数码管驱动的编程


    数码管公有7个LED灯,加上下面的小数点,共需要8个驱动接口。同时为了节约引脚数量,这个8个数据引脚同时也是数码管公共端的驱动接口。那一个数据到来的时候到底分配给LED还会分配给他的公共端呢?这就需要两个开关,总计10个输出接口。

    这10个输出接口分别可称为8个数据口,1个段选控制口(控制哪个段亮起来),一个位选控制口(控制数码管的公共端)。

    74HC573的数据有效位是高电平,赋值为1的时候数据可以被接收。

    P0接的数据为byte类型,P20为段选,P21为位选

           执行程序的流程时,按顺序会出现以下问题:

            P0=哪个显示1;    
            P21=1//位选有效;        
            P21=0//关闭位选;

    //将要显示的LED打开,比如1

            P0=显示数据1;    
            P20=1;//段选有效
            P20=0;//关闭段选 

    //把数据(比如0)写入到要显示的LED中,比如1,此时LED1=0,注意:总线数据此时是0

            P0=哪个显示2;    
            P21=1//位选有效;        
            P21=0//关闭位选;        

    //将要显示的LED打开,比如2。因为打开了LED2且总线中存在0的数据,LED2=0;

            P0=显示数据2;    
            P20=1;//段选有效
            P20=0;//关闭段选

    //把数据(比如3)写入到要显示的LED中,比如2,此时LED2=3,注意:总线数据此时是3
            
            

    显示数据2与哪个显示1会产生了冲突,也就是当哪个显示1选定了LED以后,显示数据2的数据进入了。

    P21虽然已经关闭了,显示数据不会进入位选的芯片,但是位选是激活的状态,当有数据的时候就显示出来了。所以在输入数据的时候要把所有的LED全部关闭,所以LED实际是处于高频闪灭闪灭的状态的。

    因为只有一个总线数据,所以在设置某一个LED的时候,要把其他的LED关断,就一定会产生高频的开关动作才可以。

    要特别注意的是,上面的代码是不对的,试验证明,有且只有一个顺序如下是对的,否则数据都会冲进去而乱掉。

            P0=duan_table[da];    
            P20=1;
            P20=0;
            
            P0=wei_table[num];    
            P21=1;        
            P21=0;
            
            P0=0xFF;//COLSE ALL WEIXUAN
            P21=1;        
            P21=0;

  • 相关阅读:
    面试题:Redis和MySQL的事务区别是什么?
    hdlbits系列verilog解答(移位寄存器)-23
    Paddle安装
    OpenJDK和OracleJDK的区别说明
    供应链平台 采购信息监控更新提醒
    一文详解 implementation api embed
    Git基本操作(1)
    luffy-(9)
    剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
    MySQL MHA
  • 原文地址:https://blog.csdn.net/zjz444/article/details/126588653