你一开始这么说就不用改那么多次
- #include <REG52.h>
- // 定义类型别名
- typedef unsigned char u8; // 0 到 255
- typedef unsigned int u16; // 0 到 65535
- // 延时函数,产生约 50 毫秒的延时
- void Delay50ms(void) //@11.0592MHz
- {
- unsigned char data i, j; // 定义循环变量
- i = 90; // 外层循环次数
- j = 163; // 内层循环次数
- do
- {
- while (--j); // 内层循环
- }
- while (--i); // 外层循环
- }
- // 定义按键和 LED 引脚
- sbit Kzong = P3^1; // 总按键连接到 P3.1
- sbit K1 = P3^2; // 按键 1 连接到 P3.2
- sbit K2 = P3^3; // 按键 2 连接到 P3.3
- sbit LED1 = P2^0; // LED1 连接到 P2.0
- sbit LED2 = P2^1; // LED2 连接到 P2.1
- u8 Off_Delay = 0; // 关灯延时计数器,初始化为 0
- void main()
- {
- while(1) // 主循环
- {
- if(Kzong == 0) // 如果总按键被按下
- {
- if(Off_Delay == 0) // 如果延时计数器为 0
- {
- LED1 = 0; // 开启 LED1
- LED2 = 0; // 开启 LED2
- }
- if(K1 == 0) // 如果按键 1 被按下
- {
- Delay50ms(); // 延时 50ms
- if(K1 == 0) // 确认按键 1 仍被按下
- {
- LED1 = !LED1; // 切换 LED1 状态
- while(K1 == 0); // 等待按键 1 释放
- }
- }
- if(K2 == 0) // 如果按键 2 被按下
- {
- Delay50ms(); // 延时 50ms
- if(K2 == 0) // 确认按键 2 仍被按下
- {
- LED2 = !LED2; // 切换 LED2 状态
- while(K2 == 0); // 等待按键 2 释放
- }
- }
- Off_Delay = 200; // 设置关灯延时计数器为 200
- }
- else // 如果总按键没有被按下
- {
- if(Off_Delay != 0) // 如果延时计数器不为 0
- {
- Delay50ms(); // 延时 50ms
- Off_Delay = Off_Delay - 1; // 递减延时计数器
- if(Off_Delay == 0) // 如果计数器减到 0
- {
- LED1 = 1; // 熄灭 LED1
- LED2 = 1; // 熄灭 LED2
- }
- }
- }
- }
- }
复制代码 |