gpt4 book ai didi

十进制转BCD

转载 作者:太空宇宙 更新时间:2023-11-04 08:16:47 35 4
gpt4 key购买 nike

我目前正在做一项作业,该作业使用微 Controller 和电路通过 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--){
}
}
}

最佳答案

为什么看到 95?

如@Olaf 所述,msp430 使用 16 位整数。

当您执行 count = 0u -1 时,count 会自动换行到 65535

unsigned int dec2bcd(unsigned int num) // num is now 65535
{
unsigned int ones = 0;
unsigned int tens = 0;
unsigned int temp = 0;

ones = num%10; // 65535%10 = 5
temp = num/10; // 65535/10 = 6553
tens = temp<<4; // what's displayed is by tens is actually the lower
// 4 bits of tens, so tens is 6553%16=9
return (tens + ones);// so the result is 95
}

为什么十可以超过十

同样的问题,因为你的输入大于99。

unsigned int dec2bcd(unsigned int num) // say num is now 100
{
unsigned int ones = 0;
unsigned int tens = 0;
unsigned int temp = 0;

ones = num%10; // 100%10 = 0
temp = num/10; // 100/10 = 10, or 0x0A
tens = temp<<4;
return (tens + ones);// so the result is A0
}

你应该做什么?

在您的代码中,将范围限制为 0-99,您可以选择环绕式 (99+1=0, and 0-1=99) 或饱和度 (99+1=99, 0-1 =0).但是不管你需要什么,你都需要自己写,C语言没有提供。

关于十进制转BCD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35370200/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com