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

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

#include<reg52h>

#include<intrinsh>

#define mode 0x81 // 方式0,A口、B口输出,C口高4位输出,低4位输入

# include "stdioh"

# include "stringh"

# include "mathh"

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, 0, 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+2fabs(XM)+1;

XM=XM+1;

}

else

{

if(RNS==1||RNS==6)

{

ZF=3;

fuy();

}

else

{ZF=4;

zhengy();

}

FM=FM-2fabs(YM)+1;

YM=YM-1;

}

}

else

if(FM>=0)

{

if(RNS==2||RNS==7)

{ZF=1;

zhengx();

}

else

{ZF=2;

fux();

}

FM=FM-2fabs(XM)+1;

XM=XM-1;

}

else

{

if(RNS==2||RNS==5)

{ZF=3;

zhengy();}

else

{ZF=4;

fuy();}

FM=FM+2fabs(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=i10 + 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=i10 + 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;}

}

}

#include<reg52h>

char code duma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //0-9数码管,共阴

char code wema[]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7}; //片选,1-8个数码管

char j;

char h_num,m_num,s_num; //分别定义小时、分钟、秒

char h_shi,h_ge,m_shi,m_ge,s_shi,s_ge;

sbit fm=P3^4;

void delay(char x)

{

char a,b;

for(a=x;a>0;a--)

for(b=100;b>0;b--);

}

void inter_init()

{

EA=1; //开总中断

ET0=1; //本例中使用的是定时器T0,如果用T1。则为ET1=0,TMOD=0x10。

TMOD=0x01; //定时器工作方式1

TH0=(65535-50000)/256; //因为晶振用的是110592MHZ。在取初值时,大概定义为一个中断为50MS

TL0=(65535-50000)%256;

TR0=1;

}

void display(char h_shi,h_ge,m_shi,m_ge,s_shi,s_ge)

{

P2=duma[h_shi];

P1=wema[0];

delay(8);

P2=duma[h_ge];

P1=wema[1];

delay(8);

P2=duma[10];

P1=wema[2];

delay(8);

P2=duma[m_shi];

P1=wema[3];

delay(8);

P2=duma[m_ge];

P1=wema[4];

delay(8);

P2=duma[10];

P1=wema[5];

delay(8);

P2=duma[s_shi];

P1=wema[6];

delay(8);

P2=duma[s_ge];

P1=wema[7];

delay(8);

}

void main()

{

inter_init();

s_num=55; //初始时间设置。分别是秒,分,小时

m_num=59;

h_num=10;

while(1)

{

if(j==20)

{

j=0;

if(s_num==59)

{

s_num=-1;

if(m_num==59)

{

m_num=-1;

if(h_num==24)

h_num=-1;

h_num++;

fm=0; //到整点后蜂鸣器会响一下

delay(50);

fm=1;

}

m_num++;

}

s_num++;

}

h_shi=h_num/10;

h_ge =h_num%10;

m_shi=m_num/10;

m_ge =m_num%10;

s_shi=s_num/10;

s_ge =s_num%10;

display(h_shi,h_ge,m_shi,m_ge,s_shi,s_ge);

}

}

void time()interrupt 1 using 1 //如果用T1的话,应为interrupt 3

{

TH0=(65535-50000)/256; //因为晶振用的是110592MHZ。在取初值时,大概定义为一个中断为50MS

TL0=(65535-50000)%256;

j++;

}

你可以找另一台的电脑上去复制下这个缺失的文件,看看能否解决问题

或者你可以尝试使用腾讯电脑管家来修复缺失DLL文件

具体方法是,打开腾讯电脑管家--电脑诊所--软件问题--丢失Dll 文件--一键修复--完成

如果还是解决不了,去脚本之家下一个文件直接复制进去就能搞定了

如果找不到,还可以下载一个dx修复工具30增强版,去修复一下

1、打开fm2014比赛程序,找到程序设定。

2、看上场足球的比赛时间,把两场足球比赛的时间错开,不可以在同一时间比赛。

3、看好之后更改时间,输入时间点击确认,就可以设置成功了。

要下载猫耳FM上的广播剧到手机上,可以按照以下步骤进行:

1 在手机应用商店下载并安装猫耳FM应用程序。

2 打开猫耳FM应用程序,注册并登录账号。

3 在应用程序中浏览或搜索你想下载的广播剧。找到你想收听的广播剧后,点击进入广播剧页面。

4 在广播剧页面中,会有一个或多个下载按钮或图标,根据具体情况进行 *** 作。一般而言,在广播剧列表页上,每一集广播剧的右侧都有一个下载按钮。点击下载即可将广播剧下载到手机本地存储中。

5 下载完成后,你可以在猫耳FM应用程序的“我的下载”界面找到已经下载的广播剧,并在没有网络环境的情况下进行收听。

需要注意的是,部分广播剧可能需要付费购买后才能进行下载。此外,下载时请遵守相关版权法律法规,不要非法传播、复制和使用他人的创意作品。

fmeditor设置赛程日期步骤如下:

1、打开fm2014比赛程序,找到程序设定。

2、看上场足球的比赛时间,把两场足球比赛的时间错开,不可以在同一时间比赛。

3、看好之后更改时间,输入时间点击确认,就可以设置成功了。

以上就是关于一个51单片机同时控制2个步进电机的C语言程序全部的内容,包括:一个51单片机同时控制2个步进电机的C语言程序、如何使单片机简易时钟怎么实现选中分秒位的程序、FM2014程序错误怎么解决等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10207454.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存