久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9538|回復: 1
收起左側

51單片機的完整計算器匯編語言程序

[復制鏈接]
ID:206309 發表于 2017-5-31 12:09 | 顯示全部樓層 |閱讀模式
51單片機的完整計算器程序

單片機源程序如下:

  1. ;$$$$變量定義區(30H-)$$$$$

  2. OUTBIT EQU P2 ; 位控制口

  3. OUTSEG EQU P0 ; 段控制口

  4. ROW_COLUMN EQU P1 ; 讀鍵盤行線口

  5. VARIABLE_DELAY1 EQU 30H        ;延時變量

  6. VARIABLE_DELAY2 EQU 31H

  7. VARIABLE_STORE1        EQU 32H        ;存儲第一個輸入數

  8. VARIABLE_STORE2 EQU 33H

  9. VARIABLE_STORE3 EQU 34H        ;存儲第二個輸入數

  10. VARIABLE_STORE4 EQU 35H

  11. VARIABLE_STORE5 EQU 36H        ;存儲最后結果

  12. VARIABLE_STORE6 EQU 37H

  13. VARIABLE_INPUT1A EQU 38H        ;第一個輸入數保存地址

  14. VARIABLE_INPUT1B EQU 39H

  15. VARIABLE_INPUT1C EQU 3AH

  16. VARIABLE_INPUT1D EQU 3BH

  17. VARIABLE_INPUT2A EQU 3CH        ;第二個輸入數保存地址

  18. VARIABLE_INPUT2B EQU 3DH

  19. VARIABLE_INPUT2C EQU 3EH

  20. VARIABLE_INPUT2D EQU 3FH

  21. VARIABLE_REPLACE_POINT EQU 40H        ;結果顯示位置指針

  22. ;VARIABLE_RESULTB EQU 41H

  23. ;VARIABLE_RESULTC EQU 42H

  24. ;VARIABLE_RESULTD EQU 43H

  25. VARIABLE_SIGN1 EQU 44H        ;保存第一個符號位

  26. VARIABLE_SIGN2 EQU 45H        ;保存第二個符號位

  27. VARIABLE_INPUT1_POINT EQU 46H ;第一個輸入數狀態指針,記錄輸入的位數

  28. VARIABLE_INPUT2_POINT EQU 47H ;第二個輸入數狀態指針,記錄輸入的位數

  29. VARIABLE_RESULT_POINT EQU 48H ;第二個輸入數狀態指針,記錄輸入的位數

  30. VARIABLE_PLACE1_POINT EQU 49H        ;第一個輸入數位置指針

  31. VARIABLE_PLACE2_POINT EQU 4AH        ;第一個輸入數位置指針

  32. VARIABLE_LEDBUF_POINT EQU 4BH        ;第一個輸入數位置指針

  33. VARIABLE_LEDBUF EQU 4CH ; 顯示緩沖

  34. S1 EQU 50H        ;自定義數字電路入口與出口

  35. S2 EQU 51H        ;功能1實現:將分離個位數字(S1-S5),轉化為十進制,存儲在S6,S7

  36. S3 EQU 52H        ;功能2實現:將十進制位數字(S6-S7),轉化為個位數字,存儲在(S1-S5)

  37. S4 EQU 53H        ;S1(最高位),S5(最低位)

  38. S5 EQU 54H

  39. S6 EQU 55H

  40. S7 EQU 56H

  41. KEY1 BIT P3.2

  42. KEY2 BIT P3.3

  43. KEY3 BIT P3.4

  44. KEY4 BIT P3.5

  45. ;****************************************************進入主程序*****************************************************************************

  46. ORG 0000H

  47. AJMP STABLE

  48. ORG 0100H

  49. ; *****************************************************鍵碼定義和鍵值定義*******************************************************************

  50. LEDMAP: ; 八段管顯示碼(共陽極)

  51. DB 0C0h, 0F9h, 0A4h, 0B0h, 099h, 092h, 082h, 0F8h,080h, 090h, 088h, 083h,0C6H

  52. KEYTABLE:

  53. DB 00h, 04h, 08h

  54. DB 01h, 05h, 09h

  55. DB 02h, 06h, 0Ah

  56. DB 03h, 07h, 0Bh

  57. ;$$$$子程序區$$$

  58. $$$

  59. ;****************************************************延時程序(30H,31H)**********************************************************************

  60. DELAY:

  61. MOV VARIABLE_DELAY1,#10H

  62. DE1:

  63. MOV VARIABLE_DELAY2,#06FH

  64. DE:

  65. DJNZ VARIABLE_DELAY2,DE

  66. DJNZ VARIABLE_DELAY1 ,DE1

  67. RET

  68. ;***************************************************掃描按鍵程序*****************************************************************************

  69. SCANNING:

  70. JNB KEY1,FUNCTION1_SIGN1

  71. JNB KEY2,FUNCTION2_SIGN1

  72. JNB KEY3,FUNCTION3_SIGN1

  73. JNB KEY4,FUNCTION4_SIGN1

  74. RET

  75. ;****************************************************第一個符號位保存程序*****************************************************************

  76. FUNCTION1_SIGN1:

  77. MOV VARIABLE_SIGN1,#1

  78. SJMP SCANNING

  79. FUNCTION2_SIGN1:

  80. MOV VARIABLE_SIGN1,#2

  81. SJMP SCANNING

  82. FUNCTION3_SIGN1:

  83. MOV VARIABLE_SIGN1,#3

  84. SJMP SCANNING

  85. FUNCTION4_SIGN1:

  86. MOV VARIABLE_SIGN1,#4

  87. SJMP SCANNING

  88. ;****************************************************LED顯示程序****************************************************************************

  89. DISPLAYLED:

  90. MOV R0, #VARIABLE_LEDBUF

  91. MOV R1, #4 ; 共4個八段管

  92. MOV R2, #11111110B ; 從左邊開始顯示

  93. LOOP:

  94. MOV OUTBIT, #0FFH        ; 關所有八段管

  95. MOV OUTSEG, @R0

  96. MOV OUTBIT, R2 ; 顯示一位八段管

  97. ACALL DELAY        ;

  98. MOV A, R2 ; 位選選中下一位

  99. RL A        ;

  100. MOV R2, A        ;

  101. INC R0

  102. DJNZ R1, LOOP

  103. RET

  104. ;**************************************************行值局部程序*****************************************************************************

  105. GET_ROW1:

  106. MOV A,ROW_COLUMN ; 讀入鍵狀態

  107. ORL A, #0f8h ; 高5位不用,變為11111

  108. CPL A        ;11111110->00000001,11111101->00000010,11111011->00000100,        1,2,4

  109. RET

  110. ;*******************************得到行值程序,出口參數R3(行值)**********************************************************************************

  111. GET_ROW:

  112. MOV ROW_COLUMN,#07H        ;將行線置1.列線置0

  113. MOV R3,#0FFH

  114. ACALL GET_ROW1

  115. GE1:

  116. RRC A

  117. INC R3

  118. JC GE2

  119. SJMP GE1

  120. GE2:

  121. RET

  122. ;***************************得到列值程序,出口參數R4(列值),所用寄存器R1,R2********************************************        ***************

  123. GET_COLUMN:

  124. MOV ROW_COLUMN,#07H        ;將行線置1.列線置0

  125. MOV R2, #4

  126. KLoop:

  127. CJNE R2,#4,NEXT1

  128. MOV A,#01FH

  129. AJMP NEXT5

  130. NEXT1:

  131. CJNE R2,#3,NEXT2

  132. MOV A,#02FH

  133. AJMP NEXT5

  134. NEXT2:

  135. CJNE R2,#2,NEXT3

  136. MOV A,#04FH

  137. AJMP NEXT5

  138. NEXT3:

  139. CJNE R2,#1,NEXT5

  140. MOV A,#08FH

  141. NEXT5:

  142. MOV ROW_COLUMN, a

  143. ACALL GET_ROW1        ;調用得到行值時需要給出列值的狀態

  144. JZ GOON1 ;當

  145. A為零時,說明本列有鍵按下

  146. DJNZ R2, KLoop        ;掃描四次直至將全部列掃描完畢

  147. GOON1:

  148. MOV A, #4        ;列值減1

  149. SUBB A,R2

  150. MOV R4,A

  151. RET

  152. ;************鍵值計算程序,入口參數,R3(行值),R4(列值),出口參數R5(鍵值)******************************************************************

  153. CALCULATE_KEY: ;鍵值 = 列 X 3 + 行

  154. MOV A,R4

  155. MOV B,#3

  156. MUL AB

  157. ADD A,R3

  158. MOV DPTR,#KEYTABLE

  159. ACALL LOOK_UP_TABLE

  160. MOV R5,A

  161. RET

  162. ;**************************************************按鍵抖動去除程序**********************************************************************

  163. WAIT_RELEASE:

  164. ACALL TEST_KEY

  165. JNZ WAIT_RELEASE

  166. RET

  167. ;************************************************得到鍵值總程序,出口參數R5(鍵值)********************************************************************

  168. GET_KEY:

  169. ACALL GET_ROW

  170. ACALL GET_COLUMN

  171. ACALL CALCULATE_KEY

  172. ACALL WAIT_RELEASE

  173. RET

  174. ;*****************************************************測試按鍵是否按下程序,出口參數A***********************************************

  175. TEST_KEY:

  176. MOV ROW_COLUMN,#07H        ;將行線置1.列線置0

  177. ACALL GET_ROW1

  178. RET

  179. ;**********************************************計算器輸入第一個數程序****************************************************************

  180. CALCULATOR_INPUT1: ;USE:R0,R1,R2;出口參數R5

  181. MOV R1,VARIABLE_PLACE1_POINT ;將所得鍵碼送入相應存儲區

  182. MOV A,R5

  183. MOV @R1,A

  184. INC VARIABLE_PLACE1_POINT

  185. ACALL LOOK_UP_TABLE1        ;將所得段碼送入相應緩沖區

  186. MOV R0,VARIABLE_LEDBUF_POINT

  187. MOV @R0,A

  188. INC VARIABLE_LEDBUF_POINT

  189. RET

  190. ;**********************************************計算器輸入第二個數程序****************************************************************

  191. CALCULATOR_INPUT2: ;USE:R0,R1,R2;出口參數R5

  192. CLR C

  193. MOV A,R5

  194. CAL1:

  195. INC VARIABLE_INPUT2_POINT

  196. MOV R2,VARIABLE_INPUT2_POINT

  197. CJNE R2,#5,CAL4

  198. SJMP CAL5        ;輸入四個數后,第五個數一定為符號位

  199. CAL4:

  200. SUBB A,#8

  201. JC CAL2        ;符號位應大等于8

  202. SJMP CAL3

  203. CAL2:

  204. ADDC A,#8

  205. MOV R1,VARIABLE_PLACE2_POINT ;將所得鍵碼送入相應存儲區

  206. MOV @R1,A

  207. INC VARIABLE_PLACE2_POINT

  208. ACALL LOOK_UP_TABLE1        ;將所得段碼送入相應緩沖區

  209. MOV R0,VARIABLE_LEDBUF_POINT

  210. MOV @R0,A

  211. INC VARIABLE_LEDBUF_POINT

  212. SJMP CAL5

  213. CAL3:

  214. ADD A,#8

  215. CAL5:

  216. RET

  217. ;************************************************************整合程序1***********************************************************************

  218. INTEGRATE1:

  219. MOV R7, VARIABLE_INPUT1_POINT

  220. CJNE R7,#1,FF1

  221. MOV S5,VARIABLE_INPUT1A

  222. MOV S1,#0

  223. MOV S2,#0

  224. MOV S3,#0

  225. MOV S4,#0

  226. LCALL CALCULATOR_INTEGRATE

  227. AJMP NEXT22

  228. FF1:

  229. CJNE R

  230. 7,#2,FF2

  231. MOV S4,VARIABLE_INPUT1A

  232. MOV S5,VARIABLE_INPUT1B

  233. MOV S2,#0

  234. MOV S3,#0

  235. MOV S1,#0

  236. LCALL CALCULATOR_INTEGRATE

  237. AJMP NEXT22

  238. FF2:

  239. CJNE R7,#3,FF3

  240. MOV S3,VARIABLE_INPUT1A

  241. MOV S4,VARIABLE_INPUT1B

  242. MOV S5,VARIABLE_INPUT1C

  243. MOV S1,#0

  244. MOV S2,#0

  245. LCALL CALCULATOR_INTEGRATE

  246. AJMP NEXT22

  247. FF3:

  248. MOV S2,VARIABLE_INPUT1A

  249. MOV S3,VARIABLE_INPUT1B

  250. MOV S4,VARIABLE_INPUT1C

  251. MOV S5,VARIABLE_INPUT1D

  252. MOV S1,#0

  253. LCALL CALCULATOR_INTEGRATE

  254. NEXT22:

  255. MOV VARIABLE_STORE1,S6        ;將轉化后的值存在S8和S9中

  256. MOV VARIABLE_STORE2,S7

  257. LCALL QL

  258. MOV VARIABLE_LEDBUF+0, #0FFH ;        顯示管輸完符號位后顯示全滅

  259. MOV VARIABLE_LEDBUF+1, #0FFH

  260. MOV VARIABLE_LEDBUF+2, #0FFH

  261. MOV VARIABLE_LEDBUF+3, #0FFH

  262. MOV VARIABLE_LEDBUF_POINT,#VARIABLE_LEDBUF

  263. RET

  264. ;************************************************************整合程序2***********************************************************************

  265. INTEGRATE2:

  266. DEC VARIABLE_INPUT2_POINT

  267. MOV R7, VARIABLE_INPUT2_POINT

  268. CJNE R7,#1,FFI1

  269. MOV S5,VARIABLE_INPUT2A

  270. MOV S1,#0

  271. MOV S2,#0

  272. MOV S3,#0

  273. MOV S4,#0

  274. LCALL CALCULATOR_INTEGRATE

  275. AJMP NEXTI22

  276. FFI1:

  277. CJNE R7,#2,FFI2

  278. MOV S4,VARIABLE_INPUT2A

  279. MOV S5,VARIABLE_INPUT2B

  280. MOV S2,#0

  281. MOV S3,#0

  282. MOV S1,#0

  283. LCALL CALCULATOR_INTEGRATE

  284. AJMP NEXTI22

  285. FFI2:

  286. CJNE R7,#3,FFI3

  287. MOV S3,VARIABLE_INPUT2A

  288. MOV S4,VARIABLE_INPUT2B

  289. MOV S5,VARIABLE_INPUT2C

  290. MOV S1,#0

  291. MOV S2,#0

  292. LCALL CALCULATOR_INTEGRATE

  293. AJMP NEXTI22

  294. FFI3:

  295. MOV S2,VARIABLE_INPUT2A

  296. MOV S3,VARIABLE_INPUT2B

  297. MOV S4,VARIABLE_INPUT2C

  298. MOV S5,VARIABLE_INPUT2D

  299. MOV S1,#0

  300. LCALL CALCULATOR_INTEGRATE

  301. NEXTI22:

  302. MOV VARIABLE_STORE3,S6        ;將轉化后的值存在S8和S9中

  303. MOV VARIABLE_STORE4,S7

  304. LCALL QL

  305. MOV VARIABLE_LEDBUF+0, #0FFH ;        顯示管輸完符號位后顯示全滅

  306. MOV VARIABLE_LEDBUF+1, #0FFH

  307. MOV VARIABLE_LEDBUF+2, #0FFH

  308. MOV VARIABLE_LEDBUF+3, #0FFH

  309. MOV VARIABLE_LEDBUF_POINT,#VARIABLE_LEDBUF

  310. RET

  311. ;**********************************************計算器運算程序*****************************************************************************

  312. ;***********************************************計算器加法**********************************************************************************

  313. CALCULATOR_ADDITION:

  314. MOV R1,VARIABLE_STORE2        ;入口:R1(H),R0,R3(H),R2,出口:和R1(H),R0(L)

  315. MOV R0,VARIABLE_STORE1

  316. MOV R3,VARIABLE_STORE4

  317. MOV R2,VARIABLE_STORE3

  318. LCALL ADDITION

  319. MOV VARIABLE_STORE6,R1

  320. MOV VARIABLE_STORE5,R0

  321. MOV S7,VARIABLE_STORE6

  322. MOV S6,VARIABLE_STORE5

  323. LCALL CALCULATOR_SEPARATE

  324. RET

  325. ;*********************************************計算器減法***********************************************************************************

  326. CALCULATOR_SUBTRACTION:

  327. MOV R1,VARIABLE_STORE2

  328. MOV R0,VARIABLE_STORE1

  329. MOV R3,VARIABLE_STORE4

  330. MOV R2,VARIABLE_STORE3

  331. LCALL SUBTRACTION ;入口:減數R3(H),R2(L),被減數R1(H),R0(L),出口:差R1(H),R0(L)

  332. MOV VARIABLE_STORE6,R1

  333. MOV VARIABLE_STORE5,R0

  334. MOV S7,VARIABLE_STORE6

  335. MOV S6,VARIABLE_STORE5

  336. LCALL CALCULATOR_SEPARATE

  337. RET

  338. ;*********************************************計算器乘法***********************************************************************************

  339. CALCULATOR_MULTIPLICATION:

  340. MOV R1,VARIABLE_STORE2

  341. MOV R0,VARIABLE_STORE1

  342. MOV R3,VARIABLE_STORE4

  343. MOV R2,VARIABLE_STORE3

  344. LCALL MULTIPLICATION        ;入口:被乘數R3,R2,乘數R1,R0,結果R7,R6,R5,R4

  345. MOV VARIABLE_STORE6,R5

  346. MOV VARIABLE_STORE5,R4

  347. MOV S7,VARIABLE_STORE6

  348. MOV S6,VARIABLE_STORE5

  349. LCALL CALCULATOR_SEPARATE

  350. RET

  351. ;*********************************************計算器除法***********************************************************************************

  352. CALCULATOR_DIVISION:

  353. MOV R6,VARIABLE_STORE2        ;入口:R6(H),R7(L),被除數,R4(H),R5(L),除數,出口:商R6(H),R7(L),余R4(H),R5(L

  354. MOV R7,VARIABLE_STORE1

  355. MOV R4,VARIABLE_STORE4

  356. MOV R5,VARIABLE_STORE3

  357. LCALL DIVISION

  358. MOV VARIABLE_STORE6,R6

  359. MOV VARIABLE_STORE5,R7

  360. MOV S7,VARIABLE_STORE6

  361. MOV S6,VARIABLE_STORE5

  362. LCALL CALCULATOR_SEPARATE

  363. RET

  364. ;*********************************************設立最后計算器顯示的位數和位置***********************************************************************************

  365. CALCULATOR_RESULT_DESIGN:        ;設立最后顯示的位數

  366. MOV A,S1

  367. CJNE A,#0,H1

  368. MOV A,S2

  369. CJNE A,#0,H2

  370. MOV A,S3

  371. CJNE A,#0,H3

  372. MOV A,S4

  373. CJNE A,#0,H4

  374. MOV A,S5

  375. CJNE A,#0,H5

  376. RET

  377. H1:

  378. MOV VARIABLE_REPLACE_POINT,#S1        ;最后顯示位置指針

  379. MOV VARIABLE_RESULT_POINT,#5

  380. RET

  381. H2:

  382. MOV VARIABLE_REPLACE_POINT,#S2

  383. MOV VARIABLE_RESULT_POINT,#4

  384. RET

  385. H3:

  386. MOV VARIABLE_REPLACE_POINT,#S3

  387. MOV VARIABLE_RESULT_POINT,#3

  388. RET

  389. H4:

  390. MOV VARIABLE_REPLACE_POINT,#S4

  391. MOV VARIABLE_RESULT_POINT,#2

  392. RET

  393. H5:

  394. MOV VARIABLE_REPLACE_POINT,#S5

  395. MOV VARIABLE_RESULT_POINT,#1

  396. RET

  397. ;***********************************************************顯示結果送入緩沖區************************************************************

  398. RESULT_LEDBUF:

  399. MOV R7,#0

  400. NEXTR77:

  401. MOV A,R7

  402. CJNE A,VARIABLE_RESULT_POINT,NEXTR8        ;控制顯示位數

  403. RET

  404. NEXTR8:

  405. INC R7

  406. MOV R1,VARIABLE_REPLACE_POINT        ;將顯示位置的數字送給A寄存器

  407. MOV A,@R1

  408. LCALL LOOK_UP_TABLE1

  409. INC VARIABLE_REPLACE_POINT        ;顯示位置后移

  410. MOV R0,VARIABLE_LEDBUF_POINT        ;將要顯示段碼送給緩沖區

  411. MOV @R0,A

  412. INC VARIABLE_LEDBUF_POINT

  413. SJMP NEXTR77

  414. ;;**********************************************************數字電路整合功能***************************************************************

  415. CALCULATOR_INTEGRATE:        ;出口參數S6,S7,入口參數,S1,S2,S3,S4,S5

  416. ACALL QL

  417. MOV R0,S1

  418. MOV R1,#0

  419. MOV DPTR, #10000

  420. MOV R3, DPH

  421. MOV R2, DPL

  422. ACALL MULTIPLICATION

  423. MOV S7, R5

  424. MOV S6, R4

  425. ACALL QL

  426. MOV R0,S2

  427. MOV R1,#0

  428. MOV DPTR, #1000

  429. MOV R3, DPH

  430. MOV R2,DPL

  431. ACALL MULTIPLICATION

  432. MOV A,R5

  433. MOV R1,A

  434. MOV A,R4

  435. MOV R0,A

  436. MOV R3,S7

  437. MOV R2,S6

  438. ACALL ADDITION

  439. MOV S7, R1

  440. MOV S6 ,R0

  441. ACALL QL

  442. MOV R0,S3

  443. MOV R1,#0

  444. MOV DPTR, #100

  445. MOV R3, DPH

  446. MOV R2, DPL

  447. ACALL MULTIPLICATION

  448. MOV A,R5

  449. MOV R1,A

  450. MOV A,R4

  451. MOV R0,A

  452. MOV R3,S7

  453. MOV R2,S6

  454. ACALL ADDITION

  455. MOV S7, R1

  456. MOV S6 ,R0

  457. ACALL QL

  458. MOV R0,S4

  459. MOV R1,#0

  460. MOV DPTR, #10

  461. MOV R3, DPH

  462. MOV R2, DPL

  463. ACALL MULTIPLICATION

  464. MOV A,R5

  465. MOV R1,A

  466. MOV A,R4

  467. MOV R0,A

  468. MOV R3,S7

  469. MOV R2,S6

  470. ACALL ADDITION

  471. MOV S7, R1

  472. MOV S6 ,R0

  473. ACALL QL

  474. MOV R0,S5

  475. MOV R1,#0

  476. MOV DPTR, #1

  477. MOV R3, DPH

  478. MOV R2, DPL

  479. ACALL MULTIPLICATION

  480. MOV A,R5

  481. MOV R1,A

  482. MOV A,R4

  483. MOV R0,A

  484. MOV R3,S7

  485. MOV R2,S6

  486. ACALL ADDITION

  487. MOV S7, R1

  488. MOV S6 ,R0

  489. RET

  490. ;************************************************************數字電路分離功能**************************************************************

  491. CALCULATOR_SEPARATE:        ;入口參數S6,S7,出口參數,S1,S2,S3,S4,S5

  492. ACALL QL

  493. MOV R6,S7

  494. MOV R7,S6

  495. MOV DPTR, #10000

  496. MOV R4, DPH

  497. MOV R5, DPL

  498. ACALL DIVISION

  499. MOV S1,R7

  500. MOV S7,R4

  501. MOV S6,R5

  502. ACALL QL

  503. MOV R6,S7

  504. MOV R7,S6

  505. MOV DPTR, #1000

  506. MOV R4, DPH

  507. MOV R5, DPL

  508. ACALL DIVISION

  509. MOV S2,R7

  510. MOV S7,R4

  511. MOV S6,R5

  512. ACALL QL

  513. MOV R6,S7

  514. MOV R7,S6

  515. MOV DPTR, #100

  516. MOV R4, DPH

  517. MOV R5, DPL

  518. ACALL DIVISION

  519. MOV S3,R7

  520. MOV S7,R4

  521. MOV S6,R5

  522. ACALL QL

  523. MOV R6,S7

  524. MOV R7,S6

  525. MOV DPTR, #10

  526. MOV R4, DPH

  527. MOV R5, DPL

  528. ACALL DIVISION

  529. MOV S4,R7

  530. MOV S7,R4

  531. MOV S6,R5

  532. ACALL QL

  533. MOV R6,S7

  534. MOV R7,S6

  535. MOV DPTR, #1

  536. MOV R4, DPH

  537. MOV R5, DPL

  538. ACALL DIVISION

  539. MOV S5,R7

  540. RET

  541. ;****************************************************0—-65535之內加減乘除*******************************************************************

  542. ;**********************************************************加法******************************************************************************

  543. ADDITION:        ;入口:R1(H),R0,R3(H),R2,出口:和R1(H),R0(L)

  544. MOV A,R0

  545. ADD A,R2

  546. MOV R0,A

  547. MOV A,R1

  548. ADDC A,R3

  549. MOV R1,A

  550. RET

  551. ;**********************************************************減法******************************************************************************

  552. SUBTRACTION: ;入口:減數R3(H),R2(L),被減數R1(H),R0(L),出口:差R1(H),R0(L)

  553. CLR C

  554. MOV A,R0

  555. SUBB A,R2

  556. MOV R0,A

  557. MOV A,R1

  558. SUBB A,R3

  559. MOV R1,A

  560. RET

  561. ;**********************************************************乘法******************************************************************************

  562. MULTIPLICATION:        ;入口:被乘數R3,R2,乘數R1,R0,結果R7,R6,R5,R4

  563. CLR A

  564. MOV

  565. R7, A

  566. MOV R6, A

  567. MOV R5, A

  568. MOV R4, A

  569. MOV 46H, #10H

  570. MULLOOP1:

  571. CLR C

  572. MOV A, R4

  573. RLC A

  574. MOV R4, A

  575. MOV A, R5

  576. RLC A

  577. MOV R5, A

  578. MOV A, R6

  579. RLC A

  580. MOV R6, A

  581. MOV A, R7

  582. RLC A

  583. MOV R7, A

  584. MOV A, R0

  585. RLC A

  586. MOV R0, A

  587. MOV A, R1

  588. RLC A

  589. MOV R1,A

  590. JNC MULLOOP2

  591. CLR C

  592. MOV A, R4

  593. ADDC A, R2

  594. MOV R4, A

  595. MOV A, R5

  596. ADDC A, R3

  597. MOV R5, A

  598. MOV A, R6

  599. ADDC A, #00H

  600. MOV R6, A

  601. MOV A, R7

  602. ADDC A, #00H

  603. MOV R7, A

  604. MULLOOP2: DJNZ 46H,MULLOOP1

  605. RET

  606. ;**********************************************************除法******************************************************************************

  607. DIVISION:        ;入口:R6(H),R7(L),被除數,R4(H),R5(L),除數,出口:商R6(H),R7(L),余R4(H),R5(L)

  608. UDIV:

  609. CLR C

  610. CLR A

  611. MOV R2,A

  612. MOV R3,A

  613. MOV B,#10H

  614. MOVBIT: MOV A,R7;R6、R7中數據左移一位到R2、R3中,C到R7

  615. RLC A

  616. MOV R7,A

  617. MOV A,R6

  618. RLC A

  619. MOV R6,A

  620. MOV A,R3

  621. RLC A

  622. MOV R3,A

  623. MOV A,R2

  624. RLC A

  625. MOV R2,A

  626. CLR C ;R2R3-R4R5

  627. MOV A,R3

  628. SUBB A,R5

  629. PUSH Acc

  630. MOV A,R2

  631. SUBB A,R4

  632. JBC Cy,MOVBIT0;不夠減,清C繼續左移

  633. MOV R2,A;夠減,存回余數并置位C

  634. POP Acc

  635. MOV R3,A

  636. SETB C

  637. SJMP MOVBIT1

  638. MOVBIT0: POP Acc

  639. MOVBIT1: DJNZ B,MOVBIT

  640. MOV A,R7

  641. RLC A

  642. MOV R7,A

  643. MOV A,R6

  644. RLC A

  645. MOV R6,A

  646. MOV A,R2

  647. MOV R4,A

  648. MOV A,R3

  649. MOV R5,A

  650. RET

  651. ;**********************************************************寄存器清零******************************************************************************

  652. QL:

  653. MOV R0,#0

  654. MOV R1,#0

  655. MOV R2,#0

  656. MOV R3,#0

  657. MOV R4,#0

  658. MOV R5,#0

  659. MOV R6,#0

  660. MOV R7,#0

  661. RET

  662. ;###################################################查表源程序,入口參數A,DPTR#############################################################

  663. LOOK_UP_TABLE:

  664. MOVC A, @A+DPTR

  665. RET

  666. ;***************************************************查表程序1,入口參數A********************************************************************************

  667. LOOK_UP_TABLE1:

  668. MOV DPTR,#LEDMAP

  669. MOVC A, @A+DPTR

  670. RET

  671. ;###################################################初始化顯示緩沖區程序###################################################################

  672. INIT_LEDBUF:

  673. MOV VARIABLE_LEDBUF+0,#0FFH

  674. MOV VARIABLE_LEDBUF+1,#0FFH

  675. MOV VARIABLE_LEDBUF+2,#0FFH

  676. MOV VARIABLE_LEDBUF+3,#0FFH

  677. MOV ROW_COLUMN,#07H

  678. ;###################################################變量初始化程序##########################################################################

  679. INIT_VARIABLE:

  680. MOV VARIABLE_STORE1,#0

  681. MOV VARIABLE_STORE2,#0

  682. MOV VARIABLE_STORE3,#0

  683. MOV VARIABLE_STORE4,#0

  684. MOV VARIABLE_STORE5,#0

  685. MOV VARIABLE_STORE6,#0

  686. MOV VARIABLE_INPUT1A,#0

  687. MOV VARIABLE_INPUT1B,#0

  688. MOV VARIABLE_INPUT1C,#0

  689. MOV VARIABLE_INPUT1D,#0

  690. MOV VARIABLE_INPUT2A,#0

  691. MOV VARIABLE_INPUT2B,#0

  692. MOV VARIABLE_INPUT2C,#0

  693. MOV

  694. VARIABLE_INPUT2D,#0

  695. MOV VARIABLE_REPLACE_POINT,#0

  696. ;MOV VARIABLE_RESULTB,#0

  697. ;MOV VARIABLE_RESULTC,#0

  698. ;MOV VARIABLE_RESULTD,#0

  699. MOV VARIABLE_SIGN1,#0

  700. MOV VARIABLE_SIGN2,#0

  701. MOV VARIABLE_INPUT1_POINT,#0

  702. MOV VARIABLE_INPUT2_POINT,#0

  703. MOV VARIABLE_RESULT_POINT,#0

  704. MOV VARIABLE_PLACE1_POINT,#VARIABLE_INPUT1A

  705. MOV VARIABLE_PLACE2_POINT,#VARIABLE_INPUT2A

  706. MOV VARIABLE_LEDBUF_POINT,#VARIABLE_LEDBUF

  707. MOV S1,#0

  708. MOV S2,#0

  709. MOV S3,#0

  710. MOV S4,#0

  711. MOV S5,#0

  712. MOV S6,#0

  713. MOV S7,#0

  714. SETB KEY1

  715. SETB KEY2

  716. SETB KEY3

  717. SETB KEY4

  718. RET

  719. ;***************************************************初始化程序******************************************************************************

  720. INIT:

  721. ACALL INIT_VARIABLE

  722. ACALL INIT_LEDBUF

  723. RET

  724. ;$$$$主程序區$$$$$

  725. STABLE:
  726. ……………………

  727. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
51單片機的完整計算器程序.rar (4.21 KB, 下載次數: 69)
回復

使用道具 舉報

ID:517352 發表于 2021-6-7 20:12 | 顯示全部樓層
請問有沒有proteus仿真圖呢?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线色网 | 日韩精品一区二区三区视频播放 | 91免费电影| 欧美福利| 国产精品毛片av | 国产一区免费 | 午夜影院在线观看 | 国产日韩电影 | 亚洲性视频网站 | 欧美精品一区三区 | 国产精品一二三区 | 久久成人18免费网站 | 最近日韩中文字幕 | 亚洲一区中文 | 四虎影视免费在线 | 97碰碰碰| 黄色精品视频网站 | 男女国产网站 | 91综合网 | 成人综合久久 | 男人视频网站 | 在线中文字幕亚洲 | 夜久久 | 日本午夜精品 | 夜夜摸天天操 | 国产成人免费视频网站视频社区 | 国产99久久久国产精品 | av天天看 | 天天成人综合网 | 一级黄色片免费 | 九九久久国产 | 国产美女黄色片 | 拍拍无遮挡人做人爱视频免费观看 | 久久国产精品-久久精品 | 国产精品国产三级国产播12软件 | 成人一区二区三区 | 亚洲午夜一区二区 | 羞羞视频在线免费 | 欧美在线综合 | 欧美精品成人一区二区三区四区 | 日韩精品中文字幕在线 |