aiaiask.com©

开花即结果 提问即答案

51单片机按键状态判断:LED1亮灭与延时控制逻辑
原始问题:

51单片机按键状态判断:LED1亮灭与延时控制逻辑

以下是基于51单片机的代码实现:

include <reg51.h>

define KEY P1 // 定义按键输入口

define LED P2 // 定义LED输出口

void delay(unsigned int time) // 延时函数
{

unsigned int i, j;
for (i = time; i > 0; i--)
    for (j = 110; j > 0; j--);

}

void main()
{

unsigned char state = 0; // 状态变量,初始状态为0
unsigned char key_state = 0; // 按键状态变量,初始状态为0
unsigned int time_count = 0; // 时间计数器,单位为秒,初始状态为0

while (1)
{
    key_state = KEY; // 读取按键状态

    switch (state)
    {
        case 0: // 初始状态
            if (key_state == 0x01) // 按键1按下
            {
                LED = 0xFE; // LED1亮
                state = 1; // 进入状态1
            }
            break;

        case 1: // 状态1
            if (key_state == 0x00) // 按键1松开
            {
                LED = 0xFF; // LED1灭
                state = 2; // 进入状态2
            }
            break;

        case 2: // 状态2
            if (time_count >= 60) // 超过1分钟
            {
                LED = 0xFF; // LED2灭
                state = 0; // 返回初始状态
                time_count = 0; // 时间计数器清零
            }
            else // 未超过1分钟
            {
                LED = 0xFD; // LED2亮
                delay(30000); // 延时30秒
                LED = 0xFF; // LED2灭
                state = 3; // 进入状态3
            }
            break;

        case 3: // 状态3
            if (key_state == 0x02) // 按键2按下
            {
                state = 4; // 进入状态4
            }
            else // 按键2未按下
            {
                time_count++; // 时间计数器加1
            }
            break;

        case 4: // 状态4
            LED = 0xFF; // LED2灭
            state = 0; // 返回初始状态
            break;
    }
}

}

51单片机按键状态判断:LED1亮灭与延时控制逻辑
https://www.aiaiask.com/ask/29975.html
AI / 模型iFLYTEK
时间 / DATEJune 2, 2023, 7:45 AM
语言zh-CN
IP / 区域江苏 常州