• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 步進電機正反轉和加速減速c源程序

    步進電機正反轉和加速減速c源程序

    作者: 時間:2012-12-05 來源:網絡 收藏

    這是一個群里朋友發給我的實現正轉反轉和的單片機c語言源程序,這里給大家共享下,有需要的朋友直接復制到keil里編譯就可以了,程序已測試成功。

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

    雙4拍正轉 zheng[]={0x09,0x0c,0x06,0x03}
    雙4拍反轉 fang[]={0x03,0x06,0x0c,0x09}

    單雙8拍正轉 zheng[]={0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03}
    單雙8拍反轉 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拍正轉 zheng[]={0x01,0x08,0x04,0x02}; 單4拍反轉 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);
    }

    //程序
    //實用于51系列單片機 http://www.51hei.com首發,程序運行有問題請聯系本站。
    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; //置所有行為低電平,行掃描,列線輸入(此時)
    if((P10xf0)!=0xf0) //判斷是否有有鍵按下(讀取列的真實狀態,若第4列有鍵按下則P1的值會變成0111 0000),有往下執行
    {
    delay(10); //延時去抖動(10ms)
    if((P10xf0)!=0xf0) //再次判斷列中是否是干擾信號,不是則向下執行
    {
    hz=0xfe; //逐行掃描初值(即先掃描第1行)
    while((hz0x10)!=0) //行掃描完成時(即4行已經全部掃描完成)sccode為1110 1111 停止while程序
    {
    P1=hz; //輸出行掃描碼
    if ((P1hz)!=hz) //***(P20xf0)!=0xf0***也可這樣 本行有鍵按下(即P1(真實的狀態)的高四位不全為1)
    {
    lz=(P10xf0)|0x0f; //列
    while((P10xf0)!=0xf0);
    return((~hz)|(~lz)); //返回行和列
    break; //有按鍵返回 提前退出循環

    }
    else //所掃描的行沒有鍵按下,則掃描下一行,直到4行都掃描,此時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語言相關文章:c語言教程




    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 长宁县| 饶河县| 博乐市| 江油市| 藁城市| 称多县| 防城港市| 祁连县| 塔河县| 齐齐哈尔市| 江孜县| 新晃| 黑山县| 越西县| 屯昌县| 绍兴市| 鄂托克前旗| 杭锦旗| 盐城市| 密山市| 原阳县| 措勤县| 永登县| 织金县| 大城县| 鄂州市| 萨迦县| 湖北省| 赣州市| 资阳市| 吉隆县| 乌兰县| 泰宁县| 乌审旗| 长武县| 新昌县| 荣成市| 深泽县| 泰州市| 通许县| 会同县|