资源简介
本文介绍了单片机控制步进电机的系统。在电气时代的今天,电动机一直在现代化的生产和生活中起着十分重要的作用。步进电机是机电控制中一种常用的执行机构, 其原理是通过对它每相线圈中的电流和顺序切换来使电机作步进式旋转。本系统的硬件组成主要有:51系列单片机、L298N驱动电路、直流电压源等。同时对系统设计中所用到的一些软件都进行了介绍。本系统用51系列单片机和L298N电机驱动芯片并加入了键盘来控制步进电机实现转向、转速等。系统中使用的是永磁式二相步进电机,相应的驱动和控制电路对于其整体性能起着非常重要的作用。
经系统调试,能够很好的控制步进电机的正反转、加减速、急停,从而达到预期目的。整个系统具有结构简单、可靠性高、成本低和实用性强等特点,具有较高的通用性和应用推广价值。
代码片段和文件信息
#include“reg51.h“
#include“intrins.h“
#include“math.h“
#include“absacc.h“
#define PORTA XBYTE[0x8500]
#define PORTB XBYTE[0x8502]
#define PORTC XBYTE[0x8504]
#define PORTC0 XBYTE[0x8506]
#define nop _nop_()
#define Right_RUN 1
#define Left_RUN 0
unsigned long RunSpeed=76;
unsigned char RUNState=1;
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
sbit P17=P1^7;
bit flag=0;
unsigned char xx[]=“speed(n/min):“;
unsigned char SD[]=“76“;
char state[2][14]={“direction:cw““direction:ccw“};
unsigned char FLGINMA=0;
unsigned char ts=0x01;
unsigned int a;
main()
{
void OPJIAN();
unsigned char JIAN();
unsigned char JIANZHI();
void speed();
void SHOW_LCD();
void show_state();
void write1();
void writ2(unsigned char i);
void delay();
void time();
void busy();
unsigned char i;
i=0x90;
PORTC0=i;
i=0x01;
TMOD=i;
t=0x10;
a=0x0f;
TH0=0x10;
TL0=0x0f;
FLG=INMA;
SHOW_LCD();
show_state();
EA=1;
ET0=1;
TR0=1;
while(1)
{
i=JIAN();
if(i!=0)
{
time();
time();
}
i=JIAN();
if(i!=0)
{
INMA=JIANZHI();
OPJIAN();
time();
}
if(FLG!=INMA||flag==1)
{ FLG=INMA;
SHOW_LCD();
show_state();
flag=0;
}
}
}
void SHOW_LCD()/*lcd设置程序*/
{
P1=0x38;
write1();
delay();
P1=0x38;
write1();
delay();
P1=0x38;
write1();
delay();
P1=0x01;
write1();
delay();
P1=0x0f;
write1();
delay();
P1=0x06;
write1();
delay();
P1=0x0c;
write1();
}
void show_state()/*状态显示程序*/
{
unsigned char i=0;
P1=0x80;
write1();
while(xx[i]!=‘\0‘)
{
writ2(xx[i]);
i++;
delay();
}
i=0;
while(SD[i]!=‘\0‘)
{
writ2(SD[i]);
delay();
i++;
}
P1=0xc0;
write1();
i=0;
if(RUNState==Right_RUN)
while(state[0][i]!=‘\0‘)
{
writ2(state[0][i]);
i++;
}
else
if(RUNState==Left_RUN)
while(state[1][i]!=‘\0‘)
{
writ2(state[1][i]);
i++;
}
}
void write1()/*lcd写控制字*/
{
RS=0;
RW=0;
E=0;
busy();
E=1;
}
void writ2( unsigned char i)/*lcd写数据*/
{ P1=i;
RS=1;
RW=0;
E=0;
busy();
E=1;
}
void delay()/*延时程序*/
{
unsigned char i;
for(i=0;i<100;i++)
{
i=i;
}
}
void time()
{ unsigned char ij;
for(i=0;i<100;i++)
{
for(j=0;j<30;j++)
{
j=j;
}
}
}
void busy() //判断LCD是否忙
{
do
{
P1=0xff;
RS=0;
RW=1;
E=0;
nop;
E=1;
}while(P17==1);
}
unsigned char JIAN()/*判断是否有键按下*/
{
unsigned char ij;
i=0xff;
PORTA=i;
time();
i=0x00;
PORTB=i;
j=PORTA;
j=~j;
j=j&(0x0f);
return j;
}
unsigned char JIANZHI()/*读键值程序*/
{
unsigned ijdkm=1;
i=0xfe;
k=0x01;
do
{
PORTB=i;
j=PORTA;
m=j&(0x01);
if(m==0)
d=k/2;
else
{
m=j&(0x02);
if(m
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 181508 2007-08-18 20:16 C语言驱动程序\步进电机.DSN
文件 181508 2007-08-18 20:16 C语言驱动程序\Last Loaded 步进电机.DBK
文件 814 2007-09-19 21:54 C语言驱动程序\步进电机.PWI
文件 807 2007-09-16 22:50 C语言驱动程序\d.Opt
....... 1658 2007-08-17 16:47 C语言驱动程序\d_Uv2.Bak
文件 4103 2007-08-18 20:13 C语言驱动程序\d.c
文件 0 2007-09-16 22:02 C语言驱动程序\d.plg
文件 10370 2007-08-18 20:13 C语言驱动程序\d.LST
文件 15057 2007-08-18 20:13 C语言驱动程序\d.OBJ
文件 19 2007-08-18 20:13 C语言驱动程序\d.lnp
文件 16616 2007-08-18 20:13 C语言驱动程序\d.M51
文件 13292 2007-08-18 20:13 C语言驱动程序\d
文件 3696 2007-08-18 20:13 C语言驱动程序\d.hex
....... 807 2007-08-18 20:14 C语言驱动程序\d_Opt.Bak
文件 1662 2007-08-18 20:05 C语言驱动程序\d.Uv2
目录 0 2007-08-16 15:02 C语言驱动程序
----------- --------- ---------- ----- ----
432135 17
相关资源
- ( DXP2004汉化及工具(附带安装中文平
- ( 16×64LED点阵显示屏的设计(附
- stm32步进电机基本旋转控制
- 51单片机交通灯 源代码+proteus仿真图
- [单片机原理与应用设计C51编程+Prote
- 带字库LCD12864ST7920的Proteus仿真
- ad5305控制程序
- Proteus合集电路图、仿真程序仅供参考
- 无刷直流电机控制程序
- 51单片机控制步进电机软硬件实现
- 鸣志 步进电机选型手册
- STM32F407. 基于PID速度环的步进电机速度
- STM32F407 基于232或485的57&42;步进电机旋
- stm32f4控制步进电机程序
- 倒立摆调试,使用步进电机,完全成
- STM32F1指南者步进电机驱动
- 用stm32精确控制步进电机角度的程序
- 五相步进电机.ppt
- Protel 99se设计电路及PCB
- STM32F103的4轴步进电机加减速控制工程
- Protege用法参考基础篇+推理篇+进阶篇
- DesignerProtectInstaller.msi
- STM8全系列封装
- 基于Proteus单片机控制系统仿真设计
- 28BYJ-48步进电机(STM32F1)
- 可调电子时钟proteus_仿真+PCB+程序
- GT400运动控制卡单轴控制程序
- protege完整入门教材-基础进阶推理.z
- Proteus_ARES的PCB设计(完整版)
- gprsprotel仿真
评论
共有 条评论