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