51開發板開發計算器程序

      網友投稿 677 2022-05-28

      A51單片機開發計算器

      日期::date:2022年1月6日

      學習內容:::book:

      51單片機開發計算器驗收

      華為云沙箱實驗

      markdown語法學習

      ###1. A51單片機開發計算器

      1、加數和被加數的輸入位數固定為4位;

      2、相加結果顯示要考慮進位的輸出顯示(即5位輸出);

      3、注意對“0”——“9”、“+”、“=”以外按鍵輸入的處理;

      4、注意對相加結果進行十進制處理;

      5、輸入加數和被加數時,顯示器上顯示的數字要像平時用的計算器輸入一樣,即:每輸入一個數字,原來顯示的數字要往左移。

      6、可以完成累加功能,即可以完成如下內容:3265+3885+1254+2358+7779+……

      如圖所示,用AT89S51的并行口P1接4×4矩陣鍵盤,P1.0-P1.3作輸入線,以P1.4-P1.7作輸出線;在數碼管上顯示每個按鍵的“0-F”序號。對應的按鍵的序號排列如圖所示

      (1. 開機時,顯示“0”

      (2. 第一次按下時,顯示“D1”;第二次按下時,顯示“D1D2”;第三按下時,顯示“D1D2D3”,8個全顯示完畢,再按下按鍵下時,給出“嘀”提示音。

      (3. 數字0-9點陣顯示代碼的形成

      用4*4鍵盤做一個模擬計算器,實現最高四位的加,減,乘,除功能,按鍵識別和顯示部分我都會,就是按鍵后怎樣將運算符前后的數據區分開

      1.輸入一位就顯示一位,在輸入一個運算符之前最多只能輸入四位。

      2.將運算符前,后的數據區分開來,同時將運算符前后輸入的數據轉換為一個10進制數。

      3.對輸入的數據進行處理,即進行算術運算,最重要的是對于除法時,如果有小數位時,顯示部分應該做處理。

      2. 計算器硬件設計

      硬件系統是指構成微機系統的實體和裝置,通常由運算器、控制器、存儲器、輸入接口電路和輸入設備、輸出接口電路和輸出設備等組成。單片機實質上是一個硬件的芯片,在實際應用中,通常很難直接和被控對象進行電氣連接,必須外加各種擴展接口電路、外部設備、被控對象等硬件和軟件,才能構成一個單片機應用系統。

      系統的硬件構成及功能

      硬件電路原理圖

      (1. 把“單片機系統“區域中的P3.0-P3.7端口用8芯排線連接到“4X4行列式鍵盤”區域中的C1-C4 R1-R4端口上;

      (2. 把“單片機系統”區域中的P0.0/AD0-P0.7/AD7端口用8芯排線連接到“四路靜態數碼顯示模塊”區域中的任一個a-h端口上;要求:P0.0/AD0對應著a,P0.1/AD1對應著b,……,P0.7/AD7對應著h。

      (1. 4×4矩陣鍵盤識別處理

      (2. 每個按鍵有它的行值和列值 ,行值和列值的組合就是識別這個按鍵的編碼。矩陣的行線和列線分別通過兩并行接口和CPU通信。每個按鍵的狀態同樣需變成數字量“0”和“1”,開關的一端(列線)通過電阻接VCC,而接地是通過程序輸出數字“0”實現的。鍵盤處理程序的任務是:確定有無鍵按下,判斷哪一個鍵按下,鍵的功能是什么;還要消除按鍵在閉合或斷開時的抖動。兩個并行口中,一個輸出掃描碼,使按鍵逐行動態接地,另一個并行口輸入按鍵狀態,由行掃描值和回饋信號共同形成鍵編碼而識別按鍵,通過軟件查表,查出該鍵的功能。

      P3=FFH, P3.0=0 有鍵按下嗎? 延時10ms 真得有鍵按下嗎? 根據當前狀態識別按鍵 P3=FFH, P3.1=0 有鍵按下嗎? 延時10ms 真得有鍵按下嗎? 根據當前狀態識別按鍵 P3=FFH, P3.2=0 有鍵按下嗎? 延時10ms 真得有鍵按下嗎? 根據當前狀態識別按鍵 P3=FFH, P3.3=0 有鍵按下嗎? 延時10ms 真得有鍵按下嗎? 根據當前狀態識別按鍵

      2.4點陣式LED“0-9”數字顯示技術

      電路原理圖

      (1). 把“單片機系統”區域中的P1端口用8芯排芯連接到“點陣模塊”區域中的“DR1-DR8”端口上;

      (2). 把“單片機系統”區域中的P3端口用8芯排芯連接到“點陣模塊”區域中的“DC1-DC8”端口上;

      3.程序設計內容

      (1). 數字0-9點陣顯示代碼的形成

      如下圖所示,假設顯示數字“0”

      1 2 3 4 5  6 7 8

      00 00 3E 41 41 41 3E 00

      因此,形成的列代碼為

      00H,00H,3EH,41H,41H,3EH,00H,00H;

      只要把這些代碼分別送到相應的列線上面,即可實現“0”的數字顯示。

      送顯示代碼過程如下所示

      送第一列線代碼到P3端口,同時置第一行線為“0”,其它行線為“1”,延時2ms左右,送第二列線代碼到P3端口,同時置第二行線為“0”,其它行線為“1”,延時2ms左右,如此下去,直到送完最后一列代碼,又從頭開始送。

      數字“1”代碼建立如下圖所示

      1 2 3 4 5  6 7 8

      其顯示代碼為

      00H,00H,00H,00H,21H,7FH,01H,00H

      數字“2”代碼建立如下圖所示

      1 2 3 4 5  6 7 8

      00H,00H,27H,45H,45H,45H,39H,00H

      數字“3”代碼建立如下圖所示

      1 2 3 4 5  6 7 8

      00H,00H,22H,49H,49H,49H,36H,00H

      數字“4”代碼建立如下圖所示

      1 2 3 4 5  6 7 8

      00H,00H,0CH,14H,24H,7FH,04H,00H

      數字“5”代碼建立如下圖所示

      1 2 3 4 5  6 7 8

      00H,00H,72H,51H,51H,51H,4EH,00H

      數字“6”代碼建立如下圖所示

      1 2 3 4 5  6 7 8

      00H,00H,3EH,49H,49H,49H,26H,00H

      數字“7”代碼建立如下圖所示

      51開發板開發計算器程序

      1 2 3 4 5  6 7 8

      00H,00H,40H,40H,40H,4FH,70H,00H

      數字“8”代碼建立如下圖所示

      1 2 3 4 5  6 7 8

      00H,00H,36H,49H,49H,49H,36H,00H

      數字“9”代碼建立如下圖所示

      1 2 3 4 5  6 7 8

      00H,00H,32H,49H,49H,49H,3EH,00H

      4. 系統的軟件設計

      本系統的軟件系統主要可分為主程序、4×4矩陣式鍵盤識別程序、點陣式LED“0-9”數字顯示程序三大模塊。在程序設計過程中,加強了部分軟件抗干擾措施,下面對部分模塊作介紹。

      ORG 0000H LJMP MAIN ORG 0030H MAIN: ; 全局初始化 MOV SP, #60H ; 堆棧 MOV IE, #00H ; 禁止所有中斷 ; 寄存器組 00 CLR RS1 CLR RS0 ; 工作區IRAM(20H-5FH)默認全為0 INIT20TO5F: MOV R0, #20H ; START AT 20H MOV R7, #40H ; 64 BYTES TO ZERO LOOP20TO5F: MOV @R0, #00H INC R0 DJNZ R7, LOOP20TO5F ; --------------------------------- SETB STAT.0 ; 初始狀態為等號狀態 MOV R7, #00H MOV SCON, #00H ; 串行工作方式0 ; ------------------------------------- ;; DISPLAY INIT ; ------------------------------------- LCALL LCDINIT MOV COM,#06H LCALL PR1 MOV COM,#0C0H LCALL PR1 MAIN_LOOP: ***\*3.2 4×4矩陣式鍵盤\*******\*匯編源程序\**** KEYBUF EQU 30H ORG 00H START: MOV KEYBUF,#2 WAIT: MOV P3,#0FFH CLR P3.4 MOV A, P3 ANL A,#0FH XRL A,#0FH JZ NOKEY1 LCALL DELY10MS MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY1 MOV A,P3 ANL A,#0FH CJNE A,#0EH,NK1 MOV KEYBUF,#0 LJMP DK1 NK1: CJNE A,#0DH,NK2 MOV KEYBUF,#1 LJMP DK1 NK2: CJNE A,#0BH,NK3 MOV KEYBUF,#2 LJMP DK1 NK3: CJNE A,#07H,NK4 MOV KEYBUF,#3 LJMP DK1 NK4: NOP DK1: MOV A,KEYBUF MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A DK1A: MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK1A NOKEY1: MOV P3,#0FFH CLR P3.5 MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY2 LCALL DELY10MS MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY2 MOV A,P3 ANL A,#0FH CJNE A,#0EH,NK5 MOV KEYBUF,#4 LJMP DK2 NK5: CJNE A,#0DH,NK6 MOV KEYBUF,#5 LJMP DK2 NK6: CJNE A,#0BH,NK7 MOV KEYBUF,#6 LJMP DK2 NK7: CJNE A,#07H,NK8 MOV KEYBUF,#7 LJMP DK2 NK8: NOP DK2: MOV A,KEYBUF MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A DK2A: MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK2A NOKEY2: MOV P3,#0FFH CLR P3.6 MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY3 LCALL DELY10MS MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY3 MOV A,P3 ANL A,#0FH CJNE A,#0EH,NK9 MOV KEYBUF,#8 LJMP DK3 NK9: CJNE A,#0DH,NK10 MOV KEYBUF,#9 LJMP DK3 NK10: CJNE A,#0BH,NK11 MOV KEYBUF,#10 LJMP DK3 NK11: CJNE A,#07H,NK12 MOV KEYBUF,#11 LJMP DK3 NK12: NOP DK3: MOV A,KEYBUF MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A DK3A: MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK3A NOKEY3: MOV P3,#0FFH CLR P3.7 MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY4 LCALL DELY10MS MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY4 MOV A,P3 ANL A,#0FH CJNE A,#0EH,NK13 MOV KEYBUF,#12 LJMP DK4 NK13: CJNE A,#0DH,NK14 MOV KEYBUF,#13 LJMP DK4 NK14: CJNE A,#0BH,NK15 MOV KEYBUF,#14 LJMP DK4 NK15: CJNE A,#07H,NK16 MOV KEYBUF,#15 LJMP DK4 NK16: NOP DK4: MOV A,KEYBUF MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A DK4A: MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK4A NOKEY4: LJMP WAIT DELY10MS: MOV R6,#10 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H END ***\*3.3 點陣式LED“0-9”數字顯示\*******\*匯編源程序\**** TIM EQU 30H CNTA EQU 31H CNTB EQU 32H ORG 00H LJMP START ORG 0BH LJMP T0X ORG 30H START: MOV TIM,#00H MOV CNTA,#00H MOV CNTB,#00H MOV TMOD,#01H MOV TH0,#(65536-4000)/256 MOV TL0,#(65536-4000) MOD 256 SETB TR0 SETB ET0 SETB EA SJMP $ T0X: MOV TH0,#(65536-4000)/256 MOV TL0,#(65536-4000) MOD 256 MOV DPTR,#TAB MOV A,CNTA MOVC A,@A+DPTR MOV P3,A MOV DPTR,#DIGIT MOV A,CNTB MOV B,#8 MUL AB ADD A,CNTA MOVC A,@A+DPTR MOV P1,A INC CNTA MOV A,CNTA CJNE A,#8,NEXT MOV CNTA,#00H NEXT: INC TIM MOV A,TIM CJNE A,#250,NEX MOV TIM,#00H INC CNTB MOV A,CNTB CJNE A,#10,NEX MOV CNTB,#00H NEX: RETI TAB: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH DIGIT: DB 00H,00H,3EH,41H,41H,41H,3EH,00H DB 00H,00H,00H,00H,21H,7FH,01H,00H DB 00H,00H,27H,45H,45H,45H,39H,00H DB 00H,00H,22H,49H,49H,49H,36H,00H DB 00H,00H,0CH,14H,24H,7FH,04H,00H DB 00H,00H,72H,51H,51H,51H,4EH,00H DB 00H,00H,3EH,49H,49H,49H,26H,00H DB 00H,00H,40H,40H,40H,4FH,70H,00H DB 00H,00H,36H,49H,49H,49H,36H,00H DB 00H,00H,32H,49H,49H,49H,3EH,00H END

      5. 結論

      由于所采用的浮點程序庫的限制(MCU平臺只找到這個……),浮點運算采用3字節二進制補碼表示,有效數字6位。對于輸入輸出,采用3字節BCD碼浮點數格式,有效數字只有4位,因此最終有效數字只有4位。可進行連續輸入,例如:1.23+4.56*8.23/234.8 ,但是運算結果為從左到右,這也是8位簡易計算器的方式。可進行錯誤判斷,溢出、除零等錯誤將顯示一個字符 E 。由于鍵盤只有16個按鍵,安排如下:

      ±--------------+

      | 7 | 8 | 9 | + |

      | 4 | 5 | 6 | - |

      | 1 | 2 | 3 | * |

      | 0 | . | = | / |

      ±--------------+

      按鍵的缺少導致取消了一些特殊函數,即開根號,三角函數(sin, cos, tan, ctg)的實現,由于這些函數在浮點程序庫中均已提供,如果硬件允許,在原來的框架上添加這些附加功能是很容易的(可以看作和+, -, *, /等價的按鍵操作,調用不同的子程序進行運算即可)按兩次 = 等于清靈。因為按鍵實在太少,才采用了這個做法。

      不足

      使用3字節的浮點數表示,不可避免的帶來了數表示的不精確,加上有效數字比較少,因此計算結果很容易產生誤差,尤其是進行連續多次運算后,結果和精度較高的科學計算器的誤差會很快達到0.01以上,當然這個差距和所測試的用例也有關系,4位有效數字導致了數字123456只能表示為123400,最后兩位有效數字被摒棄了。

      同時,雖然純整數可以進行較為高精度的運算,實現也較為容易,但是考慮到要和浮點數混合在一起處理,如果在算法上分別考慮整數和浮點數,整個程序框架代碼將會膨脹不少,因此將其簡化為統一作為浮點數對待。

      IoT 單片機

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:2017Google開發者大會
      下一篇:解放企業云盤,數據更安全,權限更精細,存儲更集中
      相關文章
      久久精品国产亚洲AV麻豆网站| 久久精品国产亚洲综合色| 国产亚洲成av人片在线观看| 99亚洲精品卡2卡三卡4卡2卡| 亚洲mv国产精品mv日本mv| 亚洲第一永久在线观看| 香蕉蕉亚亚洲aav综合| 亚洲精品亚洲人成在线观看| 亚洲热线99精品视频| 亚洲精品国产V片在线观看| 亚洲福利在线播放| 亚洲无码视频在线| 久久久久亚洲AV成人网人人网站| 亚洲精品在线视频| 亚洲国产黄在线观看| 亚洲精品网站在线观看不卡无广告| 国产精品亚洲精品日韩电影| 国产精品亚洲一区二区无码| 亚洲av中文无码| 亚洲精品人成无码中文毛片| 久久久久亚洲AV无码专区网站| 亚洲成?Ⅴ人在线观看无码| 亚洲va中文字幕| 亚洲人成人无码.www石榴| 亚洲精品久久久久无码AV片软件| 久久亚洲中文无码咪咪爱| 国产精品亚洲va在线观看| 亚洲国产精品激情在线观看| 国产综合精品久久亚洲| 国产亚洲AV无码AV男人的天堂| 亚洲AV无码专区国产乱码4SE| 亚洲人成网7777777国产| 亚洲Av无码精品色午夜| 亚洲专区在线视频| 亚洲免费中文字幕| 亚洲欧洲专线一区| 亚洲国产综合久久天堂| 精品亚洲永久免费精品| 久久亚洲AV成人无码国产| 激情综合亚洲色婷婷五月| 亚洲AV无码成人网站在线观看|