C++ int8的增量计数
我正在研究cortex m0。我想增加一个声明为int8_t的变量的计数,但是在显示输出时,它的值非常不稳定。代码:C++ int8的增量计数,c++,cortex-m,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>
//
// 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
}
//
//Smpl_7seg_键盘
//
//输入:3x3小键盘(按键时输入=1~9,未按键时输入=0
//输出:7段LED
//
#包括
#包括“nuc1x.h”
#包括“DrvSYS.h”
#包括“七段h”
#包括“scankey.h”
#包括“NUC1xx-LB_002\LCD_Driver.h”
int32_t main(无效)
{
int8_t编号;
字符a[]={0'};
整数计数=0;
字符arr[]=“”;
UNLOCKREG();
DrvSYS_开放(48000000);
LOCKREG();
打开键盘();
初始_面板();
clr_所有面板();
//打印液晶显示器(0,“Msrit”);
sprintf(arr,“%d”,计数);
打印液晶显示器(0,arr);
而(1)
{
数字=扫描键();
//a[0]=48+个数字;
如果(数字==1)
{
clr_所有面板();
计数++;
//打印液晶显示器(0,“\(\ \ \ \ \ \ \/\)”;
//打印液晶显示器(1,“\(=”.=\)”;
//打印液晶显示器(2,“\(\”\)\(\”)”;
sprintf(arr,“%d”,计数);
打印液晶显示器(0,arr);
}
else if(数字=2)
{
clr_所有面板();
计数--;
//打印液晶显示器(0,“O”);
//打印液晶显示器(1“\/\”);
//打印液晶显示器(2“\/\”);
sprintf(arr,“%d”,计数);
打印液晶显示器(1,arr);
}
//打印液晶显示器(1,a);
//扫描键盘以获取数字(1~9)
显示七段(1,数字);//在七段LED上显示数字
DrvSYS_Delay(5000);//保持7段显示的延迟时间
关闭_seven_segment();//关闭7段LED
}
}
例如,输出为:
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;
...
}
也请仔细阅读