12 06 2023
下按键,LED2保持亮,计时器暂停,再次按下按键,LED2灭,计时器继续计时,计时120秒后LED2灭,回到初始状态。 以下是51单片机的代码实现: ```c #include <reg51.h> sbit LED1 = P1^0; // LED1控制引脚 sbit LED2 = P1^1; // LED2控制引脚 sbit KEY = P3^2; // 按键输入引脚 void delay(unsigned int t) // 延时函数 { unsigned int i, j; for(i=0; i<t; i++) for(j=0; j<125; j++); } void main() { unsigned char state = 0; // 状态变量,0表示初始状态,1表示LED1亮,2表示LED2亮 unsigned char key_state = 0; // 按键状态变量,0表示未按下,1表示按下 unsigned int timer = 0; // 计时器,单位为秒 LED1 = 0; // 初始状态LED1灭 LED2 = 0; // 初始状态LED2灭 while(1) { if(KEY == 0) // 检测按键是否按下 { delay(10); // 延时去抖动 if(KEY == 0) // 再次检测按键是否按下 { key_state = 1; // 按键状态变为按下 while(KEY == 0); // 等待按键释放 } } if(key_state == 1) // 如果按键已经按下 { switch(state) { case 0: // 初始状态 LED1 = 1; // LED1亮 state = 1; // 状态变为LED1亮 break; case 1: // LED1亮状态 LED1 = 0; // LED1灭 delay(1000); // 计时1秒 LED2 = 1; // LED2亮 timer = 0; // 计时器清零 state = 2; // 状态变为LED2亮 break; case 2: // LED2亮状态 if(timer < 120) // 如果计时器未满120秒 { if(KEY == 0) // 检测按键是否按下 { delay(10); // 延时去抖动 if(KEY == 0) // 再次检测按键是否按下 { while(KEY == 0); // 等待按键释放 LED2 = 1; // LED2保持亮 while(KEY == 1); // 等待按键再次按下 LED2 = 0; // LED2灭 } } timer++; // 计时器加1 } else // 如果计时器满120秒 { LED2 = 0; // LED2灭 state = 0; // 状态变为初始状态 } break; } key_state = 0; // 按键状态变为未按下 } } } ```
延伸阅读
    智能家居可以实现哪些家庭保洁方面的需求?
    在这部分,你有30分钟的时间写一封信,表达你对你的父母或任何其他家庭成员的感谢。你应该写至少120字,但不超过180字
    如何使用Python进行文本处理?
    如何解决社会福利和社会保障的不平等问题?
    经济全球化与国际合作