你一開始這么說就不用改那么多次
- #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
- }
- }
- }
- }
- }
復制代碼 |