• 【蓝桥杯单片机02】LED的基本控制


    【蓝桥杯单片机02】LED的基本控制

    广东职业技术学院  欧浩源

        在CT107D单片机综合训练平台实现LED的基本控制和其他单片机开发平台不一样,不单单是控制几个LED实现跑马灯这么简单。因为在这个平台上要掌握74CH138译码器和74HC573锁存器的使用才能实现对LED的基本控制。因此,这个单元的重点不是LED的控制,而是掌握译码器和锁存器的基本使用。
    1、74HC138:三八译码器
        用非专业的语言来解释,这个芯片实现的功能就是用3个输入引脚,实现8个输出引脚,而且这个八个输出引脚中只要一个低电平。对于这个芯片,你不需要搞清楚它的内部结构和工作原理,只需要把真值表记住就行了。注意:是要记住。

    2、74HC573:锁存器
        用非专业的语言来解释,锁存器就是能够把输出的数据保存住,不会受到输入变化的影响。
    573锁存器有20个引脚,D1~D8是数据输入端,Q1~Q8是数据输出端,LE为锁存控制端。当锁存使能端LE为高时,573的锁存对于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。
        简单的说就是,LE为高电平时,Q1~Q8输出和D1~D8输入是一样的;LE为低电平时,Q1~Q8输出不受D1~D8输入的变化影响。明白这个就掌握了该锁存器的使用。
    3、74HC02:或非门
       从电路原理图上可以分析出,单片机的WR引脚或者GND和译码器的Y4引脚作为74HC02的输入。可以通过J13的跳帽选择是WR还是GND作为74HC02的输入。如果译码器的Y4输出低电平,那么74HC02的输出Y4C将为高电平,而该引脚接到74HC573锁存器LE引脚,这时候锁存器处于数据联通的开放状态,也就是单片机可以控制LED灯。如果单片机不向外设输出数据,或者译码器的Y4没有输出低电平的话,则74HC573处于锁存状态,即单片机不能控制LED灯。
    4、单元训练题目

    5、参考源码

    #include "reg52.h"  
    
    sbit HC138_A = P2^5;        
    sbit HC138_B = P2^6;        
    sbit HC138_C = P2^7;        
    
    void Delay(unsigned int time)
    {
            while(time--);
            while(time--);
    }
    /*=======================================================
    *通过HC138译码器控制HC573锁存器
    *参数:n--HC138译码器低电平引脚
             4:Y4输出低电平
             5:Y5输出低电平
             6:Y6输出低电平
             7:Y7输出低电平
             8:Y4~Y7全部输出高电平
    *·返回值:无。
    *设计:欧浩源  广东职业技术学院 & 小蜜蜂科教
    *时间:2018年1月26日
    =======================================================*/
    void Init74HC138(unsigned char n)
    {
            switch(n)
            {
                    case 4:
                            HC138_A = 0;
                            HC138_B = 0;
                            HC138_C = 1;
                            break;
                    case 5:
                            HC138_A = 1;
                            HC138_B = 0;
                            HC138_C = 1;
                            break;
                    case 6:
                            HC138_A = 0;
                            HC138_B = 1;
                            HC138_C = 1;
                            break;
                    case 7:
                            HC138_A = 1;
                            HC138_B = 1;
                            HC138_C = 1;
                            break;
                    case 8:
                            HC138_A = 0;
                            HC138_B = 0;
                            HC138_C = 0;
                            break;
            }
    }
    
    void LEDRunning()
    {
            char i = 0;
    
            P0 = 0xaa;
            Delay(60000);
            Delay(60000);
            P0 = 0x55;
            Delay(60000);
            Delay(60000);
            
            for(i = 0; i < 3; i++)
            {
                    P0 = 0x00;
                    Delay(60000);
                    P0 = 0xff;
                    Delay(60000);
            }
            for(i = 0; i < 8; i++)
            {
                    P0 <<= 1;
                    Delay(60000);
            }
            for(i = 0; i < 8; i++)
            {
                    P0 <<= 1;
                    P0 |= 1;
                    Delay(60000);
            }
    }
    
    main()
    {
            Init74HC138(4);                                
            while(1)
            {
                    LEDRunning();                                
            }
    }
  • 相关阅读:
    关于Java中System.currentTimeMillis和System.nanoTime的错误认识
    多线程以外
    vim 小技巧
    Virtual Box HostOnly网络模式配置
    How 30 Minutes a Day Can Increase Your Intelligence
    YUM命令使用
    Hash算法及其应用
    jetty + apache httpd 反向代理配置
    使用SCTP优化网络
    .NET书籍推荐
  • 原文地址:https://www.cnblogs.com/ALittleBee/p/8359701.html
Copyright © 2020-2023  润新知