百度知道 - 信息提示

日期:2025-01-13 07:27:45 人气:1

百度知道 - 信息提示

    A+
热门评论

怎样用51单片机接两相步进电机驱动器来控制步进电机?

脉冲信号就是像流水灯差不多,用两个口。 例如: 用到P1^0和P1^1;把P10制低电平,P11制高电平,延时一段时间后,P10制高电平 P11制低电平,如此循环,看程序: #include "reg52.h" sbit P10=P1^0; sbit P11=P1^1; void delay(unsigned int x) P10=0;P11=1; delay(1000); P10=1;P11=0; delay(1000); } }1-B1-B1A0; 两相四线程序 接P1口 #include "reg52.h" #define uint unsigned int #define uchar unsigned char uchar code tab[]={0xfd,0xfb,0xf7,0xef}; uint i; void delay(uint x) { uint y; for(;x>0;x--) { for(y=0;y<124;y++); void main() while(1) P1=tab[i]; i++; if(i==4) { i=0; } delay(20); 扩展资料: 同样的一段程序,在各个单片机厂家的硬件上运行的结果都是一样的,如ATMEL的89C51(已经停产)、89S51, PHILIPS,和WINBOND等; 常说的已经停产的89C51指的是ATMEL公司的 AT89C51单片机,同时是在原基础上增强了许多特性,如时钟,更优秀的是由Flash(程序存储器的内容至少可以改写1000次)存储器取代了原来的ROM(一次性写入),AT89C51的性能相对于8051已经算是非常优越的了。 参考资料来源:百度百科-步进电机

阅读全文

一个51单片机同时控制2个步进电机的C语言程序

#include #include #define mode 0x81 // 方式0,A口、B口输出,C口高4位输出,低4位输入 # include "stdio.h" # include "string.h" # include "math.h" xdata unsigned char PA _at_ 0x7f00; xdata unsigned char PB _at_ 0x7f01; xdata unsigned char PC _at_ 0x7f02; xdata unsigned char caas _at_ 0x7f03; //控制字 sbit P32=P3^2; sbit P33=P3^3; sbit P35=P3^5; #define uchar unsigned char #define uint unsigned int unsigned char h,Pos ; unsigned int R,NX,NY; unsigned char key; code unsigned char KeyTable[] = { // 键码定义 0x0f, 0x0b, 0x07, 0x03, 0x0e, 0x0a, 0x06, 0x02, 0x0d, 0x09, 0x05, 0x01, 0x0c, 0x08, 0x04, 0x00 }; code unsigned char LEDMAP[] = { // 八段管显示码 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 }; unsigned char Code_ ; // 字符代码寄存器 #define PD1 61 // 122/2 分成左右两半屏(122x32) unsigned char Column; unsigned char Page_ ; // 页地址寄存器 D1,DO:页地址 unsigned char Code_ ; // 字符代码寄存器 unsigned char Command; // 指令寄存器 unsigned char LCDData; // 数据寄存器 xdata unsigned char CWADD1 _at_ 0x1cff; // 写指令代码地址(E1) xdata unsigned char DWADD1 _at_ 0x1eff; // 写显示数据地址(E1) xdata unsigned char CRADD1 _at_ 0x1dff; // 读状态字地址(E1) xdata unsigned char DRADD1 _at_ 0x1fff; // 读显示数据地址(E1) xdata unsigned char CWADD2 _at_ 0x3cff; // 写指令代码地址(E2) xdata unsigned char DWADD2 _at_ 0x3eff; // 写显示数进地址(E2) xdata unsigned char CRADD2 _at_ 0x3dff; // 读状态字地址(E2) xdata unsigned char DRADD2 _at_ 0x3fff; // 读显示数据地址(E2) //----------------------液晶----------------- // 清屏 // ************************ 中文显示程序 ***********************************/ /*************************直线 插 补***************************8*/ void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=50;y>0;y--); } void zhengx() { PA=0x00; delay(10); PA=0x01; delay(10); } void fux() { PA=0x02; delay(10); PA=0x03; delay(10); } void zhengy() { PB=0x00; delay(10); PB=0x10; delay(10); } void fuy() { PB=0x20; delay(10); PB=0x30; delay(10); } void zhixian(int NX,int NY) {int FM, NXY, XOY,ZF,z; FM=0; {if(NX>0) if(NY>0) XOY=1; else XOY=4; else if(NY>0) XOY=2; else XOY=3;} for(NXY= fabs(NX) + fabs(NY)-1;NXY>=0&&P32!=0&&P33!=0;NXY--) { {if(NX>0) if(NY>0) XOY=1; else XOY=4; else if(NY>0) XOY=2; else XOY=3;} for(NXY= fabs(NX) + fabs(NY)-1;NXY>=0;NXY--) { if(FM>=0) {if(XOY==1||XOY==4) {ZF=1; zhengx(); } else {ZF=2; fux(); } FM=FM-fabs(NY); } else {if(XOY==1||XOY==2) { ZF=3; zhengy(); } else {ZF=4; fuy(); } FM=FM+fabs(NX); } } for(z=0;z<200;z++) {P35 = 0; delay(10); P35 = 1; delay(10); } } } /*************************圆 弧 插 补***************************8*/ void yuanhu1( int X0,int Y0, int NX, int NY ,int RNS ) { int NXY,BS,ZF,XM,YM,z; int FM=0; BS=fabs(NX-X0) + fabs(NY-Y0); XM=fabs(X0); YM=fabs(Y0); for(NXY= fabs(NX-X0) + fabs(NY-Y0)-1;NXY>=0&&P32!=0&&P33!=0;NXY--) { if(RNS==1||RNS==3||RNS==6||RNS==8) { if(FM<0) { if(RNS==1||RNS==8) {ZF=1; zhengx(); } else {ZF=2; fux();} FM=FM+2*fabs(XM)+1; XM=XM+1; } else { if(RNS==1||RNS==6) { ZF=3; fuy(); } else {ZF=4; zhengy(); } FM=FM-2*fabs(YM)+1; YM=YM-1; } } else if(FM>=0) { if(RNS==2||RNS==7) {ZF=1; zhengx(); } else {ZF=2; fux(); } FM=FM-2*fabs(XM)+1; XM=XM-1; } else { if(RNS==2||RNS==5) {ZF=3; zhengy();} else {ZF=4; fuy();} FM=FM+2*fabs(YM)+1; YM=YM+1; } } if(P32==0||P33==0) { for(z=0;z<200;z++) {P35 = 0; delay(10); P35 = 1; delay(10); } } } int shuzhi1 () { int i=0,j=0,k=3; while (1) { if(testkey()) { delay(300); delay1(); if(testkey()) { j=getkey(); if(j!=14) {i=i*10 + j; k--;} }} if(k==0) break; } return i; } int shuzhi2 () { int i=0,j=0,k=3; while (1) { if(testkey()) { delay(300); delay1(); if(testkey()) { j=getkey(); if(j!=14) {i=i*10 + j; k--;} }} if(k==0) break; } return i; } void yuanhuchabu1() { int q=0; delay(300); R=shuzhi1(); yj1(); q=R/100; Page_ = 0x00; Column = 0x35; Code_ = q; WriteCHN8x16(); q=R%100; q=q/10; Page_ = 0x00; Column = 0x40; Code_ = q; WriteCHN8x16(); q=R%10; Page_ = 0x00; Column = 0x48; Code_ = q; WriteCHN8x16(); yuanhu1(R,0,0,R,5); yuanhu1(0,R,-R,0,6); yuanhu1(-R,0,0,-R,7); yuanhu1(0,-R,R,0,8); } void yuanhuchabu2() { int q=0; delay(300); R=shuzhi1(); yj1(); q=R/100; Page_ = 0x00; Column = 0x35; Code_ = q; WriteCHN8x16(); q=R%100; q=q/10; Page_ = 0x00; Column = 0x40; Code_ = q; WriteCHN8x16(); q=R%10; Page_ = 0x00; Column = 0x48; Code_ = q; WriteCHN8x16(); yuanhu1(0,R,R,0,1); yuanhu1(R,0,0,-R,4); yuanhu1(0,-R,-R,0,3); yuanhu1(-R,0,0,R,2); } void zhixianchabu() { int q1=0,q2=0; delay(300); NX=shuzhi1(); delay(300); NY=shuzhi2(); yj2(); Page_ = 0x00; Column = 0x25; Code_ = 0x10; WriteCHN8x16(); q1=NX/100; Page_ = 0x00; Column = 0x30; Code_ = q1; WriteCHN8x16(); q1=NX%100; q1=q1/10; Page_ = 0x00; Column = 0x37; Code_ = q1; WriteCHN8x16(); q1=NX%10; Page_ = 0x00; Column = 0x40; Code_ = q1; WriteCHN8x16(); q2=NY/100; Page_ = 0x00; Column = 0x50; Code_ =q1; WriteCHN8x16(); q2=NY%100; q2=q2/10; Page_ = 0x00; Column = 0x58; Code_ = q2; WriteCHN8x16(); q2=NY%10; Page_ = 0x00; Column = 0x60; Code_ = q2; WriteCHN8x16(); Page_ = 0x00; Column = 0x72; Code_ = 0x11; WriteCHN8x16(); zhixian(NX,NY ); } void main() { int q=0,q1=0,q2=0; caas=mode; PA=0X00; PB=0X00; PC=0x00; R=0X00; while(1) { if(testkey()) { delay1(); if(testKey()) { delay1(); if(getkey()==15) { delay(300); yuanhuchabu1(); } else if(getkey()==10) { delay(300); yuanhuchabu2(); } else if(getkey()==13) { zhixianchabu(); } else if(getkey()==1) { zhengx(); } else if(getkey()==2) { fux(); } else if(getkey()==3) { zhengy(); } else if(getkey()==4) { fuy(); } } } if(GetKey()==12) { break;} } }

阅读全文