求助51单片机脉冲计数c程序同时控制2台步进电动机的C程序。

您的位置: >
步进电机控制程序(c语言+51单片机)
#include&reg51.h&
#define uint& unsigned int#define uchar unsigned char#define ms *77// f = 12 M#define LEDLen 4#define Dj_star() {IE=0x81; pri_dj=0; }#define Dj_stop() {IE=0x00; pri_dj=1; P1=0 shache="0"; delay(800ms); delay(800ms);delay(400ms); shache = 1; }#define Chilun_Num 8/* 齿轮数 8 个*/#define set_display_num() { LEDBuf[0] = tmp / 1000;&&&& LEDBuf[1] = tmp / 100 % 10;& \&&&&&&&&&&&&&&&&&&&&&&&&&&& LEDBuf[2] = tmp / 10 % 10;& LEDBuf[3] = tmp % 10;&&&&&&& }uchar LEDBuf[LEDLen] = {0,0,0,0};void& read_num ();&&&&&&&&&&&&&&& /* 读播码盘 到 set_round_num& * 8 */void& display& ();void& delay(uint& delay_time) { uint& for (i=0; i & delay_ i++) ; }void& run ();void& fx_run();
uint& round_num&&&& = 0;&&&&&&&&&& /* 记录已转的 齿轮数 , 中断1次 加 1*/uint& set_round_num = 0;&&&&&&&&&& /* 播码盘设置 圈数 */uint& set_pwm_width = 0;&&&&&&&&&& /* 播码盘设置 步进电机 正向速度 */bit&& one_round_flg = 0;sbit& led_1000&&&&& = P0^7;&&&&&&& //use for displaysbit& led_100&&&&&& = P0^6;&&&&&&& //use for displaysbit& led_10&&&&&&& = P0^5;&&&&&&& //use for displaysbit& led_1&&&&&&&& = P0^4;&&&&&&& //use for display
sbit& key_start&&&& = P3^0;sbit& key_puse&&&&& = P3^0;sbit& key_clear&&&& = P3^1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& /*& P3^2 接齿轮传感器 中断& */sbit& bujin_zx_stop = P3^3;&&&&&&& /* 接步进电机 ,正向到位传感器 ,为 0 停机 */sbit& bujin_fx_stop = P3^4;&&&&&&& /* 接步进电机 ,反向到位传感器 ,为 0 停机 */
sbit& shache&&&&&&& = P3^5;&&&&&&& /* 接刹车控制继电器&& 0 电位有效 */sbit& pri_dj&&&&&&& = P3^6;&&&&&&& /* 接主电机控制继电器 0 电位有效 */
void main(){&&&&&&& TCON = 0x01;&&&&&&& display();&&&&&&& while(1) {&&&&&&&&&&& IE="0x00";&&&&&&&&&&& round_num = 0;&&&&&&&&&&& display();&&&&&&&&&&& if ( bujin_fx_stop ) fx_run();&&&&&&&&&&& while ( key_start );&&&&&&&&&&& delay ( 8ms );&&&&&&&&&&& if(!key_start){&&&&&&&&&&&&&&& read_num();&&&&&&&&&&&&&&& //set_round_num& = 8;&&&&&&&&&&&&&&& while ( !key_start );&&&&&&&&&&&&&&& run ();&&&&&&&&&&&&&&& fx_run();&&&&&&&&&&& }&&&&&&& }}
void run () {&&& #define Delay_time&& 180&&& /* 转一圈 50 次循环,每循环 4 步 ,50 * 4 = 200 , 200 * 1。8 = 360 */&&&&&& P1 = 0&&& set_pwm_width = 15 + set_pwm_width / 10;&&& while ( 1 ) {
&&&&&&&&&&& while( !shache | !key_start );&&&&&&&&&&& Dj_star();&&&&&&&&&&& for ( i="0" ; bujin_zx_stop & !pri_i++ ){&&&&&&&&&&&&&&& P1 =& 0xf9;&&&&&&&&&&&&&&& delay ( Delay_time& );&&&&&&& // bujin_zx_stop = P3^3;&&&&&&&&&&&&&&& P1 =& 0&&&&&&&&&&&&&&&&&& // bujin_fx_stop = P3^4;&&&&&&&&&&&&&&& delay ( Delay_time);&&&&&&&&& // key_puse&&&&& = P3^0;&&&&&&&&&&&&&&& P1 =& 0xf6;&&&&&&&&&&&&&&&&&& // key_clear&&&& = P3^1;&&&&&&&&&&&&&&& delay ( Delay_time& );&&&&&&& // shache&&&&&&& = P3^5;&&&&&&&&&&&&&&& P1 =& 0xf3;&&&&&&&&&&&&&&&&&& // pri_dj&&&&&&& = P3^6;&&&&&&&&&&&&&&& delay ( Delay_time );&&&&&&&&&&&&&&& if( i == set_pwm_width ) { P1 = 0 i = 0; one_round_flg = 0; while ( !one_round_flg & key_puse );}&&&&&&&&&&&&&&& if(!key_puse) { delay(4ms);& if(!key_puse)& }&&&&&&&&&&& }
&&&&&&&&&&& P1 = 0&&&&&&&&&&& if ( pri_dj )&
&&&&&&&&&&& if ( !key_puse ) {&&&&&&&&&&&&&&& delay ( 8ms );&&&&&&&&&&&&&&& if ( !key_puse& ) {&&&&&&&&&&&&&&&&&&& Dj_stop();&&&&&&&&&&&&&&&&&&& while ( !key_puse );&&&&&&&&&&&&&&&&&&& // next pree key&&&&&&&&&&&&&&&&&&& while( !shache );
&&&&&&&&&&&&&&&&&&& while(1){&&&&&&&&&&&&&&&&&&&&&&& while (& key_puse && key_clear );&&&&&&&&&&&&&&&&&&&&&&& delay ( 8ms );&&&&&&&&&&&&&&&&&&&&&&& if ( !key_clear )& { round_num = 0; display(); }&&&&&&&&&&&&&&&&&&&&&&& if ( !key_puse& )&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&& while( !key_puse );&&&&&&&&&&&&&&&&&&& delay(8ms);&&&&&&&&&&&&&&&&&&& while( !key_puse );&&&&&&&&&&&&&&&& }&&&&&&&&&&& }&&& }}void ext_int0(void) interrupt 0& {&& /* 主电机 齿轮 中断 */&&&&&& EA = 0;&&& if( !pri_dj ){&&&&&&&&&&& round_num ++;&&&&&&&&&&& if (round_num % Chilun_Num == 0 ){&&&&&&&&&&&&&&& one_round_flg = 1;&&&&&&&&&&&&&&& tmp = round_num& / Chilun_N&&&&&&&&&&&&&&& set_display_num();&&&&&&&&&&&&&&& P0 = 0xf0;&&&&&&&&&&&&&&& P0 = P0 | LEDBuf[0] ;&&&&&&&&&&&&&&& led_1000& = 0;&&&&&&&&&&&&&&& P0 |= 0xf0;
&&&&&&&&&&&&&&& P0 = 0xf0;&&&&&&&&&&&&&&& P0 = P0 | LEDBuf[1] ;&&&&&&&&&&&&&&& led_100&& = 0;&&&&&&&&&&&&&&& P0 |= 0xf0;
&&&&&&&&&&&&&&& P0 = 0xf0;&&&&&&&&&&&&&&& P0 = P0 | LEDBuf[2] ;&&&&&&&&&&&&&&& led_10&&& = 0;&&&&&&&&&&&&&&& P0 |= 0xf0;
&&&&&&&&&&&&&&& P0 = 0xf0;&&&&&&&&&&&&&&& P0 = P0 | LEDBuf[3] ;&&&&&&&&&&&&&&& led_1&&&& = 0;&&&&&&&&&&&&&&& P0 |= 0xf0;
&&&&&&&&&&&&&&& P0 = 0xf0;&&&&&&&&&&& }&&&&&&&&&&& if ( round_num &= set_round_num& ) Dj_stop();&&&&&&& }&&& EA = 0x81;}
void display(){&&&&&&&& uint tmp = 0;&&&& tmp = round_num& / Chilun_N&&&& set_display_num();&&&& for(i = 0; i & LEDL i ++){&&&&&&&&&& P0 = 0xf0;&&&&&&&&&& P0 = P0 | LEDBuf[i] ;&&&&&&&&&& if(i==0) led_1000& = 0;&&&&&&& //P0^4&&&&&&&&&& if(i==1) led_100&& = 0;&&&&&&& //P0^5&&&&&&&&&& if(i==2) led_10&&& = 0;&&&&&&& //P0^6&&&&&&&&&& if(i==3) led_1&&&& = 0;&&&&&&& //P0^7&&&&&&&&&& P0 |= 0xf0;&&&& }&&&& P0 = 0xf0;}
void read_num(){&&&& /* 读播码盘 到 set_round_num& ,set_pwm_width& */&&&&&&&& P2 =& 0xFF;&&&& P2 =& 0xEF;&&& // &&&& delay ( 1ms& );&&&& tmp =&& ~(P2& | 0xF0);
&&&& P2 =& 0xDF;&&& // &&&& delay ( 1ms& );&&&& tmp = (~(P2 | 0xF0 )) * 10&& +&&&& set_round_num =
&&&& P2 =& 0xBF;&&& // &&&& delay ( 1ms& );&&&& tmp = (~(P2 | 0xF0));
&&&& P2 =& 0x7F;&&& // &&&& delay ( 1ms& );&&&& tmp = (~(P2 | 0xF0)) * 10 +
&&&& set_round_num = set_round_num& + tmp * 100;&&&& set_round_num = set_round_num& * Chilun_N
&&&& P2 =& 0xFF;&&&& P1 =& 0xbF;&&& // &&&& delay ( 1ms );&&&& tmp =&& ~(P2& | 0xF0) ;
&&&& P1& =& 0xFF;&&&& P2& =& 0xFF;&&&& P1 &=& 0x7F;&&& // &&&& delay ( 1ms );&&&& tmp = (~(P2 | 0xF0)) * 10 +&&&& set_pwm_width =
&&&& P1& = 0xFF;&&&& P2& = 0xFF;}
void& fx_run(){&&& #define f_Delay_time 180&&& while ( bujin_fx_stop ) {&& /* 反向 回车 直到 传感器 动作*/&&&&&&& P1 =& 0xf3;&&&&&&&&&&&&&&&&&& //0011&&&&&&& delay ( f_Delay_time );&&&&&&& P1 =& 0xf6;&&&&&&&&&&&&&&&&&& //0110&&&&&&& delay ( f_Delay_time );&&&&&&& P1 =& 0&&&&&&&&&&&&&&&&&& //1100&&&&&&& delay ( f_Delay_time );&&&&&&& P1 =& 0xf9;&&&&&&&&&&&&&&&&&& //1001&&&&&&& delay ( f_Delay_time );&&& }&&& P1 = 0}
非常好我支持^.^
不好我反对
相关阅读:
( 发表人:发烧友 )
评价:好评中评差评
技术交流、我要发言
发表评论,获取积分! 请遵守相关规定!提 交
Powered by: 电子发烧友 (
. .All Rights Reserved 粤ICP备号求一个C语言编写的80C51单片机控制两个步进电机正转反转的程序_51单片机吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:18,756贴子:
求一个C语言编写的80C51单片机控制两个步进电机正转反转的程序收藏
快试试吧,可以对自己使用挽尊卡咯~◆◆
求一个C语言编写的80C51单片机控制两个步进电机正转反转的程序程序用于控制小车前进后退左右转动
#include&reg51.h&
sbit S1=P1^4;
//将S1位定义为P1.4引脚sbit S2=P1^5;
sbit S3=P1^6;
sbit S4=P1^0;
sbit S5=P1^1;
sbit S6=P1^2;
sbit S7=P1^3;
//储存按键值unsigned char ID;
//储存功能标号void delay(void) {
unsigned char i,j; for(i=0;i&150;i++)
for(j=0;j&100;j++) }void motor_delay(void)
for(i=0;i&5000;i++)}void forward( )
//P2口低四位脉冲1100
//P0口低四位脉冲1100
motor_delay();
//P2口低四位脉冲0110
motor_delay();
//P2口低四位脉冲0011
motor_delay();
//P2口低四位脉冲1001
motor_delay();
}void backward()
//P2口低四位脉冲1100
motor_delay();
//P2口低四位脉冲1001
motor_delay();
//P2口低四位脉冲0011
motor_delay();
//P2口低四位脉冲0110
motor_delay();
}void stop(void){
//停止输出脉冲
P0=0} void forward1( )
//P0口低四位脉冲1100
motor_delay();
//P0口低四位脉冲0110
motor_delay();
//P0口低四位脉冲0011
motor_delay();
//P0口低四位脉冲1001
motor_delay();
}void backward1()
//P0口低四位脉冲1100
motor_delay();
//P0口低四位脉冲1001
motor_delay();
//P0口低四位脉冲0011
motor_delay();
//P0口低四位脉冲0110
motor_delay();
void forward2( )
//P2口低四位脉冲1100
motor_delay();
//P2口低四位脉冲0110
motor_delay();
//P2口低四位脉冲0011
motor_delay();
//P2口低四位脉冲1001
motor_delay();
}void backward2()
//P2口低四位脉冲1100
motor_delay();
//P2口低四位脉冲1001
motor_delay();
//P2口低四位脉冲0011
motor_delay();
//P2口低四位脉冲0110
motor_delay();
}void main(void)
TMOD=0x01;
//使用定时器T0的模式1
//开总中断
//定时器T0中断允许
//启动定时器T0
TH0=()/256;
//定时器T0赋初值,每计数200次(217微秒)发送一次中断请求
//定时器T0赋初值
//按键值初始化为0,什么也不做
switch(keyval)
//根据按键值keyval选择待执行的功能
case 1:forward();
case 2:backward();
case3:stop();
case 4:forward1();
case 5:backward1();
case 6:forward2();
case 7:backward2();
}}void Time0_serve(void) interrupt 1 using 1{
//关闭定时器T0
if((P1&0xff)!=0xff)
//第一次检测到有键按下
//延时一段时间再去检测
if((P1&0xff)!=0xff)
//确实有键按下
//按键S1被按下
//按键S2被按下
//按键S3被按下
//按键S4被按下
//按键S5被按下
//按键S6被按下
//按键S7被按下
TH0=()/256;
//定时器T0的高8位赋初值
//定时器T0的低8位赋初值
//启动定时器T0}
这是2个步进电机?
为什么一定要原代码?给你思路不行么?C语言很简单,比搬砖容易
一路发脉冲,一路控制方向,2*2个I/O口一、用MATLAB计算一组适合的加减速曲线,变量是最高速、最低速、最大转矩对应的负载重量的加速度、加加速时间,常亮是单片机晶振、机器周期的分频数、定时器分频数、电机的步进角度、电机的分频数、传动齿轮半径!
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或求助:51单片机同时控制两台步进电动机 - 嵌入式系统论坛 -
自动化论坛-工控论坛
帖子6221&积分2849&威望2849 &阅读权限1&
求助:51单片机同时控制两台步进电动机
我想用AT89S51单片机同时控制两台一样的步进电动机(要求两台步机的转速可以不同,一台正转一台反转):用C语言编程,其中步机1的四相分别连在P1.0-P1.3,步机2的四相分别连在P2.0-P2.3==&故有:步机1正转{0x03,0x09,0x0c,0x06};步机2反转{0x03,0x06,0x0c,0x09};然后用中断控制延时,大略的程序如下:#reg51.h&#define um_ru 192#define m_T 100u igned char idata cw1[5]={0x03,0x09,0x0c,0x06,0x00};u igned char idata ccw1[5]={0x03,0x06,0x0c,0x09,0x00};u igned char idata cw2[5]={0x03,0x09,0x0c,0x06,0x00};u igned char idata ccw2[5]={0x03,0x06,0x0c,0x09,0x00};u igned char idata *p1,*p2;//分别用于再P1,P2口输出步机1,步机2的正转字bit intt1=0;//两个中断的标志,等于1为中断bit intt2=0;void control(bit direct1,u igned int um_run1,bit direct2,u igned int um_run2)//同时控制两个步机的函数 { u igned int 1,n2 if(direct1==1) 1=cw1 else 1=ccw1 if(direct2==1) 2=cw2 else 2=ccw2 TMOD=0x11;//同时用T/C0及T/C1工作在模式1:16位 TH0=(65536-m_T*500)/256 TL0=(65536-m_T*500)%6 TH1=(65536-m_T*250)/256 TL1=(65536-m_T*250)%6 ET0=1 ET1=1 TR0=1 TR1=1 //启动T/C0及T/C1 EA=1 ..............}void delay_time1(void)interrupt 1 using 1{ 1=*p1&&;//P1口输出步机1正转字 if(*p1==0) 1-=4 TH0=(65536-m_T*500)/256 TL0=(65536-m_T*500)%6 intt1=1;//中断标志}void delay_time2(void)interrupt 2 using 2{ 2=*p2&&;//P2口输出步机2反转转字 if(*p2==0) 2-=4 TH1=(65536-m_T*250)/256 TL1=(65536-m_T*250)%6 intt2=1;}void main(){ control(1,Num_run,0,Num_run) }..............部分的循环语句怎弄?还是整个程序有问题?请伸出你热情的手帮小弟一把,不胜感激!开始我用于控制一台步机时用: for(n1=0 1&;lt um_run1 1&&) { while(intt1==0) intt1=0 }倒时可以运行,但同时控制两台不知道怎弄一个51单片机同时控制2个步进电机的C语言程序_百度知道
一个51单片机同时控制2个步进电机的C语言程序
它们带有启动和急停功能(启动和急停按钮同时控制2个步机电机),2个步进电机分别具有加减速和数码管显示功能。其中1个有换向功能(碰到行程开关或光电开关换向)
提问者采纳
a href="http.net/detail/njupt12/3303608给你个地址.csdn.csdn://download.net/detail/njupt12/3303608" target="_blank">http://download
提问者评价
其他类似问题
为您推荐:
其他1条回答
C&#47,2个步进电机分别具有加减速和数码管显示功能;C++ | 浏览2次它们带有启动和急停功能(启动和急停按钮同时控制2个步机电机)分类
51单片机的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁89C51单片机对步进电动机的控制程序_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
89C51单片机对步进电动机的控制程序
8C1​单​片​机​对​步​进​电​动​机​的​控​制​程​序
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢

我要回帖

更多关于 adc0809与单片机c程序 的文章

 

随机推荐