黄工无刷电机学习
直播中

半导体开发

9年用户 848经验值
擅长:可编程逻辑
私信 关注
[问答]

独立按键可以控制直流电动机的正反转吗

独立按键可以控制直流电动机的正反转吗?
怎么去解决独立按键控制直流电动机正反转的问题?

回帖(1)

李兆存

2021-10-14 09:32:08
  独立按键控制直流电动机正反转
  这篇程序是引用开发板资源里面的代码,我只是稍加修改
  这篇代码中我添加了我的理解,若有错误,希望大佬指出!
  另外还有些疑问:kerpros函数应该不是一个关键字吧?我在代码中把他改成其他单词后,代码依旧能够运行。
  对数据类型声明的时候,用typedef unsigned int u16,是对int的重命名,此声明过后,对变量的定义就可以写u16 i,相当于unsigned int i。
  #include “reg52.h” //此文件中定义了单片机的一些特殊功能寄存器
  typedef unsigned int u16; //对数据类型进行声明定义;
  typedef unsigned char u8; //tepedef unsigend 是对int char之类的数据类型进行重命名,
  ***it K1 = P3^1; //定义P31口是k1
  ***it IN1 = P2^0; //定义P20口是led
  ***it IN2 = P2^1;
  ***it AA = P2^2;
  ***it BB = P2^3;
  /*******************************************************************************
  * 函 数 名 : delay
  * 函数功能 : 延时函数,i=1时,大约延时10us
  *******************************************************************************/
  void delay(u16 i)
  {
  while(i--);
  }
  /*******************************************************************************
  * 函 数 名 : keypros; keypros应该是人为定义的,只要在引用的时候保持一直即可
  * 函数功能 : 按键处理函数,判断按键K1是否按下
  *******************************************************************************/
  void keypros()
  {
  if(k1==0) //检测按键K1是否按下
  //第一次检测,如果k1=0,则开始执行下面的程序;
  //消抖的delay子函数的输入量不宜过大,否则会按下按键一次的时间可能小于消抖的时 间,此时需要按两次按键才能执行取反的命令;
  //执行完取反指令后,程序开始检测按键是否松开,若魏松凯,则程序停止在while位置,松开后,则函数回到消抖的位置继续执行。。。。。。
  {
  delay(1000); //消除抖动 一般大约10ms
  if(k1==0) //再次判断按键是否按下
  {
  IN1 = ~IN1;
  IN2 = ~IN2; //电动机状态取反
  }
  while(~k1); //检测按键是否松开
  }
  }
  /*******************************************************************************
  * 函 数 名 : main
  * 函数功能 : 主函数
  * 输 入 : 无
  * 输 出 : 无
  *******************************************************************************/
  void main()
  {
  IN1 = 0;
  IN2 = 1;
  while(1)
  {
  keypros(); //按键处理函数
  }
  }
举报

更多回帖

发帖
×
20
完善资料,
赚取积分