c++ - int8_t 的增量计数

标签 c++ cortex-m

我正在研究 cortex m0。我想增加一个声明为 int8_t 的变量的计数,但在显示输出时它非常不稳定。代码:

//
// Smpl_7seg_keypad
//
// Input:  3x3 keypad (input = 1~9 when key is pressed, =0 when key is not pressed
// Output: 7-segment LEDs
//
#include <stdio.h>                                                                                                           
#include "NUC1xx.h"
#include "DrvSYS.h"
#include "Seven_Segment.h"
#include "scankey.h"
#include "NUC1xx-LB_002\LCD_Driver.h"


int32_t main (void)
{
int8_t number;
char a[]={'0'};
int count=0;
char arr[]="    ";

UNLOCKREG();
  DrvSYS_Open(48000000);
LOCKREG();

OpenKeyPad();   
Initial_panel();
clr_all_panel();
//print_lcd(0, "Msrit");
sprintf(arr,"%d",count);
print_lcd(0,arr);
while(1)
{
  number = Scankey(); 
    //a[0]=48+number;
    if(number ==1)
    {
        clr_all_panel();
        count++;
        //print_lcd(0,"\(\\__/\)");
        //print_lcd(1,"\(='.'=\)");
        //print_lcd(2,"\(\"\)_\(\"\)");
        sprintf(arr,"%d",count);
        print_lcd(0,arr);


    }
    else if(number==2)
    {
        clr_all_panel();
        count--;
        //print_lcd(0," O");
        //print_lcd(1,"\/|\\");
        //print_lcd(2,"\/ \\");
        sprintf(arr,"%d",count);
        print_lcd(1,arr);

    }
    //print_lcd(1, a); 
    // scan keypad to get a number (1~9)
    show_seven_segment(1,number); // display number on 7-segment LEDs
    DrvSYS_Delay(5000);           // delay time for keeping 7-segment display 
    close_seven_segment();        // turn off 7-segment LEDs                                 
}

例如输出为: 12,28,28,29,41

我需要对代码进行哪些更改才能使计数变量正常递增?

最佳答案

增量本身很好。问题是您正在紧密循环中检查 Scankey()。无论您松开按钮的速度有多快,循环都会设法执行多次,使计数器增加一以上。

在再次递增计数器之前,您需要等待按钮被释放。一种方法是保留您从 Scankey() 获得的最新值,并且仅在 Scankey()< 的输出时输入 if 序列 更改:

int8_t prev_number = 0;
...
while(1) {
  number = Scankey();
  if (number != prev_number) {
    if(number == 1) {
      clr_all_panel();
      ...
    } else if (...) {
      ...
    }
  }
  prev_number = number;
  ...
}

另请阅读 debouncing .

关于c++ - int8_t 的增量计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23167201/

相关文章:

c++ - 具有多种返回类型的函数

c++ - 如何使用opencv提高测量精度

embedded - 嵌入式 CortexM3 平台上的 ZeroMQ

gdb - 使用JLink和GDB读取Cortex M0 MCU的外设寄存器

c++ - 为什么编译器似乎忽略了模板类中的 if 语句?

c++ - 在 Windows 10 上从源代码编译 libcurl 7.61.1

c++ - 将 Fortran 语言转换为 C 或 C++

assembly - 将数据写入绝对地址

c - STM32F4 中断处理程序用于捕获其未调用

c - QEMU 中的 CPU 定时器供应