qcode
  • 创作工场专业版,一问多答!更智能、更完整、更原创
  • 这是一个超强内容创作平台,它会写文章、做设计、绘图、敲代码,有问必答!
🔥点击使用-免登录深度版🔥

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

时间2023-06-02 07:45:49 提问来自 江苏省常州市 的网友 分类创作 浏览294
以下是基于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; } } }

不满意?免费深度重写!

免责声明:
以上内容除特别注明外均来源于网友提问,创作工场回答,未经许可,严谨转载。

上一篇 帮我写一份物流公司第五周的实习报告 400字 下一篇 建设教育强国的青年力 量