找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2852|回复: 6
打印 上一主题 下一主题
收起左侧

电动机控制程序 求各位大神给予指点和帮助啊!!!

[复制链接]
跳转到指定楼层
楼主
ID:59839 发表于 2014-8-23 21:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int
sbit P36=P3^6;
sbit P37=P3^7;
sbit P27=P2^7;
sbit Key=P0^2;
uchar Current_Level,Dest_Level;
uint i=0,M=0,N=0;
void DelayMS(uint dly);
void Key_scan(void);
void DcMonitor(void)
{
  if(Current_Level<Dest_Level)
  {
   M=Dest_Level-Current_Level;
   P27=1;
   P36=1;
   P37=0;
   Key_scan();
   for(i=N;i>0;i--)
   {
    Current_Level++;
   }
  }
else if(Current_Level>Dest_Level)
  {
   M=Current_Level-Dest_Level;
   P27=1;
   P36=0;
   P37=1;
   Key_scan();
   for(i=N;i>0;i--)
   {
    Current_Level--;
   }
  }
else
  {
   P27=0;
   P36=0;
   P37=0;
  }
}
void Key_scan(void)
{
  while(N<M)
  {while(Key==0)
   {
    DelayMS(10);
    if(Key==1)
    break;
    while(Key==0);
    N++;
   }
  }
}
void DelayMS (uint dly)
{
uint a,b;
for(a=dly;a>0;a--)
  for(b=247;b>0;b--);
}
void main()
{
P27=0;
P36=0;
P37=0;
  if(P1!=0XFF)
  {
   switch(P1)
   {
    case 0XFE:Dest_Level=5;DcMonitor();break;
    case 0XFD:Dest_Level=4;DcMonitor();break;  
    case 0XFB:Dest_Level=3;DcMonitor();break;
    case 0XF7:Dest_Level=2;DcMonitor();break;
    case 0XEF:Dest_Level=1;DcMonitor();break;
   }
  }
}
我想模拟的过程是这样的:按下K1,电机开始转动,右边的开关采集到一个低电平信号之后,电机停止转动,再按下K5,电机又开始转动,开关采集到4个低电平信号之后,电机停止转动,再按下K3,电机反向转动,开关采集到两个信号之后,电机停止转动。这个有点类似电梯的控制,程序应该怎么改才能实现这样的效果啊,求各位帮助,一起讨论!!!

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:26188 发表于 2014-8-23 23:44 来自手机 | 只看该作者

回帖奖励 +1

那你现在发的这个程序能实现哪些功能?
回复

使用道具 举报

板凳
ID:26188 发表于 2014-8-23 23:45 来自手机 | 只看该作者
最好把仿真的工程文件传上来,我在本地帮你,仿真一下看看
回复

使用道具 举报

地板
ID:59839 发表于 2014-8-24 09:47 | 只看该作者
hujia 发表于 2014-8-23 23:45
最好把仿真的工程文件传上来,我在本地帮你,仿真一下看看

现在只能实现按键按下了,电机开始转动,开关采集到信号之后,电机停止。先按K1,电机转,开关采集一个信号,电机停止;再按K5,开关采集5个信号之后电机停止;再按K3,电机转(还是原来的方向,没有反向转),开关采集3个信号之后电机停止。和我之前描述的过程不大一样,这里面的问题是程序没有把上一次按键按下的数值保存下来,供下一次使用,您给指点指点!!!
回复

使用道具 举报

5#
ID:59839 发表于 2014-8-24 09:54 | 只看该作者
563524748 发表于 2014-8-24 09:47
现在只能实现按键按下了,电机开始转动,开关采集到信号之后,电机停止。先按K1,电机转,开关采集一个信 ...


C.zip (11.75 KB, 下载次数: 8)
回复

使用道具 举报

6#
ID:19715 发表于 2014-8-24 11:54 | 只看该作者
void main()
{
P27=0;
P36=0;
P37=0;
        while(1)
        {
          if(P1!=0XFF)
          {
                   switch(P1)
                   {
                    case 0XFE:Dest_Level=5; N=0;break;
                    case 0XFD:Dest_Level=4; N=0;break;  
                    case 0XFB:Dest_Level=3; N=0;break;
                    case 0XF7:Dest_Level=2; N=0;break;
                    case 0XEF:Dest_Level=1; N=0;break;
                   }
          }
         DcMonitor();
        }
}
回复

使用道具 举报

7#
ID:59839 发表于 2014-8-24 15:38 | 只看该作者

我试了一下,可以仿真我说的功能了,我明白什么个意思了,谢谢你了啊!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表