扎先 发表于 2025-7-23 18:29:27

小灯部分总分析

点亮小灯

硬件分析


该节内容以LED2为例
分析LED部分:
欲点亮LED2,则LED2需导通状态
Q16导通,DB0低电平时,此时LED2有压降,则LED2可导通
分析74HC245芯片:
72HC245
19号OE号脚,为使能引脚,该引脚接地,所以是低电平,该引脚低电平有效,故74HC245芯片可作用
1号脚是方向引脚,接VCC,故是高电平,所以是A编号引脚控制B编号引脚
A1号脚低电平则B1号脚低电平,即DB_0低电平则DB0低电平 ^DBX-0
分析74HC138芯片:
74HC138
4号脚E1为低电平有效,5号脚E2低电平有效,E3高电平有效
欲达到上述效果,则
ENLED低电平,此时E1和E2均为低电平
ADDR3高电平,此时E3高电平
此时,该芯片可正常使用
欲使Q16导通,则LEDS6需要为低电平,此时Q16才有压降,才可以导通
欲使LEDS6低电平,查真值表后,需要3号脚A2为高电平,2号脚A1为高电平,1号脚A0为低电平
欲达到以上效果,则
ADDR0为低电平,则A0为低电平
ADDR1为高电平,则A1为高电平
ADDR2为高电平,则A2为高电平 ^Q16-1
分析跳线部分:

欲时ADDR0低电平,则P1.0需要低电平
欲使ADDR1高电平,则P1.1需要高电平
欲使ADDR2高电平,则P1.2需要高电平
欲使ADDR3高电平,则P1.3需要高电平

欲使DB_0低电平,则P0.0需要低电平
欲使ENLED低电平,则P1.4需要低电平
综上:
欲电亮小灯,
P0.0低电平,等效于DB_0低电平
P1.0低电平,等效于ADDR0低电平
P1.1高电平,等效于ADDR1高电平
P1.2高电平,等效于ADDR2高电平
P1.3高电平,等效于ADDR3高电平
P1.4低电平,等效于ENLED低电平
代码

点亮 LED2

#include<reg52.h>

sbit LED = P0 ^ 0;
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

void main()
{
    ENLED = 0;
    ADDR3 = 1;//U3 74HC138芯片使能
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;//三极管导通
    LED = 0;//灯亮
    while (1);
}点亮LED3

#include<reg52.h>

sbit LED = P0 ^ 1;
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

void main()
{
    ENLED = 0;
    ADDR3 = 1;//U3 74HC138芯片使能
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;//三极管导通
    LED = 0;//灯亮
    while (1);
}点亮LED4

#include<reg52.h>

sbit LED = P0 ^ 2;
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

void main()
{
    ENLED = 0;
    ADDR3 = 1;//U3 74HC138芯片使能
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;//三极管导通
    LED = 0;//灯亮
    while (1);
}点亮LED5

#include<reg52.h>

sbit LED = P0 ^ 3;
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

void main()
{
    ENLED = 0;
    ADDR3 = 1;//U3 74HC138芯片使能
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;//三极管导通
    LED = 0;//灯亮
    while (1);
}点亮LED6

#include<reg52.h>

sbit LED = P0 ^ 4;
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

void main()
{
    ENLED = 0;
    ADDR3 = 1;//U3 74HC138芯片使能
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;//三极管导通
    LED = 0;//灯亮
    while (1);
}点亮LED7

#include<reg52.h>

sbit LED = P0 ^ 5;
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

void main()
{
    ENLED = 0;
    ADDR3 = 1;//U3 74HC138芯片使能
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;//三极管导通
    LED = 0;//灯亮
    while (1);
}点亮LED8

#include<reg52.h>

sbit LED = P0 ^ 6;
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

void main()
{
    ENLED = 0;
    ADDR3 = 1;//U3 74HC138芯片使能
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;//三极管导通
    LED = 0;//灯亮
    while (1);
}点亮LED9

#include<reg52.h>

sbit LED = P0 ^ 7;
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

void main()
{
    ENLED = 0;
    ADDR3 = 1;//U3 74HC138芯片使能
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;//三极管导通
    LED = 0;//灯亮
    while (1);
}小灯闪烁

LED2闪烁

#include <reg52.h>

sbit LED   = P0 ^ 0;
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

void main()
{
    unsigned int i = 0;

    ENLED = 0;
    ADDR3 = 1;//U3 74HC138芯片使能
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;//三极管导通

    while (1)
        {
      LED = 0;//灯亮
      for (i = 0; i < 30000; ++i);//非精确延时
      LED = 1;//灯灭
                for (i = 0; i < 30000; ++i);//非精确延时
    }
}LED3闪烁

#include <reg52.h>

sbit LED   = P0 ^ 1;
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

void main()
{
    unsigned int i = 0;

    ENLED = 0;
    ADDR3 = 1;//U3 74HC138芯片使能
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;//三极管导通

    while (1)
        {
      LED = 0;//灯亮
      for (i = 0; i < 30000; ++i);//非精确延时
      LED = 1;//灯灭
                for (i = 0; i < 30000; ++i);//非精确延时
    }
}LED4闪烁

#include <reg52.h>

sbit LED   = P0 ^ 2;
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

void main()
{
    unsigned int i = 0;

    ENLED = 0;
    ADDR3 = 1;//U3 74HC138芯片使能
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;//三极管导通

    while (1)
        {
      LED = 0;//灯亮
      for (i = 0; i < 30000; ++i);//非精确延时
      LED = 1;//灯灭
                for (i = 0; i < 30000; ++i);//非精确延时
    }
}LED5闪烁

#include <reg52.h>

sbit LED   = P0 ^ 3;
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

void main()
{
    unsigned int i = 0;

    ENLED = 0;
    ADDR3 = 1;//U3 74HC138芯片使能
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;//三极管导通

    while (1)
        {
      LED = 0;//灯亮
      for (i = 0; i < 30000; ++i);//非精确延时
      LED = 1;//灯灭
                for (i = 0; i < 30000; ++i);//非精确延时
    }
}LED6闪烁

#include <reg52.h>

sbit LED   = P0 ^ 4;
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

void main()
{
    unsigned int i = 0;

    ENLED = 0;
    ADDR3 = 1;//U3 74HC138芯片使能
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;//三极管导通

    while (1)
        {
      LED = 0;//灯亮
      for (i = 0; i < 30000; ++i);//非精确延时
      LED = 1;//灯灭
                for (i = 0; i < 30000; ++i);//非精确延时
    }
}LED7闪烁

#include <reg52.h>

sbit LED   = P0 ^ 5;
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

void main()
{
    unsigned int i = 0;

    ENLED = 0;
    ADDR3 = 1;//U3 74HC138芯片使能
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;//三极管导通

    while (1)
        {
      LED = 0;//灯亮
      for (i = 0; i < 30000; ++i);//非精确延时
      LED = 1;//灯灭
                for (i = 0; i < 30000; ++i);//非精确延时
    }
}LED8闪烁

#include <reg52.h>

sbit LED   = P0 ^ 6;
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

void main()
{
    unsigned int i = 0;

    ENLED = 0;
    ADDR3 = 1;//U3 74HC138芯片使能
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;//三极管导通

    while (1)
        {
      LED = 0;//灯亮
      for (i = 0; i < 30000; ++i);//非精确延时
      LED = 1;//灯灭
                for (i = 0; i < 30000; ++i);//非精确延时
    }
}LED9闪烁

#include <reg52.h>

sbit LED   = P0 ^ 7;
sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;

void main()
{
    unsigned int i = 0;

    ENLED = 0;
    ADDR3 = 1;//U3 74HC138芯片使能
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;//三极管导通

    while (1)
        {
      LED = 0;//灯亮
      for (i = 0; i < 30000; ++i);//非精确延时
      LED = 1;//灯灭
                for (i = 0; i < 30000; ++i);//非精确延时
    }
}流水灯

右向左

#include sbit ADDR0 = P1 ^ 0;sbit ADDR1 = P1 ^ 1;sbit ADDR2 = P1 ^ 2;sbit ADDR3 = P1 ^ 3;sbit ENLED = P1 ^ 4;void main(){    unsigned int i = 0;        char cnt = 0;    ENLED = 0;    ADDR3 = 1;//U3 74HC138芯片使能    ADDR2 = 1;    ADDR1 = 1;    ADDR0 = 0;//三极管导通    while (1)         {                                  if (8 == cnt)//到最左边,需要进行复位,点亮最右边                        cnt = 0;                P0 = ~(1

凤清昶 发表于 2025-11-11 08:06:06

谢谢分享,辛苦了

铜坠匍 发表于 2025-12-9 16:02:09

感谢发布原创作品,程序园因你更精彩

觞刈 发表于 2025-12-16 16:20:51

用心讨论,共获提升!

奄幂牛 发表于 2025-12-16 22:54:07

感谢,下载保存了

饮邺谲 发表于 2026-1-13 05:28:14

谢谢楼主提供!

稞冀 发表于 2026-1-15 23:49:12

不错,里面软件多更新就更好了

请蒂 发表于 2026-1-17 21:33:21

谢谢楼主提供!

盖彗云 发表于 2026-1-18 21:28:03

感谢分享,下载保存了,貌似很强大

骆贵 发表于 2026-1-18 21:35:44

鼓励转贴优秀软件安全工具和文档!

仄谦 发表于 2026-1-19 11:44:45

过来提前占个楼

谷江雪 发表于 2026-1-21 05:35:29

新版吗?好像是停更了吧。

频鹏凶 发表于 2026-1-24 09:59:14

新版吗?好像是停更了吧。

腥狩频 发表于 2026-1-24 12:33:22

收藏一下   不知道什么时候能用到

舒娅友 发表于 2026-1-25 11:41:53

谢谢楼主提供!

梢疠 发表于 2026-1-27 03:28:10

懂技术并乐意极积无私分享的人越来越少。珍惜

蓬庄静 发表于 2026-1-29 05:49:39

谢谢楼主提供!

陆菊 发表于 2026-1-30 04:56:29

懂技术并乐意极积无私分享的人越来越少。珍惜

都淑贞 发表于 2026-1-30 20:32:52

用心讨论,共获提升!

摹熹 发表于 2026-2-8 18:35:14

东西不错很实用谢谢分享
页: [1] 2
查看完整版本: 小灯部分总分析