?? 編碼器代碼.c
字號:
// Header: 編碼開關代碼
// File Name: Encoder
// Author: 李波
// Date: 2009-04-19 17:00
/*========================================
本代碼為編碼開關代碼,編碼開關也就是數字音響中的
360度旋轉的數字音量以及顯示器上用的(單鍵飛梭開
關)等類似鼠標滾輪的手動計數輸入設備。
我使用的編碼開關為5個引腳的,其中2個引腳為按下
轉輪開關(也就相當于鼠標中鍵)。另外3個引腳用來
檢測旋轉方向以及旋轉步數的檢測端。引腳分別為a,b,c
b接地a,c分別接到P2.0和P2.1口并分別接兩個10K上拉
電阻,并且a,c需要分別對地接一個104的電容,否則
因為編碼開關的觸點抖動會引起輕微誤動作。本程序不
使用定時器,不占用中斷,不使用延時代碼,并對每個
細分步數進行判斷,避免一切誤動作,性能超級穩定。
我使用的編碼器是APLS的EC11B可以參照附件的時序圖
編碼器控制流水燈最能說明問題,下面是以一段流水
燈來演示。
(單片機為STC89C52)=================*/
#include <REGX52.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define NULL 0
uchar x,WheelOld;
uchar Led=0xfe;//LED流水燈初始化
/*定義一下端口為編碼器開關輸入端=========*/
sbit PINA=P2^0; //定義編碼器連接的IO
sbit PINB=P2^1; ////定義編碼器連接的IO
/*過程返回==========*/
uchar WheelLeft()
{
//左轉一步的操作
Led=_crol_(Led,1);
return(NULL);
}
uchar WheelRight()
{
//右轉一步的操作
Led=_cror_(Led,1);
return(NULL);
}
/*編碼器過程====================*/
uchar EncoderProcess()
{
uchar keytmp,keytmp1,keytmp2,WheelNow;
PINA=1; //PINA至高電平
PINB=1;//PINB至高電平
if(PINA==1) //如果PINA為高電平
{
keytmp1=0x01;
}
else keytmp1=0;
if(PINB==1) //如果PINB為高電平
{
keytmp2=0x02;
}
else keytmp2=0;
WheelNow=keytmp1+keytmp2; //根據兩個IO組合成16進制數為0x00|0x01|0x02|0x03
keytmp=WheelNow;
keytmp^=WheelOld; //判斷新數據同舊數據
if(keytmp==0) return(NULL); //如果新數據和原來的數據一樣 就直接退出
if(WheelOld==0 && WheelNow==0x01)
{
x=WheelNow;
}
if(WheelOld==0 && x==0x01 && WheelNow==0x03)
{
WheelOld=WheelNow;
x=0;
return(WheelLeft()); //左旋轉00 01 03
}
if(WheelOld==0x03 && WheelNow==0x02)
{
x=WheelNow;
}
if(WheelOld==0x03 && x==0x02 && WheelNow==0x00)
{
WheelOld=WheelNow;
x=0;
return(WheelLeft()); //左旋轉03 02 00
}
if(WheelOld==0 && WheelNow==0x02)
{
x=WheelNow;
}
if(WheelOld==0 && x==0x02 && WheelNow==0x03)
{
WheelOld=WheelNow;
x=0;
return(WheelRight()); //右旋轉00 02 03
}
if(WheelOld==0x03 && WheelNow==0x01)
{
x=WheelNow;
}
if(WheelOld==0x03 && x==0x01 && WheelNow==0x00)
{
WheelOld=WheelNow;
x=0;
return(WheelRight()); //右旋轉03 01 10
}
}
void main()
{
while (1)
{
EncoderProcess();
P0=Led; //流水燈連接的IO
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -