51单片机键控流水灯——查询

参照下图,实现当KEY键第1次按下时8个LED从上向下依次显示,KEY键第2次按下时LED从下向上依次显示。(作业完成后拍照上传)

 

1.画出程序流程图

 

2.

编写程序

参考GPT和自己的思路:

很高兴能为您提供帮助。

1.以下是51单片机键控流水灯的程序流程图:

![](https://i/

参考GPT和自己的思路:

  1. 这是一个基本的51单片机流水灯控制程序,增加了键盘触发控制,程序流程如下:
  • 初始化IO口,设置按键口为输入,LED口为输出;
  • 开启LED灯的上升沿中断,用于实现LED灯依次从上向下亮起;
  • 进入while循环,在循环内等待按键按下;
  • 检测按键是否按下,如果按下则进入处理流程;
  • 第一次按下,LED从上向下亮起,可以通过增加计数器count,控制灯亮起的次数;
  • 第二次按下, LED从下向上亮起,同样可以通过计数器count控制灯亮起的次数;
  • 处理完后等待按键释放;
  • 完成流程。
  1. 下面是基本的51单片机键控流水灯程序代码,可以根据自己的需求进行修改:
#include<reg52.h>

#define LED P2
sbit KEY1 = P1^0;

int count=0;//计数器初始化

void delay(int i)
{
    while(i--);
}

void up() interrupt 0 //LED时间控制
{
    if(count==8)
    {
        count=0;
    }
    LED= ~(1<<count); //通过移位实现LED灯依次亮起
    delay(10000);
    count++;
}

void main()
{
    P2=0xff; //初始化P2口,将LED熄灭
    IE=0x81; //开启中断
    IT0=1;    //中断类型为下降沿触发
    while(1)
    {
        if(KEY1==0) //检测按键是否按下
        {
            while(KEY1==0); //等待按键释放
            if(count==0) //第一次按下
            {
                while(count<=7) //LED从上向下亮起
                {
                    LED=~(1<<count);
                    delay(100000);
                    count++;
                }
            }
            else //第二次按下
            {
                count=7;
                while(count>=0) //LED从下向上亮起
                {
                    LED=~(1<<count);
                    delay(100000);
                    count--;
                }
            }
        }
    }
}