新聞中心

        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語言教程




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 隆安县| 颍上县| 阜城县| 日土县| 韩城市| 阳东县| 开封县| 吉木萨尔县| 闸北区| 永德县| 台湾省| 大丰市| 奉新县| 长寿区| 巫溪县| 广元市| 濮阳市| 蚌埠市| 华宁县| 富顺县| 保康县| 衢州市| 秦皇岛市| 沙河市| 东兰县| 溧水县| 临城县| 灵台县| 濮阳县| 博乐市| 新邵县| 安图县| 仲巴县| 凤台县| 德钦县| 南开区| 天长市| 巨野县| 德保县| 水富县| 桑日县|