|
此源代碼包含了電機(jī)的正反轉(zhuǎn)控制,加減速,顯示模塊還沒開始弄,還望各路大神多多指教
單片機(jī)源程序如下:
- //采用一相勵磁方式,即四根信號線每次只有一個為高電平。步進(jìn)電機(jī)型號28BYJ-48,5V,DC,四相八拍
- #include<reg52.h>
- #define uchar unsigned char
-
- sbit jia_key=P3^2; //電機(jī)加速I/O口定義
- sbit jian_key=P3^3; //電機(jī)減速I/O口定義
- sbit zf_key=P3^4; //電機(jī)正反轉(zhuǎn)I/O口定義
- bit flag=0; //電機(jī)正反轉(zhuǎn)標(biāo)志位,flag為0時正轉(zhuǎn),flag為1時為反轉(zhuǎn)
- uchar num=0,maichong=4,table_begin=0;
- uchar code table1[]={0x01,0x02,0x04,0x08, 0x08,0x04,0x02,0x01}; //電機(jī)正反轉(zhuǎn)I/O口的高低電平對應(yīng)表
- //延時函數(shù)
- void delay(uchar i)
- {
- uchar j,k;
- for(j=i;j>0;j--)
- for(k=120;k>0;k--); //12M晶振
- }
- //按鍵檢測處理函數(shù)
- void key ()
- {
- if(jia_key==0)
- {
- delay(5);
- if(jia_key==0) //key=0按下
- {
- num++;
- if(num==4)
- num=3; //最大則保持3
- while(jia_key==0);//等待松開按鍵
- }
- }
- if(jian_key==0)
- {
- delay(5);
- if(jian_key==0)
- {
- if(num!=0) //判斷是否最小速
- num--;
- else
- num=0;
- while(jian_key==0); //等待按鍵釋放,若按鍵沒有釋放則jian_key始終等于0,程序就一直停在while語句處,直到按鍵釋放jian_key=1跳出while循環(huán)。
- //通常我們在檢測單片機(jī)按鍵時,要等待按鍵釋放才去執(zhí)行相應(yīng)代碼
- }
- }
- if(zf_key==0) //電機(jī)正反轉(zhuǎn)標(biāo)志
- {
- delay(5);
- if(zf_key==0) //按鍵按下為0則反轉(zhuǎn)
- {
- flag=~flag; //正反轉(zhuǎn)標(biāo)識取反
- while(zf_key==0);
- }
- }
- }
- //根據(jù)速度標(biāo)識進(jìn)行數(shù)據(jù)處理
- void dispose()
- {
- switch(num)
- {
- case 0:
- //show_num=2;
- maichong=8;
- break;
- case 1:
- // show_num=4;
- maichong=6;
- break;
- case 2:
- //show_num=6;
- maichong=4;
- break;
- case 3:
- // show_num=8;
- maichong=2;
- break;
- }
- if(flag==0)
- {
- table_begin=0;
- }
- else
- table_begin=4;
- }
- //電機(jī)速度,和正反轉(zhuǎn)控制
- void qudong()
- {
- uchar i,j;
- for(j=table_begin;j<4+table_begin;j++)
- {
- P1=table1[j];
- for(i=0;i<maichong;i++)
- {
- //display();
- delay(5);
- }
- }
- }
- //主函數(shù)
- void main()
- {
- while(1)
- {
- key();
- dispose();
- qudong();
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
步進(jìn)電機(jī).zip
(4.39 KB, 下載次數(shù): 8)
2018-6-24 09:46 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|