仿真电路

  • 元件:
英文名 中文名 属性
LED-BARGRAPH-GRN 绿色LED组 -
LED-BARGRAPH-RED 红色LED组 -
74HC138 8位译码器 -
RX8 8位电阻排 元件值设置为100
BUTTON 按键 -
RES 电阻 元件值设置为10K
  • 电路图:
    电路图
  • 仿真图:
    仿真图

    按键1 下移点亮的绿色LED
    按键2 下移点亮的红色LED
    按键3 切换译码器使能,非使能状态所有LED熄灭

程序设计

  • main.c:
    #include <AT89X51.H>
    #define uchar unsigned char
    #define uint unsigned int
    //延时函数
    void delay(uint t)
    {
    uint i;
    while (t--)
    {
    for (i = 120; i; i--)
      ;
    }
    }
    //主程入口
    void main()
    {
    uchar op1 = 0;
    uchar op2 = 0;
    uchar ctrl = 1;
    uchar press = 0;
    P1 = 0xff; //P1所有脚输出高电平
    for (;;)
    //死循环,和while(1)等价
    {
    if ((P1 & 0x07) != 0x07)
    //判断P1的1,2,3脚是不是高电平
    {
      delay(10); //延时消除抖动
      if (!(P1 & 0x01))
      //按键1
      {
        if (++op1 > 7)
        {
          op1 = 0;
        }
      }
      if (!(P1 & 0x02))
      //按键2
      {
        if (++op2 > 7)
        {
          op2 = 0;
        }
      }
      if (!(P1 & 0x04))
      //按键3,清除译码器
      {
        ctrl = !ctrl;
      }
    }
    //ctrl为非0时P2=0x01,为0时P2=0x00
    P2 = ctrl ? 0x01 : 0x00;
    P3 = op1 | (op2 << 4);
    delay(300); //粗略延时
    }
    }

注解

译码器

  • 译码器
    • 译码器用于把3位二进制数值转换成某一个Y引脚的低电平信号,一般用于控制多个锁存器。
    • PS:3位二进制恰好能表式0~8,也就是对应第几个Y引脚输出低电平信号。
    • 引脚类型: 使能控制引脚E 123,数据输入引脚ABc,数据输出引脚Y
      使能控制引脚E 123: 只有当E1为高电平,E2 E3为低电平才能产生有效输出,否则输出引脚Y全部为高电平。

74HC138真值表

E1 E2 E3 A B C Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
L * * * * * H H H H H H H H
* H * * * * H H H H H H H H
* * H * * * H H H H H H H H
H L L L L L L H H H H H H H
H L L H L L H L H H H H H H
H L L L H L H H L H H H H H
H L L H H L H H H L H H H H
H L L L L H H H H H L H H H
H L L H L H H H H H H L H H
H L L L H H H H H H H H L H
H L L H H H H H H H H H H L

L:低电平,H:高电平,*:任意电平

最后修改:2020 年 04 月 06 日
如果觉得我的文章对你有用,请随意赞赏