我正在處理當前使用微控制器和電路通過LED顯示二進制小數的分配。我必須使用三個按鈕:一個增加,一個減少,最後一個重置。我的佈線和配置已完成。另一方面,我的代碼有一些小故障,我不能用C語言簡介來解決這個問題。我正在使用Code Composer。問題一:我的「十幾」部分(MSB)的計數器不是停在9,而是開始顯示二進制10-15。前四位是(右)和後四位,十位(左)ex:1010 0001
,但最大值是1001 1001
。問題二:從零開始,如果我遞減數值,計數器顯示95而不是99. 例如:從0000 0000
開始遞減顯示1001 0101
。我嘗試使用if語句爲MSB停止,如果大於十,但代碼不運行的條件。幾乎對我的代碼做的任何修改都會阻止它正常工作。將十進制轉換爲BCD
#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--){
}
}
}
想一想。如果這個項目是增加和減少顯示器上的十進制數。如果增量後的變量大於9,則可以分別跟蹤每個數字,然後增加十個數字並使其爲零。一直把二進制分成十進制是一個很大的開銷,特別是對於一個msp430。 –
如果你的約數是0,它將換算成最大的非零值int,但是你的dectobcd最多隻能處理99 – user3528438
最大值是多少?顯示多少個BCD數字?可以增加溢出嗎?可以遞減下溢? – chux