仿真电路

  • 元件:
英文名 中文名 属性
LED-GREN 绿色LED -
RX8 8位电阻排 元件值设置为1k
BUTTON 按键 -
RES 电阻 元件值设置为10K
  • 电路图:
    电路图

  • 仿真图:
    仿真图

    按键1 上移点亮的LED
    按键2 下移点亮的LED

程序设计

  • main.c:
    #include <AT89X51.H>
    #define uchar unsigned char
    #define uint unsigned int
    //延时函数 t为毫秒(不准)
    void delay(uint t)
    {
    uint i;
    while (t--)
    {
    for (i = 120; i; i--)
      ;
    }
    }
    //主程入口
    void main()
    {
    char n = 0; //用来标记哪一个LED亮
    P2 = 0xff;  //让P2所有引脚输出高电平
    for (;;)
    //死循环,和while(1)等价
    {
    if (P2 & 0x03)
    //判断P2的1,2脚是不是高电平
    {
      delay(10); //延时消除抖动
      if (!(P2 & 0x01))
      //P2.0相连的按键被按下
      {
        if (--n < 0)
        {
          n = 7;
        }
      }
      if (!(P2 & 0x02))
      //P2.1相连的按键被按下
      {
        if (++n > 7)
        {
          n = 0;
        }
      }
    }
    P1 = ~(1 << n); //控制P1输出
    delay(400);      //粗略延时
    }
    }

注解

  • 两个按键一端连接到电源和P2,另一端接地

    当按键松开时,P2某一脚与电源相连,为高电平
    当按键按下时,P2某一脚接地,为低电平

  • "按键消抖"

    按键按下的时候会有一段时间电位不稳定
    一般要等10ms左右再判断一次

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