• 用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;

  • 相关阅读:
    C++内存分区模型
    【Golang】golang使用三方SDK操作容器指南
    啊哈C语言 第8章 游戏时间到了(第29讲)
    c++ 学习 之 继承中 父类子类构造函数和析构函数的调用顺序
    【多目标追踪算法】Deepsort追踪实战
    LeeCode《可以读通讯稿的组数》ac题解
    HarmonyOS开发:ArkTs常见数据类型(一)
    汽车协议学习
    分布式搜索引擎03
    TscanCode的安装与基本使用
  • 原文地址:https://blog.csdn.net/zjz444/article/details/126588653