⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 单片机步进电机实验
💻 C
字号:
#include <reg52.h>
#include "absacc.h"

//定义每分钟的最大和最小的转速
#define max_speed 240
#define min_speed 20
//按键对应的值
#define START		0xFE
#define STOP		0xFD
#define TURN		0xFC
#define UP			0xFB
#define DOWN		0xFA
//电机用变量和常量
int index_speed=100;
int  time_inteval=0;
unsigned int current_times=0;
char current_step=0;			//从水平位置开始
char code motor_step[]={0x05,0x07,0x06,0x0e,0x0a,0x0b,0x09,0x0d};
//================================================================
//================================================================
unsigned char method=STOP;//按键参数,初值为停止
unsigned char expect_speed;//预想速度
bit dir=0;//方向 0为顺时针 1为逆逆时针
//================================================================
//=================================================================
main()
{
	expect_speed=index_speed;
	time_inteval=60000/8;
	time_inteval=time_inteval/index_speed;
	EA=1;
	ET0=1;
	TMOD=0x01;//定时器0工作在方式1
	//设置定时器0的参数
	TH0=0xFC;
	TL0=0x17;
	TR0=0;
	//开启外部中断
	EX0=1;
	IT0=1;  //设置为低电平触发
	P2=0xff;
	P1=motor_step[current_step];
	while(1)
	{
	};
}

void timeon() interrupt 1
{
	TH0=0xFC;//重新载入频率
	TL0=0x17;
	if (current_times<time_inteval)
		current_times++;
	else
	{
		if(dir==0)
		{
			if(current_step==0)current_step=7;
			else current_step--;
		}
		else if(dir==1)
		{
			if(current_step==7)current_step=0;
			else current_step++;	
		}
		P1=motor_step[current_step];
		current_times=0;
	}
}


void intter() interrupt 0
{	
	method=P2;//扫描端口P2的值
	if(method==TURN)
	{
		dir=~dir;//方向变反
	}
	//加速设置
	else if(method==UP)
	{	
		if(expect_speed<=(max_speed-20))
		{	
			expect_speed=expect_speed+20;
			time_inteval=60000/8;
			time_inteval=time_inteval/expect_speed;
		}
	}
	//减速设置
	else if(method==DOWN)
	{
		if(expect_speed>=(min_speed+20))
		{	
			expect_speed=expect_speed-20;
			time_inteval=60000/8;
			time_inteval=time_inteval/expect_speed;
		}
	}
	//停止中断
	else if(method==STOP)//不是STOP键,则启动时钟中断
		TR0=0;
	//启动中断
	else if(method==START)
	{
		current_step=0;//重新初始化初值
		current_times=0;
		time_inteval=60000/8;
		time_inteval=time_inteval/index_speed;
		expect_speed=index_speed;
		TR0=1;
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -