色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 步進(jìn)電機(jī)正反轉(zhuǎn)和加速減速c源程序

          步進(jìn)電機(jī)正反轉(zhuǎn)和加速減速c源程序

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

          這是一個(gè)群里朋友發(fā)給我的實(shí)現(xiàn)正轉(zhuǎn)反轉(zhuǎn)和的單片機(jī)c語言源程序,這里給大家共享下,有需要的朋友直接復(fù)制到keil里編譯就可以了,程序已測(cè)試成功。

          /*****************************************
          單4拍正轉(zhuǎn) zheng[]={0x01,0x08,0x04,0x02}
          單4拍反轉(zhuǎn) fang[]={0x01,0x02,0x04,0x08}

          雙4拍正轉(zhuǎn) zheng[]={0x09,0x0c,0x06,0x03}
          雙4拍反轉(zhuǎn) fang[]={0x03,0x06,0x0c,0x09}

          單雙8拍正轉(zhuǎn) zheng[]={0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03}
          單雙8拍反轉(zhuǎn) fang[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}
          *****************************************/

          #include"reg51.h"
          #include"intrins.h"
          #define uchar unsigned char
          #define uint unsigned int
          bit front_move,back_move;

          uchar jzaj(void); //單4拍正轉(zhuǎn) zheng[]={0x01,0x08,0x04,0x02}; 單4拍反轉(zhuǎn) fang[]={0x01,0x02,0x04,0x08};
          void ajcl(uchar jz);
          void delay(uchar del);

          uchar code zheng[]={0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03};
          uchar code fang[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};

          void timer0() interrupt 1
          {
          static uchar jz;
          TH0=0xfc;
          TL0=0x18;
          jz=jzaj();
          if(jz)
          ajcl(jz);
          }

          //程序
          //實(shí)用于51系列單片機(jī) http://www.51hei.com首發(fā),程序運(yùn)行有問題請(qǐng)聯(lián)系本站。
          void main()
          {
          uchar count=0;
          TMOD=0x01;
          TH0=0xFC;
          TL0=0x18;
          TR0=1;
          ET0=1;
          EA=1;
          while(1)
          {
          if(front_move)
          {
          P2=zheng[count];
          delay(100);
          count++;
          if(count==8) count=0;
          }
          if(back_move)
          {
          P2=fang[count];
          delay(100);
          count++;
          if(count==8) count=0;
          }
          }
          }

          uchar jzaj(void)
          {
          uchar hz,lz;
          P1=0xf0; //置所有行為低電平,行掃描,列線輸入(此時(shí))
          if((P10xf0)!=0xf0) //判斷是否有有鍵按下(讀取列的真實(shí)狀態(tài),若第4列有鍵按下則P1的值會(huì)變成0111 0000),有往下執(zhí)行
          {
          delay(10); //延時(shí)去抖動(dòng)(10ms)
          if((P10xf0)!=0xf0) //再次判斷列中是否是干擾信號(hào),不是則向下執(zhí)行
          {
          hz=0xfe; //逐行掃描初值(即先掃描第1行)
          while((hz0x10)!=0) //行掃描完成時(shí)(即4行已經(jīng)全部掃描完成)sccode為1110 1111 停止while程序
          {
          P1=hz; //輸出行掃描碼
          if ((P1hz)!=hz) //***(P20xf0)!=0xf0***也可這樣 本行有鍵按下(即P1(真實(shí)的狀態(tài))的高四位不全為1)
          {
          lz=(P10xf0)|0x0f; //列
          while((P10xf0)!=0xf0);
          return((~hz)|(~lz)); //返回行和列
          break; //有按鍵返回 提前退出循環(huán)

          }
          else //所掃描的行沒有鍵按下,則掃描下一行,直到4行都掃描,此時(shí)sccode值為1110 1111 退出while程序
          hz=_crol_(hz,1);//行掃描碼左移一位

          }
          }
          }
          else
          return 0; //無鍵按下,返回0
          }
          void ajcl(uchar jz)
          {
          if(jz==0x11)
          {
          back_move=0;
          front_move=1;
          }
          if(jz==0x21)
          {
          front_move=0;
          back_move=1;
          }
          if(jz==0x41)
          {
          P2=0x00;
          front_move=0;
          back_move=0;
          }

          }
          void delay(uchar del)
          {
          uchar i;
          for(;del>0;del--)
          for(i=0;i125;i++)
          {;}
          }

          c語言相關(guān)文章:c語言教程




          評(píng)論


          相關(guān)推薦

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

          關(guān)閉