• 方案介紹
    • 1.? 簡(jiǎn)介
    • 2.? 主要功能
    • 3.? 源程序(Keil5)
    • 4.? 仿真proteus8.6
    • 5.? 設(shè)計(jì)報(bào)告
    • 6.? 資料清單
    • 7.? 資料獲取鏈接
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

基于51單片機(jī)的步進(jìn)電機(jī)控制系統(tǒng)(一)!!! C程序+仿真+設(shè)計(jì)報(bào)告+使用說(shuō)明+元件清單+操作視頻

04/03 08:29
230
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

單片機(jī)仿真設(shè)計(jì)合集資料獲取.pdf

共1個(gè)文件

資料清單:C程序+仿真+設(shè)計(jì)報(bào)告+使用說(shuō)明+元件清單+操作視頻

仿真版本:Proteus8.6及以上版本

程序編譯:Keil5 C51

編程語(yǔ)言:C語(yǔ)言

設(shè)計(jì)編號(hào):【B01】

1.? 簡(jiǎn)介

? 本文介紹一種用AT89C51作為核心部件進(jìn)行邏輯控制及信號(hào)產(chǎn)生的單片機(jī)技術(shù)和C語(yǔ)言編程設(shè)計(jì)的步進(jìn)電機(jī)控制系統(tǒng),本控制系統(tǒng)采用單片機(jī)控制,通過(guò)人為按動(dòng)開(kāi)關(guān)實(shí)現(xiàn)步進(jìn)電機(jī)的正反轉(zhuǎn)、加速、減速、停止、復(fù)位。具有靈活方便、適用范圍廣的特點(diǎn),基本能夠滿足實(shí)踐需求。

2.? 主要功能

a.支持按鍵設(shè)置正轉(zhuǎn)、反轉(zhuǎn)、停止、加速、減速。

b.支持LED燈指示當(dāng)前運(yùn)行狀態(tài)。

c.支持ULN2003驅(qū)動(dòng)步進(jìn)電機(jī)轉(zhuǎn)動(dòng)。

3.? 源程序(Keil5)

? 本設(shè)計(jì)采用keil5 C51軟件(內(nèi)附安裝包)實(shí)現(xiàn)程序設(shè)計(jì)。如需用keil4打開(kāi)程序,可自行通過(guò).c和.h文件新建工程即可。

#include <reg51.h>	 //包含單片機(jī)頭文件
//宏定義方便使用
#define uint unsigned int  
#define uchar unsigned char
uchar code FFW[]=	//8拍編碼
{
  0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09
};
sbit K1 = P3^0;//定義用符號(hào)k1來(lái)表示P3.0引腳
sbit K2 = P3^1;
sbit K3 = P3^2;
sbit K4 = P3^3;
sbit K5 = P3^4;
uchar Pos_N=1;  //定義正轉(zhuǎn)圈數(shù)變量
uchar Inv_N=2;  //定義反轉(zhuǎn)圈數(shù)變量
uchar Run_flag=0;  //電機(jī)運(yùn)行的標(biāo)志
uint speed=20;
/*-----------------------------------
延時(shí)函數(shù)
------------------------------------*/
void DelayMS(uint ms)
{
  uchar i;
  while(ms--)
  {
    for(i=0;i<20;i++);
  }
}
/*-----------------------------------
正轉(zhuǎn)函數(shù)
------------------------------------*/
void SETP_MOTOR_FFW()
{
  static uint i=0,j=0;
  if(++i>speed*10)	 //延時(shí)
  {
	i=0;
	P1=FFW[j];	//送8拍
	if(++j>7)j=0;
  }
  
}
/*-----------------------------------
反轉(zhuǎn)函數(shù)
------------------------------------*/
void SETP_MOTOR_REV()
{
  static uint i=0,j=0;

  if(++i>speed*10)	 //延時(shí)
  {
	i=0;
	P1=FFW[7-j];   //倒序送八拍編碼
	if(++j>7)j=0;
  }
}
//*********************************
//按鍵掃描程序
//mode:0,不支持連續(xù)按;1,支持連續(xù)按;
//*********************************
uchar KEY_Scan()
{	 
  static uchar key_up=1;//按鍵按松開(kāi)標(biāo)志	  
  if(key_up&&(K1==0||K2==0||K3==0||K4==0||K5==0))
  {
    DelayMS(5);//去抖動(dòng) 
	if(K1==0||K2==0||K3==0||K4==0||K5==0)
	{
	    key_up=0;
		if(K1==0)return 1;
		else if(K2==0)return 2;
		else if(K3==0)return 3;
	    else if(K4==0)return 4;
	    else if(K5==0)return 5;
	}
	else 
	{
		return 0;
	}
  }else if(K1==1&&K2==1&&K3==1&&K4==1&&K5==1)key_up=1; 	    
  return 0;// 無(wú)按鍵按下
}
/*-----------------------------------
主函數(shù)
------------------------------------*/

void main()
{
  uchar key_num=0;
  P1=0x01;      //電機(jī)初始位置
  P2=0xfb;  //停止指示燈
  while(1)
  {
    key_num=KEY_Scan(); //掃面按鍵
	if(key_num==1) //正轉(zhuǎn)
	{
		P2=0xfe;  //正轉(zhuǎn)指示燈
		Run_flag=1;//正轉(zhuǎn)標(biāo)志
	}
	else if(key_num==2)//反轉(zhuǎn)
	{
		P2=0xfd;  //反轉(zhuǎn)指示燈
		Run_flag=2;//反轉(zhuǎn)標(biāo)志
	}
	else if(key_num==3)//停止
	{
		P2=0xfb;  //停止指示燈
     	P1=0x01;  //回到初始位置
		Run_flag=0;//停止標(biāo)志
	}
	else if(key_num==5)//加速
    {
      if(speed!=0)
      {
        speed-=1;
      }
    }
    else if(key_num==4)//減速
    {
      speed+=1;
	  if(speed>100)	//限定調(diào)速范圍0-100
	  {
		 speed=100;
	  }
    }

4.? 仿真proteus8.6

? 本設(shè)計(jì)采用proteus8.6軟件(內(nèi)附安裝包)實(shí)現(xiàn)仿真設(shè)計(jì),如下圖所示。proteus軟件一般存在高低版本兼容問(wèn)題,該仿真是通過(guò)proteus8.6導(dǎo)出的,所以請(qǐng)盡量使用proteus8.6打開(kāi)文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.9理論上可以正常使用。

正轉(zhuǎn):反轉(zhuǎn):停止:

5.? 設(shè)計(jì)報(bào)告

? 設(shè)計(jì)報(bào)告主要包括硬件電路、軟件設(shè)計(jì)、仿真調(diào)試等等,僅供參考。

6.? 資料清單

? 設(shè)計(jì)資料主要包括C程序+仿真+設(shè)計(jì)報(bào)告+使用說(shuō)明+元件清單+操作視頻等。

7.? 資料獲取鏈接

百度網(wǎng)盤(pán)下載鏈接:【B01】百度網(wǎng)盤(pán)下載鏈接

更多單片機(jī)仿真設(shè)計(jì)合集:單片機(jī)仿真設(shè)計(jì)合集

  • 單片機(jī)仿真設(shè)計(jì)合集資料獲取.pdf
    下載

相關(guān)推薦

方案定制

去合作
方案開(kāi)發(fā)定制化,2000+方案商即時(shí)響應(yīng)!