[资料分享]

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

[复制链接]
18507|19
手机看帖
扫描二维码
随时随地手机跟帖
ohy3686|  楼主 | 2018-1-26 14:55 | 显示全部楼层 |阅读模式
本帖最后由 ohy3686 于 2018-1-27 22:32 编辑

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

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、单元训练题目
01-LED控制基础.PNG

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();                                
        }
}

评论
zss04 2024-1-30 16:01 回复TA
好 
nyl0516 2023-1-15 16:40 回复TA
老师我的led流水灯程序编译烧录成功,但是灯就是不亮是什么问题呢 
一路向北lm 2018-2-12 18:51 回复TA
分享的不错,辛苦大版主了 

相关帖子

一路向北lm| | 2018-1-27 09:24 | 显示全部楼层
感谢分享,1602好几届没考了,不知道今年考不考。

使用特权

评论回复
ohy3686|  楼主 | 2018-1-27 09:42 | 显示全部楼层
一路向北lm 发表于 2018-1-27 09:24
感谢分享,1602好几届没考了,不知道今年考不考。

老实说,我从来没有用过1602模块
便宜是便宜点,相对来说,12232或者12864更好用一些
点阵显示模块现在又有OLED
所以,以后估计很少人会用1602的了。

使用特权

评论回复
caijie001| | 2018-1-28 14:02 | 显示全部楼层
ohy3686 发表于 2018-1-27 09:42
老实说,我从来没有用过1602模块
便宜是便宜点,相对来说,12232或者12864更好用一些
点阵显示模块现在又有O ...

1602其实很简单的,看看手册就懂了,现在我在学校用得OLED居多,还有串口哈哈哈哈,说实话,调试的时候串口用得挺多的

使用特权

评论回复
评论
深入TA心 2019-10-18 08:51 回复TA
123 
21ic小喇叭| | 2018-2-1 09:47 | 显示全部楼层
感谢版主分享,大家一块学习起来~~

使用特权

评论回复
ohy3686|  楼主 | 2018-2-1 11:57 | 显示全部楼层
21ic小喇叭 发表于 2018-2-1 09:47
感谢版主分享,大家一块学习起来~~

感谢喇叭管理员支持....

使用特权

评论回复
cpu51| | 2018-2-11 16:21 | 显示全部楼层
本帖最后由 cpu51 于 2018-2-11 16:25 编辑

看半天没看懂,楼主是不是介绍用LED替代1602液晶模块呢?感兴趣,有这样的系列资料小伙伴们共享一下啊,谢谢啦。

使用特权

评论回复
评论
ohy3686 2018-2-11 17:15 回复TA
跟1602没有关系,就是一个跑马灯 只不过在蓝桥杯比赛的板子上不是用I/O口直接驱动LED 而是有译码器和锁存器在中间。 
emco| | 2018-2-24 12:38 | 显示全部楼层
谢谢分享

使用特权

评论回复
ningling_21| | 2018-4-2 14:28 | 显示全部楼层
不错

使用特权

评论回复
一粟的大海| | 2018-8-9 12:41 | 显示全部楼层
楼主,能麻烦您指点一下怎样去获取锁存器的地址0xXX?

使用特权

评论回复
h472438470| | 2020-3-26 07:20 | 显示全部楼层
看着文字和昨晚看的视频,发现视频的效果更好,辛苦老师  都是凌晨做视频

使用特权

评论回复
想写诗的鱼| | 2021-10-7 00:25 | 显示全部楼层
for(i = 0; i < 8; i++)

        {

                P0 <<= 1;

                Delay(60000);

        }

        for(i = 0; i < 8; i++)

        {

                P0 <<= 1;

                P0 |= 1;

                Delay(60000);

        }
老师,这段代码我不太理解,左移时,高位舍去,低位添加0,那么在i取大于1的值时,不应该有好几个灯都亮吗?为什么是依次闪烁啊?

使用特权

评论回复
评论
要好好学蓝桥 2022-1-7 11:00 回复TA
看清楚,那是1,不是i 
18107388130| | 2021-12-11 14:16 | 显示全部楼层
本帖最后由 18107388130 于 2021-12-11 14:29 编辑
简单来讲是使用了Delay(60000);产生了一个延时
屏幕截图 2021-12-11 142545.png

使用特权

评论回复
18107388130| | 2021-12-11 14:27 | 显示全部楼层
18107388130 发表于 2021-12-11 14:16
简单来讲是使用了Delay(60000);产生了一个延时

使用特权

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

本版积分规则

个人签名:广东职业技术学院 欧浩源(ohy3686@foxmail.com)    [Zigbee技术&物联网应用] 群:168225322    [技术交流微信]:gzyohy (暗号:宝塔镇河妖)

322

主题

899

帖子

2579

粉丝