<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 自寫程序:旋轉(zhuǎn)編碼器軟件方式掃描計(jì)數(shù)

          自寫程序:旋轉(zhuǎn)編碼器軟件方式掃描計(jì)數(shù)

          作者: 時(shí)間:2012-10-27 來源:網(wǎng)絡(luò) 收藏

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

          #include  reg52.h>  //頭文件 sbit anotherbit = P1^2; //另一腳 sbit rotation=P1^0;  //中一腳 bit oldbit;    //上一狀態(tài)暫存位 unsigned char led1,led2,led3,led4,ztj;//LED顯示緩存,掃描狀態(tài)機(jī) int xuanzhuanzhi,ctemp;//旋轉(zhuǎn)值 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;   //啟動(dòng)T0開始掃描數(shù)碼管 ET0=1;   //打開中斷 EA=1; } void ledscan(void) //數(shù)碼管掃描程序 { switch(ztj) //切換狀態(tài)機(jī) { case 0:  //分支 P2=0xff; //關(guān)閉數(shù)碼管 P0=ledseg[led4];//查表得段碼數(shù)據(jù) P2=0x7f; //打開數(shù)碼管 ztj=1;  //轉(zhuǎn)移狀態(tài) break;  //分支結(jié)束 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;  //狀態(tài)機(jī)復(fù)位 break;  //分支結(jié)束 } } void timer0 (void) interrupt 1 using 1 //T0定時(shí)器中斷程序,定時(shí)時(shí)間到,自動(dòng)運(yùn)行此程序 { TH0=(65536-5000)/256;    //置定時(shí)值,每次時(shí)間到都要重新置定時(shí)值 TL0=(65536-5000)%256;    //每5000us產(chǎn)生一次定時(shí)器定時(shí)中斷(12MHz) ledscan();       //每5000us掃描一次LED(12MHz) } void main(void) { init();            //是初始化,打開中斷及定時(shí)器 while(1) { ctemp=xuanzhuanzhi;    //復(fù)制計(jì)數(shù)值 if(ctemp0)      //判斷符號(hào) { ctemp=-ctemp;      //如果為負(fù)數(shù),取反 led4=16;       //顯示負(fù)號(hào) led3=ctemp%1000/100;   //提取各位數(shù)值 led2=ctemp%100/10;   //提取各位數(shù)值 led1=ctemp%10;    //提取各位數(shù)值 } else { led4=ctemp/1000;    //提取各位數(shù)值 led3=ctemp%1000/100;   //提取各位數(shù)值 led2=ctemp%100/10;   //提取各位數(shù)值 led1=ctemp%10;    //提取各位數(shù)值 } if(oldbit==1rotation==0) //判斷前后狀態(tài)以識(shí)別是否發(fā)生下降沿 { if(anotherbit)    //判斷另一相電平 { xuanzhuanzhi++;   //為高,正轉(zhuǎn) } else { xuanzhuanzhi--;   //為低,反轉(zhuǎn) } } oldbit=rotation;    //刷新位暫存值 } } 



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();