|
單片機(jī)初學(xué)入門寫的,沒用定時(shí)器計(jì)數(shù)器,純粹的邏輯代碼,高手請(qǐng)路過。
- #include <STC8Gxx.H>
- //--聲明全局函數(shù)--//
- void Delay10ms(unsigned int c); //延時(shí)10ms
- unsigned int i, y, z, key_on;
- //--定義要使用的IO口--//
- sbit out_1 = P5^4; //定義使用的IO口1
- sbit out_2 = P5^5; //定義使用的IO口2
- sbit out_3 = P3^3; //定義使用的IO口3
- sbit k1 = P3^2; //定義按鍵使用的IO口
- void Delay10ms(unsigned int c) //延時(shí)函數(shù)
- {
- unsigned char a, b
- for (;c>0;c--)
- {
- for (b=162;b>0;b--)
- {
- for (a=235;a>0;a--);
- }
- }
- }
- void main()
- {
- P5M0 = 0x18;
- P5M1 = 0x00;
- P3M0 = 0x08;
- P3M1 = 0x00; //設(shè)置需要端口模式
- out_1 = 0;
- out_2 = 0;
- out_3 = 0; //端口上電狀態(tài)
- i = 0; y = 0; z = 0; key_on = 0; //變量初始化
-
- while(1)
- {
- if((!k1 || z) && i<15) //按鍵按下,并只會(huì)執(zhí)行1.5S
- {
- Delay10ms(2);
- if(!k1) //按下
- {
- key_on = 1; //標(biāo)志位,允許計(jì)時(shí)開始
- z = 1; //狀態(tài)鎖定
- }
- if(z==1 && k1==1) //松開
- {
- y ++; //y次數(shù)+1
- z = 0; //狀態(tài)解鎖
- }
- }
- if(key_on==1 && i<16) //限制總時(shí)長1.6S
- {
- i ++; //循環(huán)i次數(shù)+1
- Delay10ms(10);
- }
- /*
- 1次:按y=0,z=0 ;松y=1,z=0
- 2次:按y=1,z=1 ;松y=2,z=0
- 3次:按y=2,z=1 ;松y=3,z=0
- 4次:按y=3,z=1 ;松y=4,z=0
- 長按:按松均為 y=0,z=1
- */
- if(k1 && i>=15) //松開后處理
- {
- if(y==0 && z==1) //長按
- {
- out_1 = 0; out_2 = 0; out_3 = 0;
- }
- else if(z==0 && y>0)
- {
- if(y==1) //單擊
- {
- //out_3 = ~out_3;
- }
- else if(y==2) //雙擊
- {
- out_1 = ~out_1;
- }
- else if(y==3) //三擊
- {
- out_2 = ~out_2;
- }
- else //4擊及以上為長按
- {
- out_1 = 0; out_2 = 0; out_3 = 0;
- }
- }
- i = 0; y = 0; z = 0; key_on = 0;
- }
- }
- }
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|