我想使用一個 8 位計數器變數和 C 用兩個 7 段顯示幕從 0 到 99 進行計數。
問題是當計數器為 10 時,8 位的值為 0b00001010,但顯示是分開的,因此右側顯示需要 4 位二進制數 0b0000,左側需要 0b0001,因此顯示顯示 10。我如何解決這個問題既增加計數器變數值又減少計數器變數值?
1 2
源代碼:
while(1)
{
__delay_ms(10);
if(button1 flank detected)
{
counter ;
}
if(button2 flank detected)
{
counter--;
}
PORTD = counter;
}
PORTD 是我的微控制器上的一個埠,有 8 個引腳。因此,如果 PORTD 設定為 0b0000 0001 引腳 1 將為高電平。第一個 7 段顯示幕連接到 PORTD 的前 4 個引腳,第二個 7 段顯示幕連接到最后 4 個引腳。
uj5u.com熱心網友回復:
首先,我會做這樣的事情:
#include <stdint.h>
struct DisplayValues
{
uint8_t left;
uint8_t right;
};
DisplayValues getDisplayValues(uint8_t input)
{
DisplayValues r;
r.right = input % 10;
r.left = input / 10;
return r;
}
您也可以只使用一些全域變數或向量或其他東西,而不是定義自己的結構。此答案中的重要內容只是向您展示如何將 0 到 99(輸入)之間的數字轉換為兩個代表十進制表示中數字的數字。
uj5u.com熱心網友回復:
“兩個 4 位 0-9”傳統上稱為二進制編碼的十進制。
代替:
PORTD = counter;
和:
PORTD = (counter / 10) << 4 | (counter % 10);
// 10s digit ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ 1s digit
uj5u.com熱心網友回復:
if(Button1 flank detected)
{
counter ;
}
if(Button2 flank detected)
{
counter--;
}
left = (counter / 10) << 4;
right = counter % 10;
out = (left | right);
PORTD = out;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/364601.html
上一篇:反轉陣列變數C 中的坐標
下一篇:使用C 模板進行除錯
