![]() |
IdeaMing 發表于 2022-3-8 14:47 好的 謝謝 |
設:X是16進制有符號數,需要轉成10進制并在LED7-0(由高到低的8位數碼管)上顯示。 方案: 1、設置S7-0:8個寄存器(或存儲器),存放X的絕對值的BCD碼,SS是符號標記(1=負,0=正)。 2、設置Y7-Y0:8個寄存器(或存儲器),對應存放S7-0段位譯碼值(數值依據LED的引腳譯碼,送屏后直接能顯示Sx的對應數字)。 3、設置BF7-0:8個閃動標記位,對應LED7-0是否需要閃動,1閃。例如:全不閃BF7-0=00000000;需要第2位閃BF7-0=01000000;需要首末位閃BF7-0=10000001。 4、LED顯示掃描程序(注:閃動是在此程序中實現的,這里從略。):從Y7-Y0取數據送屏顯示。 程序步驟(當X有變化時才做): 1、將X進行16進制→10制計算,絕對值入S7-0。【注:小數點的表示方式這里略去,負數的顯示方式以下也略去】 2、譯碼:從S7至S0順序譯碼。并設立一個首0標記:FE0 = 0/1 = 0顯示0/0顯示空,譯碼開始時置 FE0 = 1。【注:這是關鍵!!!】 3、譯碼規則:【注:這是關鍵!!!】 3.1、當Sx=0時,如果FE0 = 0,正常譯碼。如果FE0 = 1,將“0”譯成空(即:Yx=11111111,0亮1不亮的驅動。反之是Yx=00000000)。 3.2、當Sx<>0時,正常譯碼,并清FE0 = 0(阻止之后將“0”譯成空)。 3.3、末位S0必須正常譯碼(即必須譯成0-9,無論FE0是0是1,防止X=0時,LED7-0顯示全空)。 |
先以你想到的方法來做,做出來就是了,程序就是為了達到目的,這個目的并不難,你要先自己弄出來一個,然后去優化 |
加一個標志位吧,計數一共收到幾個數字,這樣你也就知道最高位是誰了,同時收到數字也不用8位全左移了。 |
在顯示那里修改,從最高位開始,如果是0、并且不是個位數,就不顯示該位。 |