• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > 用51单片机的红外控制步进电机的启停,但是步进电机不能正常停止,请教各位大神原因

用51单片机的红外控制步进电机的启停,但是步进电机不能正常停止,请教各位大神原因

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了用51单片机的红外控制步进电机的启停,但是步进电机不能正常停止,请教各位大神原因等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 用51单片机的红外控制步进电机的启停,但是步进电机不能正常停止,请教各位大神原因
描述:

#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar IRCOM[7];
uchar j,k,N=0;
uchar zf=0; //正反转标志位
uchar m=0;
sbit IRIN = P3^3;         //红外接收器数据线
void delay(uchar x);  //x*0.14MS
void delay2(uint i);
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void delay2(uint i)
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/*********************************************************************/
void delay(unsigned char x)    //x*0.14MS
{
 unsigned char i;
 while(x--)
 {
  for (i = 0; i<13; i++) {}
 }
}
/**********************************************************************/
void Outside_IRIN()  //初始化
{
EX1 = 1; //开外部中断0
IT1 = 1; //负边沿触发
EA = 1;   //开总中断
}
/**********************************************************/
 
void IR_IN() interrupt 2 using 0
{
  
     EX1 = 0;   
 delay(15);
 if (IRIN==1) 
  {
EX1=1;
     return;
  }
  //确认IR信号出现
while (!IRIN)            //等IR变为高电平,跳过9ms的前导低电平信号。
    {
delay(1);
}
  for (j=0;j<4;j++)         //收集四组数据
  { 
for (k=0;k<8;k++)        //每组数据有8位
{
while (IRIN)            //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
{
delay(1);
}
while (!IRIN)          //等 IR 变为高电平
{
delay(1);
  }
      while (IRIN)           //计算IR高电平时长
       {
     delay(1);
     N++;           
     if (N>=30)
  {
    EX1=1;
  return;
}                  //0.14ms计数过长自动离开。
       }                        //高电平计数完毕                
            
IRCOM[j]=IRCOM[j] >> 1;                  //数据最高位补“0”
      if (N>=8) 
  {
  IRCOM[j] = IRCOM[j] | 0x80;
  }  //数据最高位补“1”
    
 N=0;
 }//end for k
 }//end for j
   
   if (IRCOM[2]!=~IRCOM[3])
   { 
    EX1=1;
      return; 
   }
   if(IRCOM[2]==0x0C)//正转 1  
    {
P0=0xfe;
    }
   else if(IRCOM[2]==0x18)//反转 2
    {
   P0=0xfd;
   zf=~zf;
    }
   else if(IRCOM[2]==0x16)//停止 0
    {
   P0=0xaa;
   P1=0xff;
    }
   EX1 = 1; 
}
  
/*******************************************************************/
main()
{  
char code zz[8]={0x70,0x60,0x68,0x48,0x58,0x18,0x28,0x20}; 
char code fz[8]={0x20,0x28,0x18,0x58,0x48,0x68,0x60,0x70}; 
  P0=0x00;
    Outside_IRIN();//初始化
while(1)
{
 if(IRCOM[2]==0x0C)
{
for(;;)
{
P1=zf==0?zz[m]:fz[m]; //zf=0时,正传。zf=1时,反转
    delay(10);
m++;
if(m>7)
m=0;
if(IRCOM[2]==0x16)
     {
  break;
}
  
}
}
}
} //end main


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 用51单片机的红外控制步进电机的启停,但是步进电机不能正常停止,请教各位大神原因

相关文章

  • 2017-06-05 AltiumDesigner2010PCBLogoCreator
  • 2017-06-05 请问北京有没有什么大的ARM嵌入式板卡提供商?
  • 2017-06-05 PCI64-255字节的配置空间怎么访问
  • 2017-06-05 GPSu-bloxM8如何配置为北斗定位??
  • 2017-06-05 装了DriverStudio后找不到光驱了!急,拜托!
  • 2017-06-05 为什么我的外部中断函数不能在串口上显示,51单片机的,急急
  • 2017-06-05 我这里的一个老式笔记本,没有自带光驱,我给原来的硬盘格式华后,出现无法认识外接光驱的现象,应该如何解决?
  • 2017-06-05 水下机器人电缆通信
  • 2017-06-05 pic18f24k22+旋转编码器
  • 2017-06-05 RSA加密芯片如何复位

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 对ARM板硬盘可擦写次数的问题
    • 有关内存释放的问题??
    • 锂电池剩余电量测量方法
    • 请问cc1100如何实现碰撞检测
    • 有谁知道DriverStudio软件是收费的吗,由于单位不能装盗版软件随意不能随便下载,那位知道请告知。
    • Ubuntu1204下播放韦东山二三期视频的解决办法
    • arm9开发板加载完后,按enter键报错
    • Windriver603处理9054中断问题
    • linux模块加载提示版本不对
    • 高手请指点,我想将一个Linux下的打印机驱动程序移植到Windows下怎么做呢???

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有