新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > AT89S52控制混合式步進電機 C程序

        AT89S52控制混合式步進電機 C程序

        作者: 時間:2016-11-22 來源:網絡 收藏
        #include<uart.h>//包含串口通信頭文件(里面含有reg52.h)

        #include//包含printf頭文件
        #define uint unsigned int
        #define uchar unsigned char

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

        sbit cp = P2^0;//脈沖輸入端
        sbit dir = P2^1;//方向控制端
        sbit free = P2^2;//脫機控制端,一般接高即可

        sbit jia_su = P1^0;//加速鍵key1聲明
        sbit jian_su = P1^1;//減速鍵key2聲明
        sbit fang_xiang = P1^2;//切換方向鍵key3聲明
        sbit ting = P1^3;//停止鍵key4聲明
        uint num;
        void uart_Init();//串口初始化子函數聲明

        void delay(uint z)//ms子函數
        {
        uint x,y;
        for(x = 0;xfor(y = 0;y<120;y++);
        }

        void delay1(uint z)//電機延時子函數us級
        {
        uint x;
        for(x = 0;x
        }

        void init()//初始化電機、串口子函數
        {
        num = 2;
        dir = 1;
        free = 1;
        uart_Init();
        }

        void key_scan()//鍵盤控制子函數
        {
        if(jia_su == 0)//判斷有加速鍵按下
        {
        delay(5);//延時消抖
        if(jia_su == 0)//再次判斷有加速鍵按下
        {
        num++;//num(代表電機轉速)增加
        if(num>4)
        {num=4;}
        while(!jia_su);//松手檢測
        delay(5);
        while(!jia_su);
        printf("num = %dn",num);//通過串口查看num值
        }
        }
        if(jian_su == 0)//判斷有減速鍵按下
        {
        delay(5);//延時消抖
        if(jian_su == 0)//再次判斷有減速鍵按下
        {
        num--;//num(代表電機轉速)減小
        if(num<1)
        {num=0;}
        while(!jian_su);//松手檢測
        delay(5);
        while(!jian_su);
        printf("num = %dn",num);//通過串口查看num值
        }
        }
        if(fang_xiang ==0)//判斷是否有方向切換鍵按下
        {
        delay(5);//延時消抖
        if(fang_xiang == 0)
        {
        dir =~dir;//方向改變
        while(!fang_xiang);//松手檢測
        delay(5);
        while(!fang_xiang);
        printf("dir = %dn",dir);
        }
        }
        if(ting ==0)//判斷是否有停止鍵按下
        {
        delay(5);//延時消抖
        if(ting == 0)
        {
        num = 0;//停止
        while(!ting);//松手檢測
        delay(5);
        while(!ting);
        }
        }

        switch(num)
        {
        case 0: cp = 1; break;//電機停止
        case 1: //以低速轉動
        {


        cp = 1;
        delay1(20);
        cp = 0;
        delay1(20);

        }
        break;

        case 2: //以中速轉動
        {


        cp = 1;
        delay1(15);
        cp = 0;
        delay1(15);

        }
        break;

        case 3: //以高速轉動
        {


        cp = 1;
        delay1(10);
        cp = 0;
        delay1(10);

        }
        break;

        case 4: //以更高速轉動
        {


        cp = 1;
        delay1(5);
        cp = 0;
        delay1(5);

        }
        break;
        }

        }
        void main()
        {
        init();//調用初始化子函數
        while(1)
        {
        key_scan();//不停鍵盤掃描
        }

        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 晋中市| 八宿县| 梁平县| 临西县| 永平县| 淄博市| 台东市| 常熟市| 都江堰市| 霍山县| 宁明县| 罗甸县| 左贡县| 连云港市| 茂名市| 商丘市| 岗巴县| 汝南县| 梨树县| 高碑店市| 宁城县| 甘德县| 西乡县| 理塘县| 武夷山市| 兴和县| 论坛| 潮州市| 晋城| 洛隆县| 南部县| 正定县| 广饶县| 达日县| 临泉县| 广南县| 桑日县| 平凉市| 乌鲁木齐市| 家居| 万全县|