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