|
按你的原理圖給你寫個的程序,未經(jīng)實物驗證,僅供參考。
- /*******************************
- 本程序只適合STC15系列1T單片機
- 使用內(nèi)部時鐘11.0592MHz
- 磁保持繼電器與輸出端口需要對應(yīng)
- *******************************/
- #include <reg51.h>
- #include <intrins.h>
- //特殊功能寄存器聲明
- sfr P3M0=0xB2; //端口3模式寄存器0
- sfr P3M1=0xB1; //端口3模式寄存器1
- //端口聲明
- sbit key =P3^0;
- sbit OUT1=P3^2;
- sbit OUT2=P3^3;
- //變量聲明
- unsigned int count=0;//消抖計數(shù)變量
- bit lock=0;//按鍵自鎖位變量
- bit flag=0;//按鍵狀態(tài)位變量
- //延時函數(shù)
- void Delay100ms() //@11.0592MHz
- {
- unsigned char i, j, k;
- _nop_();
- _nop_();
- i = 5;
- j = 52;
- k = 195;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- //主函數(shù)
- void main()
- {
- OUT1=0;//初始化輸出端口
- OUT2=0;//初始化輸出端口
- P3M1 = 0x00;//設(shè)置P3.2/P3.3推挽模式
- P3M0 = 0x0c;//設(shè)置P3.2/P3.3推挽模式
- while(1)
- {
- if(!key)//按鍵按下
- {
- if(++count>=500 && lock==0)//消抖與自鎖
- {
- lock=1;//自鎖,防止長按重復(fù)響應(yīng)
- flag=~flag;//按鍵狀態(tài)標(biāo)志取反
- if(flag)
- {
- OUT1=1;//繼電器吸合
- Delay100ms();
- OUT1=0;
- }
- else
- {
- OUT2=1;//繼電器釋放
- Delay100ms();
- OUT2=0;
- }
- }
- }
- else//按鍵松手
- {
- lock=0;//自鎖標(biāo)志清0
- count=0;//消抖計數(shù)清0
- }
- }
- }
復(fù)制代碼 |
|