這是非常簡單的邏輯控制,給你寫一個示例,你試試。IO口可以根據實際需要重新定義,最好避開P3.0和P3.1,以免影響下載程序。
- #include <STC15F2K60S2.H>//頭文件適用STC15F104W
- #define uchar unsigned char
- #define uint unsigned int
- sbit key =P3^2;
- sbit LED1=P3^3;
- sbit LED2=P3^4;
- bit sign=0,flag=0;
- uchar sec,num;
- //ms延時子函數(11.0592MHz 1T單片機)
- void delay(uint k)
- {
- uint i,j;
- for(i=k;i>0;i--)
- for(j=829;j>0;j--);
- }
- //啟動開關函數
- void switch_scan()
- {
- if(!key)
- {
- delay(10);
- if(!key && !sign)
- {
- sign=1;
- flag=1;
- }
- }
- else
- {
- sign=0;
- flag=0;
- }
- }
- void Timer0Init() //50毫秒@11.0592MHz
- {
- TMOD= 0x01; //設置定時器模式
- TL0 = 0x00; //設置定時初值
- TH0 = 0x4C; //設置定時初值
- TR0 = 1; //定時器0開始計時
- EA = 1; //開總中斷
- ET0 = 1; //開T0中斷
- }
- void main()
- {
- Timer0Init();
- while(1)
- {
- switch_scan();
- if(flag)
- {
- if(sec>=2&&sec<7)//延時2秒鐘后LED1和LED2點亮5秒鐘
- {
- LED1=0;
- LED2=0;
- }
- else if(sec>=7&&sec<127)//5秒鐘后LED1熄滅,LED2還亮著2分鐘
- {
- LED1=1;
- }
- else if(sec>=127&&sec<132)//2分鐘后LED1又亮起來5秒鐘
- {
- LED1=0;
- }
- else if(sec>=132)//5秒鐘后LED1,LED2都熄滅
- {
- LED1=1;
- LED2=1;
- flag=0;
- }
- }
- else //全部復位
- {
- LED1=1;
- LED2=1;
- sec=0;
- num=0;
- }
- }
- }
- void timer0_isr()interrupt 1
- {
- TL0 = 0x00; //設置定時初值
- TH0 = 0x4C; //設置定時初值
- if(flag)
- {
- if(++num>=20)
- {
- num=0;
- sec++;
- }
- }
- }
復制代碼 |