2451|0

59

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

看一看这个程序中的按键为什么不起作用呀 [复制链接]

///////////////////步进电机A,B正反转调试程序/////////////
#include  
/*****P4.0=A ;P1.5=B ;P1.6=A' ; P1.7=B'****/  
code unsigned char zrun[4]={0x7f,0xbf,0xdf,0xef};  //四相四拍工作方式
/*****P1.0=A ;P1.1=B ;P1.2=A' ; P1.3=B'****/  
code unsigned char frun[4]={0xef,0xdf,0xbf,0x7f};  //四相四拍工作方?
unsigned char i,j,k;//延时变量
unsigned char y;//定义延时时间,时间越长电机转速越慢反之则快
unsigned char pda=0;//判断正反转变量
unsigned char y1=0,y2=5;  //y坐标
unsigned char yq=0,yz=0;  //起点,终点中间变量切换
unsigned int a=0;  //计算得到的A电机步数     
bit aqd=0;   //A电机停止启动    默认停止
bit fz=1;//判断是否执行赋值函数
unsigned char za=0;
bit qr=0;  //赋值后是否确认   默认否
bit yx=1; //按键重复允许   默认否
unsigned char r;  //给x,y赋值的中间变量
unsigned char tq,tz;//起点,终点中间变量
unsigned char p=0,q=0;  //赋值和确认中间标志
unsigned char t;
unsigned char data1[4]={0,0,0,0};
unsigned char kcs=0;
bit kz=0;
void delay(i)//延时函数
{  
for(j=0;j for(k=0;k<250;k++);
}
/****A电机转动函数****/
void azhuandong()
{
   if(pda==1)    //a电机正转
     { P1=zrun[za];
          delay(y);
    za++;    //步序加1
       if(za==4)za=0;
     }
if(pda==2)  //a电机反转
       { P1=frun[za];
            delay(y);
      za++;    //步序减1
      if(za==4)za=0;
     }

}
//**********赋值走线函数**********//
void fuzhizouxian(unsigned char x1,unsigned char x2)   
{
  

  
  if(x2>x1) {pda=1;a=17.88*(x2-x1)/1;} //从下往上      
  if(x2   
  
}
//**步进电机运行函数**//
void yunxing()   
{
  
  if(aqd==1)   //A步进电机
              {
              if(a>0)  //步骤未走完
     {
        azhuandong();
        a--;
   
      }
     else {  //步骤已走完
           aqd=0;
     P1=0xff;  //端口置1,防止电流过大
   
       }
     }  
}

//////////////////////////*************按键********///////////////////////////////////
void Getch()  //矩阵键盘程序
{
unsigned char X,Y,Z;
P2=0xff;
P2=0x0f; //先对P2置数 行扫描   
if(P2!=0x0f) //判断是否有键按下   
           {delay(200); //延时,软件去干扰   
           if(P2!=0x0f) //确认按键按下X = P2;   
                      { kcs++;
                       X=P2; //保存行扫描时有键按下时状态   
                       P2=0xf0; //列扫描   
                       Y=P2;    //保存列扫描时有键按下时状态   
                       Z=X|Y; //取出键值  
                       switch(Z) //判断键值(那一个键按下)
                                {
                                 case 0xee: {      //0对键值赋值
                       
                data1[kcs]=0;
                  
                    }
            ;break;
                                 case 0xde: {data1[kcs]=1;}  break;    //1
                                 case 0xbe: {data1[kcs]=2;}  break;    //2
                                 case 0x7e: {data1[kcs]=3;}  break;    //3
                                 case 0xed: {data1[kcs]=4;}  break;    //4
                                 case 0xdd: {data1[kcs]=5;}  break;    //5
                                 case 0xbd: {data1[kcs]=6;}  break;    //6
                                 case 0x7d: {data1[kcs]=7;}  break;    //7
                                 case 0xeb: {data1[kcs]=8;}  break;    //8
                                 case 0xdb: {data1[kcs]=9;}  break;    //9
                                 case 0xbb: {fz=1;
          data1[0]=data1[1]*100+data1[2]*10+data1[3];
              
           }  break;    //A//确认按键     
                                 //case 0x7b: {} break;  //B //运行按键
                                 //case 0xe7: {} break;    //C//正转
                                 //case 0xd7: {} break;    //D//反转
                                 //case 0xb7: {} break;    //E
                                // case 0x77: {} break;    //F
                                }
                      }
           }
else yx=1;
// data1[0]=20;    fz=1;
}
main()
{ aqd=1;
  y=5;     //定义延时时间,时间越长电机转速越慢反之则快

  while(1)
   {  
    Getch();
// data1[0]=20;fz=1;
    if(fz==1)
            {fz=0;
    y1=y2;
    y2=data1[0];
          fuzhizouxian(y1,y2);
    yunxing();

         }
            
  
    }
}
知道的,发表一下自己的看法,谢谢啦。
原因,例如我按键的起始值为10,终点值是20,但它就是不运行。
此帖出自单片机论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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