|
是一個(gè)數(shù)字閥的控制系統(tǒng) 帶步進(jìn)電機(jī)啟動(dòng)/停止 正轉(zhuǎn)/反轉(zhuǎn) 正加/逆減 正加/逆減 設(shè)定加速度 設(shè)定角度等按鍵功能
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (18.87 KB, 下載次數(shù): 34)
下載附件
2018-2-9 00:32 上傳
數(shù)字閥的步進(jìn)電機(jī)驅(qū)動(dòng)控制系統(tǒng)設(shè)計(jì)單片機(jī)源程序如下:
- #include <REGX51.H>
- #include "def.h"
- #include "lcd1602.h"
-
- void MotorStop(void); //聲明函數(shù)
- void qx (u16 ii);
- void zt (void);
- sbit k1=P3^2; // 運(yùn)行與停止
- sbit k2=P2^1; // 方向轉(zhuǎn)換
- sbit k3=P2^2; // 速度調(diào)整
- sbit k4=P2^3; // 設(shè)定圈數(shù)
- u8 code ffw[4] ={0x01,0x02,0x04,0x08}; // 正轉(zhuǎn)
- u8 code rev[4] ={0x08,0x04,0x02,0x01}; // 反轉(zhuǎn)
- u16 snum=156; //預(yù)設(shè)角度
- u16 rate=101; //預(yù)設(shè)速率
- u16 ii; //角度顯示
- u16 ia=100; //報(bào)警值
- void Delay_xms(u8 x)//ms延時(shí)函數(shù)
- {
- u8 i,j;
- for(i=0;i<x;i++)
- for(j=0;j<112;j++);
- }
- bit on_off=1; // 運(yùn)行與停止標(biāo)志
- bit direction=1; //方向標(biāo)志
- void to(void) //外部中斷
- {
- IT0=1;
- EX0=1;
- EA=1;
- }
- void bao (void) //、、、、、、、、、、、、、、、、、、、、、、、、報(bào)警 、、、、、、、、、、、、、、、、、、、、、、、、
- {
- if((ii==ia)|(on_off==1))
- {
- ii=snum;
- if(on_off==1)
- {
- zt();
- }
- else
- {
- qx(ia);
- display_lcd(0x19,0x21);
- }
- on_off=1;
- MotorStop();
- }
- }
- void clockwise(u16 rate) //順時(shí)針轉(zhuǎn)動(dòng)
- {
- u8 i;
- for(i=0;i<4;i++)
- {
- P1=ffw[i];
- Delay_xms(rate);//轉(zhuǎn)速調(diào)節(jié)
- }
- }
- //停止轉(zhuǎn)動(dòng)
- void MotorStop(void)
- {
- P1=0xff;
- }
- void anticlockwise (u16 rate) //逆時(shí)針轉(zhuǎn)動(dòng)
- {
- u8 i;
- for(i=0;i<4;i++)
- {
- P1=rev[i];
- Delay_xms(rate);//轉(zhuǎn)速調(diào)節(jié)
- }
- }
- void key (void) //按鍵判斷
- {
- if (k2 == 0)
- {
- delay(10);
- if (k2 == 0)
- {
- direction=~direction; // 方向標(biāo)志;
- }
- while (!k2);
- }
- if(on_off==1)
- {
- if (k3 == 0)
- {
- delay(10);
- if (k3 == 0)
- {
- while (!k3)
- {
- if(direction==1)
- {
- Delay_xms(100);
- if(rate<255)
- {
- rate++;
- }
- }
- else
- {
- Delay_xms(100);
- if(rate>10)
- {
- rate--;
- }
- }
- }
- }
- }
- if (k4 == 0)
- {
- delay(10);
- if (k4 == 0)
- {
- while (!k4)
- {
- if(direction==1)
- {
- Delay_xms(100);
- if(snum<255)
- {
- snum++;
- }
- }
- else
- {
- Delay_xms(100);
- if(snum>10)
- {
- snum--;
- }
- }
- }
- }
- }
- }
- }
- void zt (void) //狀態(tài)顯示
- {
- u8 a,b,c,d,e,f;
- if(on_off==0)
- {
- display_lcd(0,'n');
- }
- else
- {
- display_lcd(0,'f');
- }
- if(direction==1)
- {
- display_lcd(1,0x7e);
- }
- else
- {
- display_lcd(1,0x7f);
- }
- a=snum/100;
- b=(snum-100*a)/10;
- c=(snum-100*a-b*10)%10;
- d=rate/100;
- e=(rate-100*d)/10;
- f=(rate-100*d-e*10)%10;
- display_lcd(0x10,a+'0');
- display_lcd(0x11,b+'0');
- display_lcd(0x12,c+'0');
- display_lcd(0x15,d+'0');
- display_lcd(0x16,e+'0');
- display_lcd(0x17,f+'0');
- }
- void qx (u16 ii)
- {
- u8 a,b,c;
- a=ii/100;
- b=(ii-100*a)/10;
- c=(ii-100*a-b*10)%10;
- display_lcd(0x10,a+'0');
- display_lcd(0x11,b+'0');
- display_lcd(0x12,c+'0');
- }
- void quan (void) //圈數(shù)
- {
- if(on_off==0)
- {
- if(direction==1)
- {
- for(ii=0;ii<snum;ii++)
- {
- clockwise (rate);
- bao();
- if(on_off==0)
- {
- qx(ii);
- }
- }
- }
- else
- {
- for(ii=0;ii<snum;ii++)
- {
- anticlockwise(rate);
- bao();
- if(on_off==0)
- {
- qx(ii);
- }
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
0.png (50.27 KB, 下載次數(shù): 36)
下載附件
2018-2-9 00:33 上傳
所有資料51hei提供下載:
步進(jìn)電機(jī)240.zip
(90.57 KB, 下載次數(shù): 24)
2018-2-8 18:51 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|