按你的原理圖給你寫個的程序,未經實物驗證,僅供參考。
- /*******************************
- 本程序只適合STC15系列1T單片機
- 使用內部時鐘11.0592MHz
- 磁保持繼電器與輸出端口需要對應
- *******************************/
- #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;//消抖計數變量
- bit lock=0;//按鍵自鎖位變量
- bit flag=0;//按鍵狀態位變量
- //延時函數
- 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);
- }
- //主函數
- void main()
- {
- OUT1=0;//初始化輸出端口
- OUT2=0;//初始化輸出端口
- P3M1 = 0x00;//設置P3.2/P3.3推挽模式
- P3M0 = 0x0c;//設置P3.2/P3.3推挽模式
- while(1)
- {
- if(!key)//按鍵按下
- {
- if(++count>=500 && lock==0)//消抖與自鎖
- {
- lock=1;//自鎖,防止長按重復響應
- flag=~flag;//按鍵狀態標志取反
- if(flag)
- {
- OUT1=1;//繼電器吸合
- Delay100ms();
- OUT1=0;
- }
- else
- {
- OUT2=1;//繼電器釋放
- Delay100ms();
- OUT2=0;
- }
- }
- }
- else//按鍵松手
- {
- lock=0;//自鎖標志清0
- count=0;//消抖計數清0
- }
- }
- }
復制代碼 |