51单片机红外控制步进电机

发布者:小熊掌心最新更新时间:2020-11-28 来源: 51hei关键字:51单片机  红外控制  步进电机 手机看文章 扫描二维码
随时随地手机看文章


单片机源程序如下:

#include            //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#define uchar unsigned char


/*********************************************************************************/


sbit IR=P3^2;                          //红外接口标志

uchar i;

unsigned char irtime;        //红外用全局变量


bit irpro_ok,irok;

unsigned char IRcord[4];

unsigned char irdata[33];


/*********************************************************************************/

sbit A1=P1^0; //定义步进电机连接端口 P1^0-P1^3

sbit B1=P1^1;

sbit C1=P1^2;

sbit D1=P1^3;

#define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通电,其他相断电

#define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通电,其他相断电

#define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通电,其他相断电

#define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}//D相通电,其他相断电

#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电


unsigned int o;

unsigned char Speed;

/*------------------------------------------------

uS延时函数,含有输入参数 unsigned char t,无返回值

unsigned char 是定义无符号字符变量,其值的范围是

0~255 这里使用晶振12M,精确延时请使用汇编,大致延时

长度如下 T=tx2+5 uS

------------------------------------------------*/

void DelayUs2x(unsigned char t)

{   

while(--t);

}

/*------------------------------------------------

mS延时函数,含有输入参数 unsigned char t,无返回值

unsigned char 是定义无符号字符变量,其值的范围是

0~255 这里使用晶振12M,精确延时请使用汇编

------------------------------------------------*/

void DelayMs(unsigned char t)

{

     

while(t--)

{

     //大致延时1mS

     DelayUs2x(245);

         DelayUs2x(245);

}

}


/*********************************************************************************/


void Ir_work(void);

void Ircordpro(void);


void tim0_isr (void) interrupt 1 using 1

{

  irtime++;  //用于计数2个下降沿之间的时间

}


void EX0_ISR (void) interrupt 0 //外部中断0服务函数

{

        static unsigned char  i;             //接收红外信号处理

        static bit startflag;                //是否开始处理标志位


        if(startflag)                        

        {

                if(irtime<63&&irtime>=33)//引导码 TC9012的头码,9ms+4.5ms

            i=0;

                    irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1

                    irtime=0;

                    i++;

                           if(i==33)

                      {

                                  irok=1;

                                i=0;

                          }

        }

        else

        {

                irtime=0;

                startflag=1;

        }

}


void delay(uchar z)

{

        uchar x,y;

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

                for(y=120;y>0;y--);

}


void TIM0init(void)//定时器0初始化

{

        TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值

        TH0=0x00; //重载值

        TL0=0x00; //初始化值

        ET0=1;    //开中断

        TR0=1;   

}


void EX0init(void)

{

IT0 = 1;   //指定外部中断0下降沿触发,INT0 (P3.2)

EX0 = 1;   //使能外部中断

EA = 1;    //开总中断

}


void Ir_work(void)//红外键值散转程序

{   

           switch(IRcord[2])//判断第三个数码值

                 {

                        case 0x44:

                                Speed=2; //数字越小,转速越大,力矩越小

                                   o=256;//旋转一周时间为512,这里改成红外按住才转动,所以是100

                                Coil_OFF //步进电机参数

                                while(o--)  //正向

                                {         

                                        Coil_AB1                //遇到Coil_AB1  用{A1=1;B1=1;C1=0;D1=0;}代替

                                        DelayMs(Speed);         //改变这个参数可以调整电机转速 ,

                                        Coil_BC1

                                        DelayMs(Speed);

                                        Coil_CD1

                                        DelayMs(Speed);

                                        Coil_DA1

                                        DelayMs(Speed);

                                }               

                         break;//电源 显示相应的按键值

                         case 0x40:

                                 Speed=2; //数字越小,转速越大,力矩越小

                                   o=256;//旋转一周时间为512,这里改成红外按住才转动,所以是100

                                 Coil_OFF //步进电机参数

                                while(o--)//反向

                                {

                                        Coil_DA1                //遇到Coil_AB1  用{A1=1;B1=1;C1=0;D1=0;}代替

                                        DelayMs(Speed);         //改变这个参数可以调整电机转速 ,

                                        Coil_CD1

                                        DelayMs(Speed);

                                        Coil_BC1

                                        DelayMs(Speed);

                                        Coil_AB1

                                        DelayMs(Speed);

                                }       

                         break;//电源 显示相应的按键值

                         case 0x07:

                                 Speed=2; //数字越小,转速越大,力矩越小

                                   o=20;//旋转一周时间为512,这里改成红外按住才转动,所以是100

                                Coil_OFF //步进电机参数

                                while(o--)  //正向

                                {         

                                        Coil_AB1                //遇到Coil_AB1  用{A1=1;B1=1;C1=0;D1=0;}代替

[1] [2]
关键字:51单片机  红外控制  步进电机 引用地址:51单片机红外控制步进电机

上一篇:STC15F2K60S2单片机8x8x8光立方
下一篇:单片机修改底层函数putchar()实现printf()在LCD上输出

推荐阅读最新更新时间:2024-11-11 11:29

51单片机(AT89C52)控制蜂鸣器
#include reg52.h #define uchar unsigned char #define uint unsigned int sbit beep=P0^0; void delay(uint z) { uint x,y; for(x=z;x 0;x--) for(y=111;y 0;y--); } void main() { while(1) { beep=0; delay(500); beep=1; delay(500); } }
[单片机]
<font color='red'>51单片机</font>(AT89C52)<font color='red'>控制</font>蜂鸣器
基于PLC S7-200与步进电机的运动控制
PLC S7-200与步进电机的运动控制   步进电机的运行要有一电子装置进行驱动,这种装置就是步进电机驱动器,它是把控制系统发出的脉冲信号,加以放大以驱动步进电机。步进电机的转速与脉冲信号的频率成正比,控制步进电机脉冲信号的频率,可以对电机精确调速;控制步进脉冲的个数,可以对电机精确定位。
[嵌入式]
基于PLC S7-200与<font color='red'>步进电机</font>的运动<font color='red'>控制</font>
单片机控制步进电机PMW的驱动与放大
  单片机实现的步进电机控制系统具有成本低、使用灵活的特点,广泛应用于数控机床、机器人,定量进给、工业自动控制以及各种可控的有定位要求的机械工具等应用领域。步进电机是数字控制电机,将脉冲信号转换成角位移,电机的转速、停止的位置取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,非超载状态下,根据上述线性关系,再加上步进电机只有周期性误差而无累积误差,因此步进电机适用于单片机控制。步进电机通过输入脉冲信号进行控制,即电机的总转动角度由输入脉冲总数决定,而电机的转速由脉冲信号频率决定。步进电机的 驱动电路 是根据单片机产生的控制信号进行工作。因此,单片机通过向步进电机驱动电路发送控制信号就能实现对步进电机的控制。   1 系统设计原理
[单片机]
单片机<font color='red'>控制</font><font color='red'>步进电机</font>PMW的驱动与放大
步进电机驱动电路研究
1 引言 步进电机又称脉冲电动机, 是数字控制系统中的一种执行元件, 其功能是将脉冲电信号变换为相应的角位移或直线位移, 且其输出转角、转速与输入脉冲个数、频率有着严格的同步关系。虽然步进电机是一种数控元件, 易于同数字电路接口, 但一般数字电路的信号能量远远不足以驱动步进电机, 必须有一个与之匹配的驱动电路来驱动步进电机。步进电机的性能在很大程度上取决于驱动器的优劣。 2 步进电机驱动电路基本组成及工作要求 2. 1基本组成步进电机驱动系统的原理如图1 所示, 控制电路产生步进电机所需要的电脉冲信号, 脉冲分配器把电脉冲信号按规定的方式分配给步进电机各相励磁绕组, 使各相励磁绕组轮流接受脉冲信号的控制。控制电路经脉冲分配后
[嵌入式]
51单片机T0定时器应用2
1.实验任务   用AT89S51的定时/计数器T0产生2秒钟的定时,每当2秒定时到来时,更换指示灯闪烁,每个指示闪烁的频率为0.2秒,也就是说,开始L1指示灯以0.2秒的速率闪烁,当2秒定时到来之后,L2开始以0.2秒的速率闪烁,如此循环下去。0.2秒的闪烁速率也由定时/计数器T0来完成。 2.电路原理图 图4.16.1 3.系统板硬件连线 (1).把“单片机系统”区域中的P1.0-P1.3用导线连接到“八路发光二极管指示模块”区域中的L1-L4上 4.程序设计内容 (1).由于采用中断方式来完成,因此,对于中断源必须它的中断入口地址,对于定时/计数器T0来说,中断入口地址为000BH,因此在中断入口地方加入长跳转指令来执行中
[单片机]
<font color='red'>51单片机</font>T0定时器应用2
C51单片机利用74hc138扩展流水灯的仿真电路图+程序
C51单片机利用74hc138扩展流水灯程序 包含源代码,仿真电路 可以随意扩展多个LED 电路原理图如下: 单片机源程序如下: #define uint unsigned int #define uchar unsigned char void delay1(uchar y) { uchar i; uint j; for(i=0;i y;i++) { for(j=0;j 5000;j++); } } void led(void) { P3=0x01; //01 P2=0x00; delay1(20); P2=0x01; delay1(20); P2=
[单片机]
C<font color='red'>51单片机</font>利用74hc138扩展流水灯的仿真电路图+程序
51单片机NEC红外遥控器解码
【前言】 红外遥控器常用的调制制式主要分为两种,这里主要讲解以NEC调制方式的遥控器解码过程。 废话不多说,直接上时序图!( 更多详细资料自行查询) 总时序图: 前导码: ' 0 ' 和 ' 1 ' 编码表示: 【解码思路】 -----1、 使用定时器计算高低电平的时间 -----2、 使用数组存放一组完整的电平时间编码 -----3、 计算电平的时长 -----4、 组合数据,获得编码值,存放于数组 -----5、 LCD1602管显示 【编写程序】 /*-------------------------------------------------------- 程序功
[单片机]
<font color='red'>51单片机</font>NEC<font color='red'>红外</font>遥控器解码
TI 54xx DSP与51单片机的接口技术
1 硬件设计    1.1 时序匹配     HPI8总共有18根信号线。其中数据线8根(HD0~HD7),其余10根都是控制线,如表1所列 ①HAS:在数据线和地址复用的MCU中,与ALE信号连接,在下降沿锁存HBIL、HCNTL0/1、HR/W,因数这些信号通常与地址线连接。如果MCU的数据线和地址线没有复用,则应该接高电平。    ②HDS1、HDS2:数据传输的时序控制。时序见图1,即下降沿传输开始,上升沿传输结束。另外如果不使用HAS(即接高电平),也可以配合HCS对HBIL、HCNTL0/1、HR/W进行锁存。    ③HCNTL0/:选择HPI内部寄
[单片机]
TI 54xx DSP与<font color='red'>51单片机</font>的接口技术
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved