就是我在上微處理機實驗
現在要用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};
不知道有幫助嗎?? 我同學跟我說用索引值
可是我真的不會
2006-12-27 15:53:34 · 2 個解答 · 發問者 魯西法 1 in 電腦與網際網路 ➔ 程式設計
手邊沒有 7 段顯示器的資料,只對22年前做的東東有一點印象。
你需要的不是 16 → 10,也不是 1 → 110!
而是把你要的數值,變成 7 段顯示器要的二進位顯示值。
(如程式最開始的圖示,但我不記得哪個燈是哪個二進位值)
程式是根據那東東寫的。你要自己改sec7[]裡的數值。
我給你的是 0~9, A~F
第一個 for 是輸入的是 0 ~ 15 的用法;
第二個 for 是輸入是鍵盤上的 0~9 的用法;
(程式用的是索引法)
當然,你要自己寫 sec_7( ) 怎麼去控制 7 段顯示器。
#include
#include
// ─ 0
// │ │ 1 2
// ─ 3
// │ │ 4 5
// ─. 6 7
void set_7(int n)
{ printf("%2X\n", 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;
}
2006-12-27 18:04:23 · answer #1 · answered by ? 7 · 0⤊ 0⤋
大於 9 的數值 加6 即可
0xa + 6 = 10
09 +0 =09
0xb + 6 = 11
其實最好的是 在處理這個資料時 即馬上對資料做bcd 的處理
8051 有個 指令 DA 就是轉bcd 的指令碼
你可以去看看這個指令
也就是 每四個bit 為一十進位
不然 就是做轉換的工作
2006-12-29 17:38:53 · answer #2 · answered by ? 5 · 0⤊ 0⤋