關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 步進電機控制程序(c語言+51單片機)

        步進電機控制程序(c語言+51單片機)

        作者: 時間:2011-05-01 來源:網絡 收藏

        #includereg51.h>

        本文引用地址:http://www.104case.com/article/162126.htm

        #define uint unsigned int
        #define uchar unsigned char
        #define ms *77
        // f = 12 M
        #define LEDLen 4
        #define Dj_star() {IE=0x81; pri_dj=0; }
        #define Dj_stop() {IE=0x00; pri_dj=1; P1=0xff; shache=0; delay(800ms); delay(800ms);delay(400ms); shache = 1; }
        #define Chilun_Num 8
        /* 齒輪數 8 個*/
        #define set_display_num() { LEDBuf[0] = tmp / 1000; LEDBuf[1] = tmp / 100 % 10;
        LEDBuf[2] = tmp / 10 % 10; LEDBuf[3] = tmp % 10; }
        uchar LEDBuf[LEDLen] = {0,0,0,0};
        void read_num (); /* 讀播碼盤 到 set_round_num * 8 */
        void display ();
        void delay(uint delay_time) { uint i; for (i=0; i delay_time ; i++) ; }
        void run ();
        void fx_run();

        uint round_num = 0; /* 記錄已轉的 齒輪數 , 中斷1次 加 1*/
        uint set_round_num = 0; /* 播碼盤設置 圈數 */
        uint set_pwm_width = 0; /* 播碼盤設置 正向速度 */
        bit one_round_flg = 0;
        sbit led_1000 = P0^7; //use for display
        sbit led_100 = P0^6; //use for display
        sbit led_10 = P0^5; //use for display
        sbit led_1 = P0^4; //use for display

        sbit key_start = P3^0;
        sbit key_puse = P3^0;
        sbit key_clear = P3^1;
        /* P3^2 接齒輪傳感器 中斷 */
        sbit bujin_zx_stop = P3^3; /* 接 ,正向到位傳感器 ,為 0 停機 */
        sbit bujin_fx_stop = P3^4; /* 接 ,反向到位傳感器 ,為 0 停機 */

        sbit shache = P3^5; /* 接剎車繼電器 0 電位有效 */
        sbit pri_dj = P3^6; /* 接主電機繼電器 0 電位有效 */

        void main(){
        TCON = 0x01;
        display();
        while(1) {
        IE=0x00;
        round_num = 0;
        display();
        if ( bujin_fx_stop ) fx_run();
        while ( key_start );
        delay ( 8ms );
        if(!key_start){
        read_num();
        //set_round_num = 8;
        while ( !key_start );
        run ();
        fx_run();
        }
        }
        }

        void run () {
        #define Delay_time 180
        /* 轉一圈 50 次循環,每循環 4 步 ,50 * 4 = 200 , 200 * 1。8 = 360 */
        uchar i ;
        P1 = 0xff;
        set_pwm_width = 15 + set_pwm_width / 10;
        while ( 1 ) {

        while( !shache | !key_start );
        Dj_star();
        for ( i=0 ; bujin_zx_stop !pri_dj;i++ ){
        P1 = 0xf9;
        delay ( Delay_time ); // bujin_zx_stop = P3^3;
        P1 = 0xfc; // bujin_fx_stop = P3^4;
        delay ( Delay_time); // key_puse = P3^0;
        P1 = 0xf6; // key_clear = P3^1;
        delay ( Delay_time ); // shache = P3^5;
        P1 = 0xf3; // pri_dj = P3^6;
        delay ( Delay_time );
        if( i == set_pwm_width ) { P1 = 0xff; i = 0; one_round_flg = 0; while ( !one_round_flg key_puse );}
        if(!key_puse) { delay(4ms); if(!key_puse) break; }
        }

        P1 = 0xff;
        if ( pri_dj ) break;

        if ( !key_puse ) {
        delay ( 8ms );
        if ( !key_puse ) {
        Dj_stop();
        while ( !key_puse );
        // next pree key
        while( !shache );

        while(1){
        while ( key_puse key_clear );
        delay ( 8ms );
        if ( !key_clear ) { round_num = 0; display(); }
        if ( !key_puse ) break;
        }
        while( !key_puse );
        delay(8ms);
        while( !key_puse );
        }
        }
        }
        }

        51單片機相關文章:51單片機教程


        c語言相關文章:c語言教程



        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 大洼县| 舒城县| 休宁县| 梧州市| 莱州市| 朔州市| 泸定县| 西盟| 南京市| 鄄城县| 彝良县| 康马县| 满洲里市| 丰原市| 碌曲县| 正安县| 崇左市| 张家港市| 昌平区| 宜良县| 商河县| 辽宁省| 施甸县| 涡阳县| 阿克陶县| 景泰县| 宣化县| 天峨县| 塘沽区| 灌南县| 普宁市| 广河县| 龙江县| 武冈市| 青河县| 屯留县| 松桃| SHOW| 新巴尔虎右旗| 双江| 石嘴山市|