标题:
单片机Proteus仿真实现步进电机正反转,加减速的功能,同时在lcd上显示出来
[打印本页]
作者:
yxf123456
时间:
2019-4-9 15:49
标题:
单片机Proteus仿真实现步进电机正反转,加减速的功能,同时在lcd上显示出来
用protues实现步进电机正反转,加减速的功能,内附Proteus仿真原理图,用keil编程的C语言程序。
0.png
(10.36 KB, 下载次数: 54)
下载附件
2019-4-9 19:16 上传
单片机源程序如下:
#include <AT89X52.H>
int delay();
void inti_lcd();
void show_lcd(int);
void cmd_wr();
void ShowState();
void clock(unsigned int Delay);
void DoSpeed();//计算速度
#define RIGHT_RUN 1//正转值
#define LEFT_RUN 0//反转值
sbit RS=0xA0;
sbit RW=0xA1;
sbit E=0xA2;
char SpeedChar[]="SPEED(n/min):";
char StateChar[]="RUN STATE:";
char STATE_CW[]="CW";
char STATE_CCW[]="CCW";
char SPEED[3]="050";
unsigned int RunSpeed=50;//速度
unsigned char RunState=RIGHT_RUN;//运行状态
void main()
{
//定时器设置
TMOD=0x66;
EA=1;//开中断
TH0=0xff;//定时器0初始值FFH;
TL0=0xff;
ET0=1;
TR0=1;
TH1=0xff;//定时器1初始值FFH
TL1=0xff;
ET1=1;
TR1=1;
IT0=1;//脉冲方式
EX0=1;//开外部中断0:加速
IT1=1;//脉冲方式
EX1=1;//开外部中断1:减速
inti_lcd();
DoSpeed();
ShowState();
while(1)
{
clock(RunSpeed);
P0_1=P0_1^0x01;
}
}
//定时器0中断程序:正转
void t_0(void)interrupt 1
{
RunState=RIGHT_RUN;
P0_0=1;
P1=0x01;
cmd_wr();
ShowState();
}
//定时器1中断程序:反转
void t_1(void)interrupt 3
{
RunState=LEFT_RUN;
P0_0=0;
P1=0x01;
cmd_wr();
ShowState();
}
//中断0:加速程序
void SpeedUp()interrupt 0
{
if(RunSpeed>=12)
RunSpeed=RunSpeed-2;
DoSpeed();
P1=0x01;
cmd_wr();
ShowState();
}
//中断1:减速程序
void SpeedDown()interrupt 2
{
if(RunSpeed<=100)
RunSpeed=RunSpeed+2;
DoSpeed();
P1=0x01;
cmd_wr();
ShowState();
}
int delay()//判断LCD是否忙
{
int a;
start:
RS=0;
RW=1;
E=0;
for(a=0;a<2;a++);
E=1;
P1=0xff;
if(P1_7==0)
return 0;
else
goto start;
}
void inti_lcd()//设置LCD方式
{
P1=0x38;//设置16*2显示
cmd_wr();
delay();
P1=0x01;//清除
cmd_wr();
delay();
P1=0x0f;
cmd_wr();
delay();
P1=0x06;//光标移动设置
cmd_wr();
delay();
P1=0x0c;//显示开及光标设置
cmd_wr();
delay();
}
void cmd_wr()//写控制字
{
RS=0;
RW=0;
E=0;
E=1;
}
void show_lcd(int i)//LCD显示子程序
{
P1=i;
RS=1;
RW=0;
E=0;
E=1;
}
void ShowState()//显示状态与速度
{
int i=0;
while(SpeedChar[i]!='\0') ///char SpeedChar[]="SPEED(n/min)";
{
delay();
show_lcd(SpeedChar[i]);
i++;
}
delay();
P1=0x80|0x0d;
cmd_wr();
i=0;
while(SPEED[i]!='\0')
{
delay();
show_lcd(SPEED[i]); SPEED[3]="050";
i++;
}
delay();
P1=0xC0;
cmd_wr();
i=0;
while(StateChar[i]!='\0')
{
delay();
show_lcd(StateChar[i]);/// char StateChar[]="RUN STATE";
i++;
}
delay();
P1=0xC0|0x0A;
cmd_wr();
i=0;
if(RunState==RIGHT_RUN)
while(STATE_CW[i]!='\0')
{
delay();
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
新建文件夹.zip
(41.5 KB, 下载次数: 180)
2019-4-9 15:49 上传
点击文件名下载附件
步进电机仿真程序
下载积分: 黑币 -5
作者:
jialishoushi
时间:
2019-4-12 19:18
好资料 谢谢分享
作者:
leel5211314
时间:
2019-4-12 23:25
不能用
作者:
要钱的大哥
时间:
2019-4-27 12:23
很好,可以用
作者:
呱呱兔
时间:
2020-5-27 02:55
老哥,这个可以再加个星三角启动吗
作者:
hasakei
时间:
2020-7-2 12:16
谁有这个原理图啊,发一下,谢谢。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1