- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前正在做一项作业,该作业使用微 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/
今天我在正则表达式中偶然发现了一个奇怪的行为——匹配。我无法解释,尽管我认为我对正则表达式很有经验 print re.sub('a*|b', '', 'bcd') bcd 没有 glob 的地方 p
我有一个由 CashRegister Machine 创建的 Hex 文件。我必须读入这个文件。 文件使用下面详述的格式。它就像套接字数据包。 代码数据:2字节 PLU码数据:7字节 单价数据:5字节
我问了这个问题,Matching if all of BCD..n exist after last occurrence of A就在昨天,我们得到了快速而准确的答案(请参阅regex demo)。
我正在向左或向右移动 BCD 数字的位以快速乘以或除以 2。这是一个左移的快速示例: void LShift(unsigned char *arg) { int i, carry=0, temp
使用“Arduino 语言”(C++ 包装器)的 Arduino 项目 - 我有一个 8 字符数组,它以 {'H','H',':','M','M',':','S,'S 的形式提供 24 小时时钟'}
我有一个包含以下值的无符号字符数组:“\x00\x91\x12\x34\x56\x78\x90”;那是以十六进制格式发送的数字。此外,它是 BCD 格式:字节为 00,另一个字节为 91(8 位) 另
如何在不使用 sprintf 的情况下在 C 中实现这些转换? 20 => 0x20 12 => 0x12 目前我有: int year = 12; int month = 10; int day =
A、B、C 和 D 代表正则表达式的不同部分。 我要达到的效果:输入字符串为 ACD 或 BCD。用E替换C后,输出应该是AED或BED。 我使用的正则表达式: r=(A)C(D)|(B)C(D) 但
二进制字段的描述是: Caller number, expressed with compressed BCD code, and the surplus bits are filled with “
有人可以向我解释如何将BCD转换为十六进制吗?例如,如何将98(BCD)转换为十六进制。 谢谢。 最佳答案 我不太了解您的问题,但我猜是有人给您一个以BCD编码的数字98,该数字是: 1001 100
这是我努力尝试但无法解决的问题。 我从试卷上抓到了问题,我在考试中无法解决它,而其他学生也无法解决。 你可能会问,你为什么不问问你的讲师(这是一个公平的问题,因为你不是来解决考试问题或家庭作业的),我
我正在寻找现有的 Delphi Data.FmtBcd 库的替代品,因为我刚刚达到了它的限制,例如它可以表示的最大十进制数字,并且程序因 EBcdOverflowException 终止。出于好奇,我
如果您不了解二进制,我知道 BCD 是更直观的数据类型。但我不知道为什么要使用这种编码,它好像没有多大意义,因为它浪费以 4 位表示(当表示大于 9 时)。 另外,我认为 x86 仅支持直接添加和替换
我应该如何将包含十六进制值的 uint8 数组转换为打包的 bcd 值?简单地调动 4 个位置就能完成工作吗?如果可能的话,我希望提供一些代码示例以更好地理解我的问题 最佳答案 以下代码是如何转换的示
我是一名学习 C++ 的初学者(自学)程序员,最近我决定实现一个二进制编码的十进制 (BCD) 类作为练习,这样我就可以在 Project Euler 上处理非常大的数字。 .我想尽可能从根本上做到这
我正在寻找更好的方法来优化此功能以获得更好的性能,加快其针对嵌入式设备的目标。我欢迎任何指点,建议谢谢 函数将字符串BCD转为十进制 int ConvertBCDToDecimal(const std
我现在解决这个问题太蠢了...... 我得到一个BCD码(每个数字都是自己的4Bit表示) 比如我想要的: 输入:202(十六进制)== 514(十进制) 输出:BCD 0x415 输入:0x202
在我的项目中使用的值是用4位二进制编码的十进制数(BCD)表示的,它最初存储在一个字符缓冲区中(例如,由指针指向 const unsigned char *) .我想将输入的 BCD 字符流转换为整数
我正在寻找一种将字符串转换为等效 BCD 码的方法。我使用Java,但这确实不是语言的问题。我试图逐步了解如何将字符串转换为 BCD。 例如,假设我有以下字符串; "0200" (This strin
我知道您可以使用此表将十进制转换为 BCD: 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 此转换是否有方
我是一名优秀的程序员,十分优秀!