標題: 單片機加法計算器程序調(diào)試問題 [打印本頁]

作者: xnysfh    時間: 2023-6-30 14:21
標題: 單片機加法計算器程序調(diào)試問題
void KeyAction(unsigned char keycode)
{
    static unsigned long result = 0;  //用于保存運算結(jié)果
    static unsigned long addend = 0;  //用于保存輸入的加數(shù)
   
    if ((keycode>=0x30) && (keycode<=0x39))  //輸入0-9的數(shù)字
    {
        addend = (addend*10)+(keycode-0x30); //整體十進制左移,新數(shù)字進入個位
        ShowNumber(addend);    //運算結(jié)果顯示到數(shù)碼管
    }
    else if (keycode == 0x26)  //向上鍵用作加號,執(zhí)行加法或連加運算
    {
        result += addend;      //進行加法運算
        addend = 0;
        ShowNumber(result);    //運算結(jié)果顯示到數(shù)碼管
    }
    else if (keycode == 0x0D)  //回車鍵,執(zhí)行加法運算(實際效果與加號相同)
    {
        result += addend;      //進行加法運算
        addend = 0;
        ShowNumber(result);    //運算結(jié)果顯示到數(shù)碼管
    }
    else if (keycode == 0x1B)  //Esc鍵,清零結(jié)果
    {
        addend = 0;
        result = 0;
        ShowNumber(addend);    //清零后的加數(shù)顯示到數(shù)碼管
    }
}
問:(keycode-0x30)計算出是一個十六進制的數(shù), ShowNumber(addend)的addend是一個十進制的數(shù)






作者: lkc8210    時間: 2023-6-30 17:56
進制是給人看得
單片機只認1/0
作者: 飛云居士    時間: 2023-6-30 18:00
你的shownumber()是按十進制格式顯示的,可改成十六進制格式輸出,就不是十進制的數(shù)了。你可以手工轉(zhuǎn)換下十進制數(shù)為十六進制數(shù),看看顯示的值是否正確
作者: dwping    時間: 2023-7-1 21:13
在給定的代碼中,(keycode-0x30)計算的結(jié)果是一個十六進制數(shù)減去十六進制數(shù)字0x30,這實際上是將十六進制數(shù)轉(zhuǎn)換為對應的十進制數(shù)。這是因為在ASCII編碼中,數(shù)字0-9的十六進制表示正好是0x30-0x39。所以,通過將keycode減去0x30,可以將十六進制數(shù)字轉(zhuǎn)換為對應的十進制數(shù)字。

ShowNumber(addend)函數(shù)可能接受的是十進制數(shù)字作為參數(shù),因為在代碼中沒有給出ShowNumber函數(shù)的實現(xiàn)細節(jié),無法確定確切的數(shù)據(jù)類型。但是,根據(jù)代碼中的邏輯,addend應該是一個保存十進制數(shù)字的變量,因為它在每次按下0-9的數(shù)字鍵時都會被更新,并且最終傳遞給ShowNumber函數(shù)以顯示在數(shù)碼管上。
作者: xnysfh    時間: 2023-7-3 08:31
dwping 發(fā)表于 2023-7-1 21:13
在給定的代碼中,(keycode-0x30)計算的結(jié)果是一個十六進制數(shù)減去十六進制數(shù)字0x30,這實際上是將十六進制數(shù) ...

非常感謝,看了你的解釋我大致明白了





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1