|
試試這個(gè)
- #include <REG52.h>
- // 定義類(lèi)型別名
- typedef unsigned char u8; // 0 到 255
- typedef unsigned int u16; // 0 到 65535
- // 延時(shí)函數(shù),產(chǎn)生約 50 毫秒的延時(shí)
- void Delay50ms(void) //@11.0592MHz
- {
- unsigned char data i, j; // 定義循環(huán)變量
- i = 90; // 外層循環(huán)次數(shù)
- j = 163; // 內(nèi)層循環(huán)次數(shù)
- do
- {
- while (--j); // 內(nèi)層循環(huán)
- }
- while (--i); // 外層循環(huán)
- }
- // 定義按鍵和 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; // 關(guān)燈延時(shí)計(jì)數(shù)器,初始化為 0
- void main()
- {
- bit K1_Lock = 1;
- bit K2_Lock = 1;
- while(1) // 主循環(huán)
- {
- if(Kzong == 0) // 如果總按鍵被按下
- {
- if(Off_Delay == 0) // 如果延時(shí)計(jì)數(shù)器為 0
- {
- LED1 = 0; // 開(kāi)啟 LED1
- LED2 = 0; // 開(kāi)啟 LED2
- }
- if(K1 == 0)
- {
- if(K1_Lock == 0)
- {
- LED1 = !LED1; // 切換 LED1 狀態(tài)
- K1_Lock = 1;
- }
- }
- else
- {
- K1_Lock = 0;
- }
- if(K2 == 0)
- {
- if(K2_Lock == 0)
- {
- LED2 = !LED2; // 切換 LED2 狀態(tài)
- K2_Lock = 1;
- }
- }
- else
- {
- K2_Lock = 0;
- }
- Delay50ms(); // 延時(shí) 50ms
- Off_Delay = 200; // 設(shè)置關(guān)燈延時(shí)計(jì)數(shù)器為 200
- }
- else // 如果總按鍵沒(méi)有被按下
- {
- if(Off_Delay != 0) // 如果延時(shí)計(jì)數(shù)器不為 0
- {
- Delay50ms(); // 延時(shí) 50ms
- Off_Delay = Off_Delay - 1; // 遞減延時(shí)計(jì)數(shù)器
- if(Off_Delay == 0) // 如果計(jì)數(shù)器減到 0
- {
- LED1 = 1; // 熄滅 LED1
- LED2 = 1; // 熄滅 LED2
- }
- }
- }
- }
- }
復(fù)制代碼 |
|