- /*!
- * COPYRIGHT NOTICE
- * Copyright (c) 2018,CQ
- * All rights reserved.
- *
- *
- *
- *
- * @file EC11.c
- * @brief
- * @author CQ
- * @version V1.1
- * @date 2018-11-4
- * latest amendment time :2018.11.4
- */
- #include"EC11.h"
- static bit EC11_SIA_Last;
- static bit EC11_SIB_Last;
- sbit EC11_SIA=P3^2;
- sbit EC11_SIB=P3^4;
- sbit EC11_SW=P3^3;
- Ec11StateType Ec11State=
- {
- KeyFree,
- EncoderFree,
- };
- /************************************************************
- * Function name : EC11_Capture
- * function discription : EC11 state capture
- *
- * input parameter : none
- * output parameter : none
- *
- * amendant record :
- Add this function for the first time 2018-11-4
- * author : CQ
- * date : 2018-11-4
- *************************************************************/
- void Ec11Capture(void)
- {
- static unsigned char EC11KeyStateTemp = 0,EC11KeyCount=0;
- bit EC11KeyPressTemp;
- EC11KeyPressTemp =EC11_SW;
- if((EC11_SIA_Last==0)&&(EC11_SIA==1))// EC11_SIA和上一次狀態(tài)相比,為上升沿
- {
-
- if((EC11_SIB_Last == 1)&&(EC11_SIB == 0)) //EC11_B和上一次狀態(tài)相比,為下降沿
- {
- Ec11State.EncoderState=EncoderSub; //反轉(zhuǎn)
- }
- if((EC11_SIB_Last == 0)&&(EC11_SIB == 1)) //EC11_B和上一次狀態(tài)相比,為上升沿
- {
- Ec11State.EncoderState=EncoderAdd; //正轉(zhuǎn)
- }
- //>>>>>>>>>>>>>>>>下面為正轉(zhuǎn)一次再反轉(zhuǎn)或反轉(zhuǎn)一次再正轉(zhuǎn)處理<<<<<<<<<<<<<<<<//
- if((EC11_SIB_Last == EC11_SIB)&&(EC11_SIB == 0)) //A上升沿時(shí),采集的B不變且為0
- {
- Ec11State.EncoderState=EncoderSub; //反轉(zhuǎn)
- }
- if((EC11_SIB_Last == EC11_SIB)&&(EC11_SIB == 1)) //A上升沿時(shí),采集的B不變且為1
- {
- Ec11State.EncoderState=EncoderAdd; //正轉(zhuǎn)
- }
- }
- else if((EC11_SIA_Last==1)&&(EC11_SIA==0)) //EC11_SIA和上一次狀態(tài)相比,為下降沿
- {
- if((EC11_SIB_Last == 1)&&(EC11_SIB == 0)) //EC11_B和上一次狀態(tài)相比,為下降沿
- {
- Ec11State.EncoderState=EncoderAdd; //正轉(zhuǎn)
- }
- if((EC11_SIB_Last == 0)&&(EC11_SIB == 1)) //EC11_B和上一次狀態(tài)相比,為上升沿
- {
- Ec11State.EncoderState=EncoderSub; //反轉(zhuǎn)
- }
- //>>>>>>>>>>>>>>>>下面為正轉(zhuǎn)一次再反轉(zhuǎn)或反轉(zhuǎn)一次再正轉(zhuǎn)處理<<<<<<<<<<<<<<<<//
- if((EC11_SIB_Last == EC11_SIB)&&(EC11_SIB == 0)) //A上升沿時(shí),采集的B不變且為0
- {
- Ec11State.EncoderState=EncoderAdd; //正轉(zhuǎn)
- }
- if((EC11_SIB_Last == EC11_SIB)&&(EC11_SIB == 1)) //A上升沿時(shí),采集的B不變且為1
- {
- Ec11State.EncoderState=EncoderSub; //反轉(zhuǎn)
- }
- }
- EC11_SIA_Last = EC11_SIA; //更新編碼器上一個(gè)狀態(tài)暫存變量
- EC11_SIB_Last = EC11_SIB; //更新編碼器上一個(gè)狀態(tài)暫存變量
-
-
- /************************EC11_SW key scan************************************/
- switch(EC11KeyStateTemp)
- {
- case 0:
- if(EC11KeyPressTemp==0)
- EC11KeyStateTemp=1;
- break;
- case 1:
- if(EC11KeyPressTemp==0)
- {
- EC11KeyStateTemp=2;
- }
- else
- EC11KeyStateTemp=0;
- break;
- case 2:
- if(EC11KeyPressTemp==1)
- {
- if(EC11KeyCount<100)
- {
- Ec11State.KeyState=KeyDown;
- }
- EC11KeyStateTemp=0;
- EC11KeyCount=0;
- }
- else
- {
- if(EC11KeyCount<100)
- {
- EC11KeyCount++;
- }
- else if(EC11KeyCount==100)
- {
- Ec11State.KeyState=KeyHold;
- EC11KeyCount++;
- }
- }
- break;
- }
-
- }
- Ec11StateType Ec11State;
請(qǐng)問(wèn)26-30行的格式和意義,小白不懂,望大師賜教。謝謝。
|