仿真版本: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ì)合集