標題:

十六進制轉十進制的問題 用C做的

發問:

就是我在上微處理機實驗 現在要用KELI C+微處理機的鍵盤跟7段顯示器作一個計算機 然後問題是 假設現在按1 他是傳一個值 那個值是0x01 那請問要怎麼在C中讓它變成1 10進位的 還有 我程式最上面有寫下面這行 code unsigned char da[30] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,0x20}; 不知道有幫助嗎?? 我同學跟我說用索引值 可是我真的不會

最佳解答:

手邊沒有 7 段顯示器的資料,只對22年前做的東東有一點印象。 你需要的不是 16 → 10,也不是 1 → 110! 而是把你要的數值,變成 7 段顯示器要的二進位顯示值。 (如程式最開始的圖示,但我不記得哪個燈是哪個二進位值) 程式是根據那東東寫的。你要自己改sec7[]裡的數值。 我給你的是 0~9, A~F 第一個 for 是輸入的是 0 ~ 15 的用法; 第二個 for 是輸入是鍵盤上的 0~9 的用法; (程式用的是索引法) 當然,你要自己寫 sec_7( ) 怎麼去控制 7 段顯示器。 #include #include // ─ 0 // ││12 // ─ 3 // ││45 // ─. 67 void set_7(int n) { printf("%2X ", n); } int main() { int i, sec7[] = { 0x37, // 0 = _654 _210 0x24, // 1 = __5_ _2__ 0x5D, // 2 = _6_4 32_0 0x6F, // 3 = _65_ 3210 0x2F, // 4 = __5_ 3210 0x6B, // 5 = _65_ 3_10 0x7B, // 6 = _654 3_10 0x25, // 7 = __5_ _2_0 0x7F, // 8 = _654 3210 0x6F, // 9 = _65_ 3210 0x3F, // A = __54 3210 0x7A, // b = _654 3_1_ 0x58, // c = _6_4 3___ 0x7C, // d = _654 32__ 0x5F, // e = _6_4 3210 0x1B // F = ___4 3_10 }; for (i=0; i<16; i++) set_7(sec7[i]); for (i='0'; i<='9'; i++) set_7(sec7[i-'0']); system("pause"); return 0; }

其他解答:

大於 9 的數值 加6 即可 0xa + 6 = 10 09 +0 =09 0xb + 6 = 11 其實最好的是 在處理這個資料時 即馬上對資料做bcd 的處理 8051 有個 指令 DA 就是轉bcd 的指令碼 你可以去看看這個指令 也就是 每四個bit 為一十進位 不然 就是做轉換的工作

 

此文章來自奇摩知識+如有不便請留言告知

428DFA428D9FA6F8
arrow
arrow
    創作者介紹
    創作者 jpjzhf9 的頭像
    jpjzhf9

    jpjzhf9的部落格

    jpjzhf9 發表在 痞客邦 留言(0) 人氣()