這次研究的主題是如何用LabVIEW模擬Windows小算盤程式的計算功能
這個小算盤程式看起來簡單,實際要寫時遇到很多問題,在寫之前必須要先解析小算盤每個按鍵的功能特點
小算盤功能特點解析:
顯示幕顯示數字和錯誤訊息
除了C和CE鍵,其他按鍵在出現計算錯誤訊息時,按下去不會動作
0這個按鍵在顯示幕上只有0時按下去也不會動作,有其他數字時會插入其他數字後面,若有按下計算功能鍵(+-*/)時,則直接清除畫面以0取代
1~9按鍵在顯示幕只有0時或按下計算功能鍵時,直接清除畫面以1~9數字取代,有其他數字時會插入其他數字後面
.這個按鍵在顯示幕上有0~9以上數字時按下去會插入其他數字後面,但顯示幕上已有小數點時,按下去也不會動作
+/-個按鍵在顯示幕上只有0時按下去不會動作,有其他數字時,按一次則將顯示幕數字變成負數,再按一次則將顯示幕上的負數數字變成正數
左上角的是顯示M數值記憶狀態,有記憶數值時顯示為M,沒有時顯示為空白
MC這個按鍵會把M數值記憶清除
MR這個按鍵會把M數值記憶讀出顯示到顯示幕上
MS這個按鍵會把顯示幕上的數值存入M數值記憶中,但顯示幕為0時,這個按鍵不動作
M+這個按鍵會把顯示幕上的數值和M數值記憶的數值相加後,再存入M數值記憶中
Sqrt這個按鍵會把顯示幕上的數值開根號,運算後的結果顯示在顯示幕上。但顯示幕為0時,這個按鍵不動作。顯示幕為負數時,則出現輸入的函數不正確。的錯誤訊息。當出現錯誤訊息時,只能用C和CE鍵來清除顯示幕,否則無法進行其他操作
%這個按鍵在沒有按下計算功能鍵時,會直接清除畫面以0取代。有按下計算功能鍵時,會將按下計算功能鍵前的顯示幕的數值,乘上按下計算功能鍵後按下%這個按鍵時的顯示幕數值的百分比,運算後的結果顯示在顯示幕上。之後若再按計算功能鍵或=鍵,會把運算後的百分比數值和前一數值計算後顯示
1/x這個按鍵把顯示幕上的數值做倒數運算後顯示。若顯示幕為0時,則出現無法除以零。的錯誤訊息
C這個按鍵會清除顯示幕的數值和錯誤訊息成為0。同時也把所有已按下的計算功能清除
CE這個按鍵則只會清除顯示幕的數值和錯誤訊息成為0。不會把已按下的計算功能清除
Backspace這個按鍵會清除顯示幕上的數值的最右邊1個。當數值只剩1個或負數只剩含負號的2個字時,這個按鍵會清除顯示幕上的數值以0取代
+-*/功能鍵,在按下時會先將顯示幕上的數值暫時記憶。若之前已有按過計算功能鍵,則會先執行之前的計算,再將結果暫時記憶。若之前已有按過計算功能鍵後沒有按過任何數字鍵,則按鍵沒有動作。另外任何數值若除以0,則出現無法除以零。的錯誤訊息
=這個按鍵會直接執行計算功能鍵的計算功能,若沒有按計算功能鍵則=鍵不會動作。=鍵會記憶運算功能和第2個數值,之後只要按=鍵就會連續執行相同的計算功能,所以1+1+1...或2*2*2...這樣的功能可以靠按=鍵來達成
程式的畫面配置當然是完全仿造標準型小算盤程式的畫面,不過為了方便知道目前是哪種計算功能,特地在右上角加入可以顯示目前計算功能的框框
程式碼的部分:
為了省事,這個程式只支援滑鼠點選輸入,不支援以鍵盤輸入,唯一有支援的電腦鍵盤功能是按Esc鍵結束程式。另外為了不想把程式弄得太複雜,只設定成計算到小數以下12位數
完成的程式碼畫面如下:
在迴圈外側是所有用到的按鍵,由於程式裏只用每個按鍵的Mouse Down事件觸發動作,所以這些按鍵只放著,沒寫在程式內
迴圈上半寫了一堆移位暫存器,作為狀態、數值顯示及操作參數的記憶及傳遞
接著說明每個按鍵事件的程式
首先是唯一支援的電腦鍵盤功能,這功能是要結束程式,用的是Key Down?事件。用事件左邊的ScanCode傳出的值,當ScanCode傳出的值=1(Esc鍵代碼)時,就輸出信號結束程式
接著是0~9按鍵的Mouse Down事件,程式裏主要程式碼幾乎相同,右邊是在有錯誤訊息時讓按鍵對應的數值不能輸入。中間則是當有按下計算功能鍵時,把顯示幕清除以按鍵對應的數字取代。左邊則是在顯示幕只有0且沒有按下計算功能鍵時,以按鍵對應的數字取代0
再來是.按鍵的Mouse Down事件,同樣在有錯誤訊息時讓.按鍵無法輸入。或是已有輸入小數點時,.按鍵無法再輸入。若是有按下計算功能鍵時,則把顯示幕清除以0.數字取代
再來是+/-按鍵的Mouse Down事件,同樣在有錯誤訊息時讓+/-按鍵無法輸入。若有按下計算功能鍵時,把顯示幕清除0數字取代。當顯示幕只有0時,無法切換正負號。0以外數值,則正數變負數,負數則變正數
MC按鍵的Mouse Down事件,同樣在有錯誤訊息時不動作。以外則清除M記憶數值,也清除M記憶數值的狀態顯示
MR按鍵的Mouse Down事件,同樣在有錯誤訊息時不動作。此外則是在有M記憶數值的狀態下,把M記憶數值轉成字串顯示到顯示幕上
MS按鍵的Mouse Down事件,同樣在有錯誤訊息時不動作,另外當顯示幕只有0或有按下計算功能鍵時也不動作。此外則是把顯示幕上的字串轉成數字存入M記憶數值中
M+按鍵的Mouse Down事件,同樣在有錯誤訊息時不動作,另外當顯示幕只有0或有按下計算功能鍵時也不動作。此外則是把顯示幕上的字串轉成數字後,和M記憶數值相加,然後再存入M記憶數值中
Backspace這個按鍵的Mouse Down事件,同樣在有錯誤訊息時不能動作,每動作一次則清除顯示幕上右邊最後一個數字。當正數剩1個負數剩2個(含負號)字時,則清除顯示幕以0取代
CE這個按鍵的Mouse Down事件,只有把顯示幕上的數字或錯誤訊息清除為0,其餘的部分都沒有更動
C這個按鍵的Mouse Down事件,除了把顯示幕上的數字或錯誤訊息清除為0外,連已按下的計算功能和記憶的數值一並清除
Sqrt這個按鍵的Mouse Down事件,把顯示幕上的文字轉成數字並開根號運算,運算後的結果顯示在顯示幕上。當顯示幕上為負數時,則在顯示幕顯示輸入的函數不正確。的錯誤訊息
%這個按鍵的Mouse Down事件,在有錯誤訊息時不動作。在沒有按下計算功能鍵時,會清除顯示幕以0取代。有按下計算功能鍵時,會將按下計算功能鍵前的顯示幕的數值,乘上按下計算功能鍵後按下%這個按鍵時的顯示幕數值的百分比,運算後的結果顯示在顯示幕上。之後若再按計算功能鍵或=鍵,會把運算後的百分比數值和前一數值計算後顯示
1/x這個按鍵的Mouse Down事件,同樣在有錯誤訊息時不動作。若顯示幕為0時,則出現無法除以零。的錯誤訊息。此外則是把顯示幕上的數值做倒數運算後顯示
+-*/計算功能鍵的Mouse Down事件,同樣在有錯誤訊息時不動作。被按下時會先檢查是否之前已有按下其它計算功能,若有按下其它計算功能鍵後又沒有按下數字鍵,則不動作(計算功能鍵不能連按)。若有按下其它計算功能鍵後又有按下數字鍵,則會先進行上一個計算功能,然後等待輸入下一個數字。若沒有按下其它計算功能鍵,則會先將顯示幕上的字串轉成數值後記憶保存
=這個按鍵的Mouse Down事件,同樣在有錯誤訊息時不動作。此外則是直接進行計算功能,並將運算結果顯示在顯示幕上。不同的是=這個按鍵會記憶計算時輸入的第2個數字和計算功能,所以一直按=鍵會連續執行相同的計算功能
程式可能還會有些小問題,可能還有些Windows標準型小算盤程式會遭遇的操作狀態沒研究到,以上程式是以研究過後可能會出現的狀態為基礎去寫的
留言列表