51單片機實現的簡易計算器
1. 4X4鍵盤輸入,點陣字符型液晶顯示。
2. 由于所采用的浮點程序庫的限制(MCU平臺只找到這個……),浮點運算采用3字節二進制補碼表示,有效數字6位。對于輸入輸出,采用3字節BCD碼浮點數格式,有效數字只有4位,因此最終有效數字只有4位。
3. 可進行連續輸入,例如:1.23+4.56*8.23/234.8 ,但是運算結果為從左到右,這也是8位簡易計算器的方式。
4. 可進行錯誤判斷,溢出、除零等錯誤將顯示一個字符 E 。
5. 由于鍵盤只有16個按鍵,安排如下:
+---------------+
| 7 | 8 | 9 | + |
| 4 | 5 | 6 | - |
| 1 | 2 | 3 | * |
| 0 | . | = | / |
+---------------+
6. 按鍵的缺少導致取消了一些特殊函數,即開根號,三角函數(sin, cos, tan, ctg)的實現,由于這些函數在浮點程序庫中均已提供,如果硬件允許,在原來的框架上添加這些附加功能是很容易的(可以看作和+, -, *, /等價的按鍵操作,調用不同的子程序進行運算即可)
7. 按兩次 = 等于清靈。因為按鍵實在太少,才采用了這個做法。
8. 相應舉例:
按鍵 結果 說明
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
123+= 123 按下等號而沒有第二個操作數,保留第一個操作數并認為此次運算結束(等號的功能)
123+321/111 4.0 等價于(123+321) / 111
2.3+5.4=/0.1+ 77 等號后直接按 / ,則將前面的運算結果作為第一個操作數
1/0= E 錯誤顯示
9. 不足
使用3字節的浮點數表示,不可避免的帶來了數表示的不精確,加上有效數字比較少,因此計算結果很容易產生誤差,尤其是進行連續多次運算后,結果和精度較高的科學計算器的誤差會很快達到0.01以上,當然這個差距和所測試的用例也有關系,4位有效數字導致了數字123456只能表示為123400,最后兩位有效數字被摒棄了。
同時,雖然純整數可以進行較為高精度的運算,實現也較為容易,但是考慮到要和浮點數混合在一起處理,如果在算法上分別考慮整數和浮點數,整個程序框架代碼將會膨脹不少,因此將其簡化為統一作為浮點數對待。
10. 源代碼
2000行左右(含注釋、空行),其中浮點程序庫約900行。其余為鍵盤輸入掃描、液晶輸出顯示和按鍵處理程序。文件大小 47.2 KB
|手機版|MCU資訊論壇
( 京ICP備18035221號-2 )|網站地圖
GMT+8, 2025-3-18 13:00 , Processed in 0.039979 second(s), 8 queries , Redis On.
Powered by Discuz! X3.5
© 2001-2024 Discuz! Team.