旋轉(zhuǎn)編碼開關(guān)RotaryEncoderswitch-使用說明及程序_第1頁
旋轉(zhuǎn)編碼開關(guān)RotaryEncoderswitch-使用說明及程序_第2頁
旋轉(zhuǎn)編碼開關(guān)RotaryEncoderswitch-使用說明及程序_第3頁
旋轉(zhuǎn)編碼開關(guān)RotaryEncoderswitch-使用說明及程序_第4頁
旋轉(zhuǎn)編碼開關(guān)RotaryEncoderswitch-使用說明及程序_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、旋轉(zhuǎn)編石§開關(guān)(RotaryEncoderswitch)-使用說明及程序具有左轉(zhuǎn),右轉(zhuǎn),按下三個功能。4、5腳是中間按下去的開關(guān)接線123腳一般是中間2腳接地,1、3腳上拉電阻后,當(dāng)左轉(zhuǎn)、右轉(zhuǎn)旋紐時,在1、3腳就有脈沖信號輸出了。著這是標準資料:SwitchtravelReflowapplicablepartswithpush-onswitch(travel0.5mm)在單片機編程時,左轉(zhuǎn)和右轉(zhuǎn)的判別是難點,用示波器觀察這種開關(guān)左轉(zhuǎn)和右轉(zhuǎn)時兩個輸出腳的信號有個相位差,見下圖:轉(zhuǎn)30下.產(chǎn)生15脈沖AsignalOFFONii11BsignalOFFONflItt定位穩(wěn)定點CWdire

2、ctionA由此可見,如果輸出1為高電平時,輸出2出現(xiàn)一個高電平,這時開關(guān)就是向順時針旋轉(zhuǎn);當(dāng)輸出1為高電平,輸出2出現(xiàn)一個低電平,這時就一定是逆時針方向旋轉(zhuǎn).所以,在單片機編程時只需要判斷當(dāng)輸出1為高電平時,輸出2當(dāng)時的狀態(tài)就可以判斷出是左旋轉(zhuǎn)或是右旋轉(zhuǎn)了。還有另外一種3腳的,除了不帶按鈕開關(guān)外,和上面是一樣的使用#include"reg51.h"#defineuintunsignedintsbitCodingsWitch_A=P1_1;sbitCodingsWitch_B=P1_2;uintCodingsWitchPolling()/staticUcharAold,Bo

3、ld;/定義了兩個變量用來儲蓄上一次調(diào)用此方法是編碼開關(guān)兩引腳的電平staticUcharst;/定義了一個變量用來儲蓄以前是否出現(xiàn)了兩個引腳都為高電平的狀態(tài)uinttmp=0;if(CodingsWitch_A&&CodingsWitch_B)st=1;/if(st)如果st為1執(zhí)行下面的步驟if(CodingsWitch_A=0&&CodingsWitch_B=0)/如果當(dāng)前編碼開關(guān)的兩個引腳都為底電平執(zhí)行下面的步驟if(Bold)/為高說明編碼開關(guān)在向加大的方向轉(zhuǎn)st=0;tmp+;if(Aold)/為高說明編碼開關(guān)在向減小的方向轉(zhuǎn)(st=0;tmp-;/

4、設(shè)返回值)Aold=CodingsWitch_A;/Bold=CodingsWitch_B;/儲returntmp;/)編碼器計數(shù)程序voidencoder_cnt(void)(uchartemp;temp=PIND;/取端口D管腳信號couch_clr=(temp&0x08);/取編碼器清零信號if(couch_clr!=false)/有編碼器清零信號(couch_num=0;/水平床碼清零)else(if(encoder_cnt_en=false)/編碼器計數(shù)模塊沒有啟動(pr_couch_ba=temp&0x03;/取編碼器A、B相電平信號)else(couch_ba=t

5、emp&0x03;/取編碼器A、B相電平信號if(pr_couch_ba=0x00)(if(couch_ba=0x01)(couch_num+;/水平床碼加1)elseif(couch_ba=0x10)(couch_num-;水平床碼減1)elseif(pr_couch_ba=0x01)(if(couch_ba=0x11)(couch_num+;/水平床碼加1)elseif(couch_ba=0x00)(couch_num-;/水平床碼減1)elseif(pr_couch_ba=0x10)(if(couch_ba=0x00)(couch_num+;/水平床碼加1)elseif(couc

6、h_ba=0x11)(couch_num-;/水平床碼減1)elseif(pr_couch_ba=0x11)(if(couch_ba=0x10)(couch_num+;/水平床碼加1)elseif(couch_ba=0x01)(couch_num-;水平床碼減1)pr_couch_ba=couch_ba;)編碼器及其計數(shù)模塊原理飄揚的旋轉(zhuǎn)編碼器的檢測程序(MCS51)旋轉(zhuǎn)編碼器檢測程序,A/B信號分別接在了INT0和INT1上程序作者:BG4UVR/2005年1月15用KEIL編譯、硬件測試通過注意:編碼器的信號,程序未做消抖處理。測試中,A/B信號上各接了一只104的瓷片電容,工作很正常。如

7、果不接電容,請自行編寫信號消抖程序。#include<at89x51.h>sbitled="0xB1"/有一只LED接在了RXD引腳上,用來指示正反轉(zhuǎn)main()(EA=1;/總中斷允許EX0=1;/外部中斷0允許IT0=1;/外部中斷0為邊沿觸發(fā)方式while(1);)/*編碼器中斷函數(shù)入口:無出口:無*/voidencoder(void)interrupt0/外部中斷0if(INT1)led=1;elseled=0;whimsy的AVR程序外部中斷0,用于編碼開關(guān)解碼,解碼圖:A接中斷腳(AVR的PD2),以此為基準,B用來判斷方向(連到AVR的PA1),C

8、接地/A-|/|1/C-|/B-|/|1|1/C-|/CW=>>>ROTATION外部中斷設(shè)置(ISC01=0,ISC00=1):INT0引腳上任意的邏輯電平變化都將引發(fā)中斷#pragmainterrupt_handlerint0_isr:2voidint0_isr(void)/externalinteruptonINT0GICR=0;/禁止外部中斷if(PIND&0x04)=0)/先判斷是高電平產(chǎn)生的中斷還是低點平的中斷if(PINA&0x02)=0)/再判斷B線上的電平keycounter-;keydirection="0"elsekeycounter+;keydirectio

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論