技術(shù)文章您的位置:網(wǎng)站首頁 >技術(shù)文章>旋轉(zhuǎn)編碼器程序簡介
      旋轉(zhuǎn)編碼器程序簡介
      更新時間:2013-05-08   點擊次數(shù):4296次
      zui近用到旋轉(zhuǎn)編碼器,在網(wǎng)上找了一大堆資料,發(fā)現(xiàn)這篇好文章。供大家參考!
      [ME850擴展應(yīng)用]旋轉(zhuǎn)編碼器計數(shù)程序(飛梭旋鈕功能)-數(shù)碼管顯示
      /*******************************************************************
      * *
      * ME850單片機開發(fā)實驗儀演示程序 - 旋轉(zhuǎn)編碼器計數(shù)程序 *
      * *
      * 3位數(shù)碼管顯示 *
      * *
      * MCU: AT89S52 晶振:11.0592MHz *
      * *
      * 版本:V1.1 (2009/04/29) *
      * 作者:gguoqing (: gguoqing@) *
      * : (碩飛科技) *
      * (偉納單片機世界) *
      * :sofitech@ *
      * *
      *【版權(quán)】Copyright(C) 深圳碩飛科技有限公司 All Rights Reserved *
      *【聲明】此程序僅用于學(xué)習(xí)與參考,引用請注明版權(quán)和作者信息! *
      * *
      ********************************************************************
      * *
      * 功能簡述: (飛梭旋鈕功能) *
      * 當(dāng)旋鈕順時針旋轉(zhuǎn)時,計數(shù)值增加。達(dá)到zui大值255后,不再響應(yīng)。 *
      * 當(dāng)逆鈕順時針旋轉(zhuǎn)時,計數(shù)值減小。達(dá)到zui小值0后,不再響應(yīng)。 *
      * 當(dāng)按下旋鈕時,將計數(shù)值清零(歸位)。 *
      * *
      *******************************************************************/
      #Include <reg52.h>
      sbit PINA = P1^0;
      sbit PINB = P1^1;
      sbit PIND = P1^2;
      unsigned char display[3];
      unsigned char code LEDData[ ] =
      {
      0xC0,0xF9,0xA4,0xB0,0x99,0x92,
      0x82,0xF8,0x80,0x90,0xff
      };
      char code reserve[3]_at_ 0x3b; //保留0x3b開始的3個字節(jié)
      unsigned char counter = 0; //編碼器脈沖計數(shù)
      unsigned char n,shift;
      /**********************************************************
      ms延時子函數(shù)
      **********************************************************/
      void delayms(unsigned int ms)
      {
      unsigned char k;
      while (ms--)
      {
      for (k = 0; k < 114; k++)
      ;
      }
      }
      /**********************************************************
      掃描編碼器子函數(shù)
      在編碼器引腳A為低電平期間:
      編碼器引腳B從0到1為正轉(zhuǎn),編碼器引腳B從1到0為反轉(zhuǎn)。
      **********************************************************/
      void scan_encoder(void)
      {
      static bit Curr_encoder_b; //定義一個變量來儲存當(dāng)前B信號
      static bit Last_encoder_b; //定義一個變量來儲存上次B腳信號
      static bit updata= 0;
      if( PINA && PINB) //編碼器無轉(zhuǎn)動退出
      {
      updata = 0;
      return;
      }
      Last_encoder_b = PINB; //記錄B信號
      while(!PINA) //等待A由低變高
      {
      Curr_encoder_b = PINB; //記錄等待期間的B信號(指當(dāng)前B信號)
      updata = 1;
      }
      if(updata)
      {
      updata = 0 ;
      if( (Last_encoder_b == 0)&&(Curr_encoder_b== 1) ) //B從0到1為正轉(zhuǎn)
      {
      if(counter == 255)
      return;
      counter++; //正轉(zhuǎn)計數(shù)加
      }
      else if( (Last_encoder_b == 1)&&(Curr_encoder_b == 0) ) //B從1到0為反轉(zhuǎn)
      {
      if(counter == 0)
      return;
      counter--; //反轉(zhuǎn)計數(shù)減
      }
      }
      }
      /**********************************************************
      主函數(shù)
      **********************************************************/
      void main(void)
      {
      P0 = 0xff;
      P1 = 0xff;
      P2 = 0xff;
      T2CON = 0x00; //設(shè)置T2CON寄存器
      TH2 = 0xfc; //1ms定時
      TL2 = 0x66;
      ET2 = 1; //啟用Timer2中斷
      EA = 1; //總中斷允許
      TR2 = 1; //啟動定時器2
      counter = 0; //計數(shù)單元清零
      while(1)
      {
      scan_encoder();
      if(! PIND) //當(dāng)按下旋鈕時
      {
      counter = 0; //計數(shù)單元清零(歸位)
      delayms(10);
      }
      }
      }
      /*********************************************************
      Timer2中斷函數(shù)
      **********************************************************/
      void timer2() interrupt 5
      {
      TR2 = 0;
      TF2 = 0; //手工清中斷標(biāo)志
      TH2 = 0xfc; //1ms定時常數(shù)
      TL2 = 0x66;
      if(n >= 3) //3位數(shù)碼管顯示
      {
      n = 0;
      shift = 0xfe; //送位碼初值
      P2 = 0xff; //關(guān)閉顯示
      }
      else
      {
      display[0] = counter%10; //個位數(shù)據(jù)
      display[1] = (counter%100)/10; //十位數(shù)據(jù)
      display[2] = counter/100; //百位數(shù)據(jù)

      if(display[2] == 0)
      {
      display[2] = 0x0a; //百位為0,不顯示
      if(display[1] == 0)
      display[1] =0x0a; //十位為0,不顯示
      }
      P0 = LEDData[display[n++]]; //送段碼
      P2 = shift; //送位碼
      shift = (shift<<1)|0x01; //調(diào)整位碼
      }
      TR2 = 1;
      }
      網(wǎng)站首頁 關(guān)于我們 新聞中心 產(chǎn)品中心 聯(lián)系我們
      備案號:滬ICP備09051314號-3   GoogleSitemap   技術(shù)支持:智能制造網(wǎng) 管理登陸
      © 2018 上海德晶光電科技有限公司DECHING(m.njxh518.com) 版權(quán)所有 總訪問量:492775
      亚洲Aⅴ无码一区二区二三区软件 亚洲AⅤ视频一区二区三区 | 亚洲VA成无码人在线观看天堂| 含羞草国产亚洲精品岁国产精品| 亚洲国产夜色在线观看| 久久亚洲伊人中字综合精品| 亚洲国产综合无码一区| 久久久久亚洲?V成人无码| 亚洲福利视频一区二区| 精品久久亚洲一级α| 亚洲精品无码久久久久秋霞| 亚洲中文字幕无码mv| 国产精品亚洲精品青青青| 亚洲一级片在线观看| 亚洲伊人色一综合网| 亚洲午夜精品在线| 亚洲国产精品成人综合色在线婷婷 | 亚洲免费网站观看视频| 456亚洲人成影院在线观| 亚洲18在线天美| 亚洲免费闲人蜜桃| 亚洲av一本岛在线播放| 亚洲色欲色欲www| 狠狠色伊人亚洲综合网站色| 国产精品亚洲片在线va| 亚洲人成综合网站7777香蕉| 亚洲 欧洲 日韩 综合在线| 亚洲砖码砖专无区2023| 亚洲风情亚Aⅴ在线发布| 久久亚洲精品无码av| 亚洲精品欧美综合四区| 色欲色欲天天天www亚洲伊| 国产精品无码亚洲精品2021| 日韩精品亚洲专区在线观看| 九月婷婷亚洲综合在线| 亚洲天堂在线视频| 国产亚洲精品无码拍拍拍色欲| 亚洲人成伊人成综合网久久久| 亚洲成AV人片在| 亚洲网站视频在线观看| 亚洲中字慕日产2020| 亚洲午夜成人精品无码色欲|