我目前正在做一项任务,该任务使用微控制器和电路通过 LED 显示二进制十进制。我必须使用三个按钮:一个用于递增,一个用于递减,最后一个用于重置。我的接线和配置已完成。另一方面,我的代码有一些小故障,我无法通过仅介绍 C 类来解决这些小故障。我正在使用代码编辑器。问题一:我在“十位”部分(MSB)上的计数器不会停在 9,而是开始显示二进制 10-15。前四位是个位(右),后四位是十位(左),例如:1010 0001
但最大值是1001 1001
. 问题二:如果我从零开始递减值,计数器显示 95 而不是 99。例如:从0000 0000
递减开始显示1001 0101
. 我尝试使用 if 语句为 MSB 设置条件,如果大于 10 则停止但代码不运行。我对代码所做的几乎所有修改都会阻止它正常工作。
#include <msp430.h>
unsigned int dec2bcd(unsigned int num);
void delay(void);
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
P1DIR = 0xFF;
P2DIR = 0xF0;
unsigned int c;
unsigned int count = 0x00;
while(1){
if((P2IN & BIT0) == BIT0){
count++;
c = dec2bcd(count);
}
else if((P2IN&BIT1) == BIT1){
count--;
c = dec2bcd(count);
}
else if((P2IN&BIT2) == BIT2){
count = 0x00;
c = dec2bcd(count);
}
delay();
P1OUT = c;
}
}
unsigned int dec2bcd(unsigned int num)
{
unsigned int ones = 0;
unsigned int tens = 0;
unsigned int temp = 0;
ones = num%10;
temp = num/10;
tens = temp<<4;
return (tens + ones);
}
void delay(void)
{
volatile unsigned int i, j;
for(i=10000; i>0; i--)
{
for(j=3; j>0; j--){
}
}
}