1.png (11.38 KB, 下載次數: 46)
下載附件
2021-1-22 19:02 上傳
在做工控開發的時候,有時需要獲得按鍵輸入的數值然后顯示。當輸入整數數據的時候是比較簡單的,按鍵輸入一個數字后,把之前的數據乘以10(十進制的話),然后加上當前輸入的數字就可以,在需要顯示的時候,把每一位數字按照規則編碼后,用向左移位的方法依次存入一個顯示數組中,然后再依次把顯示數組每一位送出顯示就行。
但是在處理有小數點的數據的時候要麻煩一點,因為你事前是不知道有多少位小數的,所以你就不能事前知道應該把那個小數點放到顯示數組的哪一位。但是也不是沒有解決的方法,可以這樣做:
(1)先記錄按鍵輸入的數據到一個變量,還需記錄輸入了多少位小數
● 記錄按鍵輸入的數字位,所有的數字鍵輸入的數據都存入一個變量data,這個變量包含了整數部分和小數部分。假設數字按鍵值為key,且是十進制的數據,那么每輸入一個數字按鍵就進行累計,C代碼如下:
data=data*10+key; //將每次輸入的按鍵值累加到變量data
● 記錄有沒有輸入小數點,輸入了幾位小數。可以定義一個變量DecimalNumber,初始化為0,當操作者點擊了小數點后令DecimalNumber=1,當按了小數點后繼續輸入數字,那么就要繼續用累加的方法記錄輸入了多少位小數,如:
按了小數點后按了一位數字(1位小數),令DecimalNumber=2;
又按了一位數字(2位小數),令DecimalNumber=3;
以此類推,那么這個變量DecimalNumber就記錄了按沒有按小數點,有多少位小數。
● 在以后參與計算的時候可以定義一個浮點數變量data1,判斷DecimalNumber,當DecimalNumber≥2時,令data1=data/(10^(DecimalNumber-1)),就可以得到按鍵輸入的完整的小數數據data1。
(2) 知道了data和DecimalNumber,怎么存入顯示數組發送去顯示?
● 定義一個顯示數組dis[],用于按位存放待顯示的數據,包括了整數、小數點和小數部分;
2.png (8.8 KB, 下載次數: 57)
下載附件
2021-1-22 19:02 上傳
● 分為三部分處理:小數部分、小數點、整數部分。分步驟,依次將這三部分存入顯示數組:
I.小數部分用循環指令,for或者while都行,根據DecimalNumber的值來將data的小數部分存入dis[]數組的低段部分,例如:
unsigned char i=0;//循環變量
for(i=2;i++;i<=DecimalNumber) //依次將小數部分由低到高存入數組dis[]
{ dis[i-2]= (data/(10^( i-2)))%10+’0’;// +’0’表示轉換為ASCII碼。 ^是冪函數,這里為了顯示方便用^,實際應當用pow函數
}
II.將小數點存入顯示數組dis[];
dis[DecimalNumber-1]=’.’;
III.還是用循環指令,將整數部分繼續往左存入顯示數組dis[],C代碼如下:
for(i=DecimalNumber;i++;i<=n) //依次將整數部分由低到高存入數組dis[],n表示整數和小數部分一共預期有多少位數
{ dis= data/(10^( i-1))%10+’0’; }
如此一來,就把小數的全部數據存入了顯示數組dis[]中,包括小數點,再發送給顯示設備就可以了。思路是這樣的,不過程序沒有驗證,僅供參考。
全文完。
51hei隨意打賞 - 美化.png (46.23 KB, 下載次數: 43)
下載附件
2021-1-22 19:06 上傳
|