c - MSP430 按钮未关闭的问题

标签 c embedded msp430

我正在为 msp430 编写一个程序。

第一次单击按钮时增量就会消失。释放按钮时它不会停止。

如何将增量限制为每次单击按钮一次增量?

#include <msp430.h>

int main(void)
{
   int i; //delay variable
   int dimeRead=0;
   int desired=1000;
   volatile int total=0;

   P1OUT=0;                  //Supposed to get rid of it hanging at the top
   WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer

   while(total<desired)
   {
      if((P1IN&0x16)!=0x16) // check if switch is pressed or not
      {
         dimeRead=dimeRead+1;
         total=total + 10;
      }

      //Goal is to flip an out put on to turn on light when desired number is hit.
   }

   return 0;  
}

最佳答案

首先像这样用掩码写下你的按钮引脚 #define 掩码 PIN1 | PIN2(1 和 2 更改为您的引脚)更适合视觉错误控制。 在第二个语句中,检查所有按下的按钮if ((P1IN&MASK)==MASK)

现在你的语句if((P1IN&0x16)!=0x16)检查3个引脚(PIN1、PIN2、PIN4)是否处于Hi状态,当它是错误的时生成代码

{
         dimeRead=dimeRead+1;
         total=total + 10;
}

如果你想在按下一个或两个按钮时递增,语句必须像这样 if((P1IN&MASK)!=0)

对于按下时向上推(HI 状态)的按钮,所有这些都成立,对于向下拉(LOW 状态)的按钮,则为 if((P1IN&MASK)!=MASK)

在 debounse 按钮​​增量后添加一些延迟。 如果您的按钮通过 PIN 和接地连接,则必须为此引脚启用上拉/

关于c - MSP430 按钮未关闭的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40779334/

相关文章:

c - 在 MSP430 软件中缩短 2 个不同的端口

c - MSP430F5418 端口中断发生在高到低和低到高的转换中

c - MSP430 微 Controller 的 printf 支持

c - 即使发送成功,recv 函数也会卡住

c - 带内部振荡器的 sleep 模式(PIC18f46j50)

c++ - 如何停止优化器丢弃未使用的变量?

linux - 为我的嵌入式设备定义一个干净且有效的 asound.conf

c - sqlite 中的表名长度会影响性能。为什么?

c - c中将元素插入二叉树

c - VxWorks 5.5 没有用 0xEEEEEEEE 填充堆栈