久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

自寫程序:旋轉編碼器軟件方式掃描計數

作者:佚名   來源:本站原創   點擊數:  更新時間:2010年05月21日   【字體:

   國培期間時間相對而言比較充裕,于是就想寫點程序。來的時候帶了一個旋轉編碼開關,今天晚上寫了個程序測試了一下,通過了,程序能夠識別編碼開關的旋轉方向和旋轉次數,并且在數碼管上顯示出來。支持負數顯示。以下為源程序,程序在一職校開發板上運行成功,芯片為STC89C51RC。

#include < reg52.h>  //頭文件 
sbit anotherbit = P1^2; //旋轉編碼器另一腳 
sbit rotation=P1^0;  //旋轉編碼器中一腳 
bit oldbit;    //上一狀態暫存位 
unsigned char led1,led2,led3,led4,ztj;//LED顯示緩存,掃描狀態機 
int xuanzhuanzhi,ctemp;//旋轉值 
unsigned char code ledseg[17]={0x88,0xBE,0xC4,0x94,0xB2,0x91,0x81,0xBC,0x80, 
                               0x90,0xA0,0x83,0xC9,0x86,0xC1,0xE1,0xf7}; 
void init(void) 
     { 
  TMOD=0x11;  //方式1 
  TR0=1;   //啟動T0開始掃描數碼管 
  ET0=1;   //打開中斷 
  EA=1; 
  } 
void ledscan(void) //數碼管掃描程序 
     { 
  switch(ztj) //切換狀態機 
    { 
    case 0:  //分支 
  P2=0xff; //關閉數碼管 
  P0=ledseg[led4];//查表得段碼數據 
  P2=0x7f; //打開數碼管 
  ztj=1;  //轉移狀態 
    break;  //分支結束 
    case 1: 
  P2=0xff; 
  P0=ledseg[led3]; 
  P2=0xbf; 
  ztj=2; 
    break; 
    case 2: 
  P2=0xff; 
  P0=ledseg[led2]; 
  P2=0xdf; 
  ztj=3; 
    break; 
    case 3: 
  P2=0xff; 
  P0=ledseg[led1]; 
  P2=0xef; 
  ztj=0; 
    break; 
    default:  //沒有找到分支 
    ztj=0;  //狀態機復位 
    break;  //分支結束 
    } 
  } 
void timer0 (void) interrupt 1 using 1 //T0定時器中斷程序,定時時間到,自動運行此程序 
     { 
  TH0=(65536-5000)/256;    //置定時值,每次時間到都要重新置定時值 
  TL0=(65536-5000)%256;    //每5000us產生一次定時器定時中斷(12MHz) 
  ledscan();       //每5000us掃描一次LED(12MHz) 
  } 
void main(void) 
{ 
init();            //是初始化,打開中斷及定時器 
while(1) 
  { 
      ctemp=xuanzhuanzhi;    //復制計數值 
   if(ctemp<0)      //判斷符號 
   { 
   ctemp=-ctemp;      //如果為負數,取反 
   led4=16;       //顯示負號 
   led3=ctemp%1000/100;   //提取各位數值 
   led2=ctemp%100/10;   //提取各位數值 
   led1=ctemp%10;    //提取各位數值 
   } 
   else 
   { 
   led4=ctemp/1000;    //提取各位數值 
   led3=ctemp%1000/100;   //提取各位數值 
   led2=ctemp%100/10;   //提取各位數值 
   led1=ctemp%10;    //提取各位數值 
   } 
   if(oldbit==1&&rotation==0) //判斷前后狀態以識別是否發生下降沿 
   { 
   if(anotherbit)    //判斷另一相電平 
    { 
     xuanzhuanzhi++;   //為高,正轉 
    } 
    else 
    { 
    xuanzhuanzhi--;   //為低,反轉 
    } 
   } 
   oldbit=rotation;    //刷新位暫存值 
  } 
} 

關閉窗口

相關文章

主站蜘蛛池模板: 国产精品久久777777 | 中文字幕精品视频 | 成人一区二 | 国产成人在线播放 | www.9191.com| 成人高清网站 | 一级视频黄色 | 亚洲一区视频在线 | 日本成人福利 | 狠狠狠色丁香婷婷综合久久五月 | 日韩欧美不卡 | 国产最新网址 | 欧美国产视频一区二区 | 中文字幕日韩欧美一区二区三区 | 亚洲在线成人 | 在线日韩在线 | 极品的亚洲 | 日韩欧美手机在线 | 日日天天 | 久久久久国产精品 | 中文字幕av在线 | 欧美精品一区二区三区在线播放 | 国产一区二区三区在线免费观看 | 一区二区免费在线视频 | 欧美区在线观看 | 成人av一区二区亚洲精 | 中文字幕一区在线观看视频 | 日韩中文不卡 | 欧美久久久网站 | 色综合一区 | 精精国产xxxx视频在线 | 成人av播放 | 亚洲国产精品99久久久久久久久 | 精品自拍视频在线观看 | 国产精品69毛片高清亚洲 | 国产成人福利在线观看 | 国产精品中文字幕一区二区三区 | 国产高清精品一区二区三区 | 97超级碰碰 | 色综合天天天天做夜夜夜夜做 | 亚洲一区视频在线 |