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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1779|回復: 1
打印 上一主題 下一主題
收起左側

基于C51的簡易計算器

[復制鏈接]
跳轉到指定樓層
樓主
ID:404579 發表于 2018-10-1 09:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. YJ        EQU     50H                 ;結果存放
  2. YJ1       EQU     51H                 ;中間結果存放
  3. GONG      EQU     52H                  ;功能鍵存放
  4.            ORG    00H
  5. START:    MOV     R3,#0                ;初始化顯示為空
  6.            MOV    GONG,#0      
  7.            MOV    32H,#00H
  8.            MOV    33H,#00H
  9.            MOV    34H,#00H
  10. MLOOP:    CALL    DISP                 ;調顯示子程序
  11. WAIT:     CALL    TESTKEY              ;判斷有無按鍵
  12.            JZ      WAIT                  
  13.            CALL    GETKEY              ;讀鍵
  14.            INC     R3                  ;按鍵個數
  15.            CJNE    A,#0,NEXT1       ;判斷是否數字鍵
  16.            LJMP    E1                  ;轉數字鍵處理
  17. NEXT1:    CJNE    A,#1,NEXT2
  18.            LJMP    E1
  19. NEXT2:    CJNE    A,#2,NEXT3
  20.            LJMP    E1
  21. NEXT3:    CJNE    A,#3,NEXT4
  22.            LJMP    E1
  23. NEXT4:    CJNE    A,#4,NEXT5
  24.            LJMP    E1
  25. NEXT5:    CJNE    A,#5,NEXT6
  26.            LJMP    E1
  27. NEXT6:    CJNE    A,#6,NEXT7
  28.            LJMP    E1
  29. NEXT7:    CJNE    A,#7,NEXT8
  30.            LJMP    E1
  31. NEXT8:    CJNE    A,#8,NEXT9
  32.            LJMP    E1
  33. NEXT9:    CJNE    A,#9,NEXT10
  34.            LJMP    E1
  35. NEXT10:   CJNE    A,#10,NEXT11        ;判斷是否功能鍵
  36.            LJMP    E2                  ;轉功能鍵處理
  37. NEXT11:   CJNE    A,#11,NEXT12
  38.            LJMP    E2
  39. NEXT12:   CJNE    A,#12, NEXT13
  40.            LJMP       E2
  41. NEXT13:   CJNE    A,#13,NEXT14
  42.            LJMP       E2
  43. NEXT14:   CJNE    A,#14,NEXT15
  44.            LJMP       E2
  45. NEXT15:   LJMP    E3                   ;判斷是否清除鍵
  46. E1:        CJNE       R3,#1,N1             ;判斷第幾次按鍵
  47.            LJMP    E11                 ;為第一個數字
  48. N1:        CJNE       R3,#2,N2
  49.            LJMP    E12                 ;為第二個數字
  50. N2:        CJNE    R3,#3,N3
  51.            LJMP    E13                 ;為第三個數字
  52. N3:        LJMP    E3                  ;第四個數字轉溢出
  53. E11:      MOV     R4,A                 ;輸入值暫存R4
  54.            MOV    34H,A                ;輸入值送顯示緩存
  55.            MOV    33H,#00H
  56.            MOV    32H,#00H
  57.            LJMP   MLOOP                ;等待再次輸入
  58. E12:      MOV     R7,A                 ;個位數暫存R7
  59.            MOV    B,#10
  60.            MOV    A,R4
  61.            MUL    AB                ;十位數
  62.            ADD    A,R7
  63.            MOV    R4,A              ;輸入值存R4
  64.            MOV    32H,#00H             ;輸入值送顯示緩存
  65.            MOV    33H,34H
  66.            MOV    34H,R7
  67.            LJMP       MLOOP
  68. E13:      MOV     R7,A
  69.            MOV    B,#10
  70.            MOV    A,R4
  71.            MUL    AB
  72.            JB         OV,E3                ;輸入溢出
  73.            ADD    A,R7
  74.            JB         CY,E3             ;輸入溢出
  75.            MOV    R4,A
  76.            MOV    32H,33H              ;輸入值送顯示緩存
  77.            MOV    33H,34H
  78.            MOV    34H,R7
  79.            LJMP       MLOOP
  80. E3:        MOV    R3,#0            ;按鍵次數清零
  81.            MOV    R4,#0             ;輸入值清零
  82.            MOV    YJ,#0             ;計算結果清零
  83.            MOV    GONG,#0           ;功能鍵設為零      
  84.            MOV    32H,#00H          ;顯示清空
  85.            MOV    33H,#00H
  86.            MOV    34H,#00H
  87.            LJMP       MLOOP
  88. E2:        MOV    34H,#00H
  89.            MOV    33H,#00H
  90.            MOV    32H,#00H
  91.            MOV    R0,GONG              ;與上次功能鍵交換
  92.            MOV    GONG,A
  93.            MOV    A,R0
  94.            CJNE       A,#10,N21            ;判斷功能鍵
  95.            LJMP       JIA                  ;"+"
  96. N21:      CJNE    A,#11,N22
  97.            LJMP       JIAN              ;"-"
  98. N22:    CJNE     A,#12,N23
  99.            LJMP   CHENG                 ;"*"
  100. N23:      CJNE    A,#13,N24
  101.            LJMP       CHU               ;"/"
  102. N24:      CJNE    A,#0,N25
  103.            LJMP       FIRST             ;首次按功能鍵
  104. N25:      LJMP    DEN                 ;"="
  105. N4:        LJMP       E3
  106. FIRST:    MOV     YJ,R4            ;輸入值送結果
  107.            MOV    R3,#0             ;按鍵次數清零
  108.            LJMP       DISP1             ;結果處理
  109. JIA:      MOV     A,YJ              ;上次結果送累加器
  110.            ADD        A,R4              ;上次結果加輸入值
  111.            JB         CY,N4             ;溢出
  112.            MOV    YJ,A              ;存本次結果
  113.            MOV    R3,#0             ;按鍵次數清零
  114.            LJMP       DISP1
  115. JIAN:     MOV     A,YJ
  116.            SUBB       A,R4              ;上次結果減輸入值
  117.            JB         CY,N4             ;負數溢出
  118.            MOV    YJ,A
  119.            MOV    R3,#0
  120.            LJMP       DISP1
  121. CHENG:    MOV     A,YJ
  122.            MOV    B,A
  123.            MOV    A,R4
  124.            MUL    AB                ;上次結果乘輸入值
  125.            JB         OV,N4             ;溢出
  126.            MOV    YJ,A                 
  127.            LJMP       DISP1
  128. CHU:      MOV     A,R4
  129.            MOV    B,A
  130.            MOV    A,YJ
  131.            DIV        AB                ;上次結果除輸入值
  132.            MOV    YJ,A
  133.            MOV    R3,#0
  134.            LJMP       DISP1
  135. DEN:      MOV     R3,#0
  136.            LJMP       DISP1
  137. DISP1:    MOV     B,#10
  138.            MOV    A,YJ              ;結果送累加器
  139.            DIV    AB                ;結果除10
  140.            MOV    YJ1,A             ;暫存"商"
  141.            MOV    A,B               ;取個位數
  142.            MOV    34H,A             ;個位數送顯示緩存
  143.            MOV    A,YJ1
  144.            JZ     DISP11            ;結果是否為一位數
  145.            MOV    B,#10
  146.            MOV    A,YJ1
  147.            DIV    AB
  148.            MOV    YJ1,A
  149.            MOV    A,B
  150.            MOV    33H,A             ;十位送顯示緩存
  151.            MOV    A,YJ1
  152.            JZ     DISP11            ;結果是否為二位數
  153.            MOV    32H,A             ;百位數送顯示緩存
  154. DISP11:   LJMP    MLOOP
  155. DISP: MOV R0,#34H
  156. DIR1: MOV DPTR,#SEGTAB
  157.       MOV A,@R0
  158.       MOVC A,@A+DPTR
  159.       MOV P0,A
  160.       CJNE R0,#34H,DIR2
  161.       CLR P2.3
  162.       CALL D1MS
  163.       SETB P2.3
  164.       DEC R0
  165.       SJMP DIR1
  166. DIR2: CJNE R0,#33H,DIR3
  167.       CLR P2.2
  168.       CALL D1MS
  169.       CLR P2.2
  170.       DEC R0
  171.       SJMPDIR1
  172. DIR3: CALL D1MS
  173.       RET
  174. D1MS:   MOV    R7,#02H
  175. DMS:    MOV    R6,#0F0H
  176.         DJNZ   R6,$
  177.            DJNZ    R7,DMS      
  178.            RET
  179. SEGTAB: DB  3FH,   06H,   5BH,   4FH
  180.         DB 66H,   6DH,   7DH,  07H
  181.         DB 7FH,   6FH,   77H,  7CH   
  182.         DB 39H,   5EH,   79H,   71H
  183. TESTKEY:  ACALL  DISP   
  184.            MOV    P1,#0FH              ;讀入鍵狀態
  185.            MOV    A,P1                 
  186.            CPL    A
  187.            ANL    A,#0FH            ;高四位不用
  188.            RET
  189. KEYTABLE:                       
  190.            DB     0EEH,0EDH,0DDH,0BDH  ;鍵碼定義
  191.            DB     0EBH,0DBH,0BBH,0E7H
  192.            DB     0D7H,0B7H,0DEH,0BEH
  193.            DB     07EH,07DH,07BH,077H
  194. GETKEY:   MOV     R6,#10            ;讀鍵子程序
  195.            ACALL  DELAY
  196.            MOV    P1,#0FH
  197.            MOV    A,P1
  198.            CJNE   A,#0FH,K12
  199.            LJMP   MLOOP
  200. K12:      MOV     B,A
  201.            MOV    P1,#0EFH
  202.            MOV    A,P1
  203.            CJNE   A,#0EFH,K13
  204.            MOV    P1,#0DFH
  205.            MOV    A,P1
  206.            CJNE   A,#0DFH,K13
  207.            MOV    P1,#0BFH
  208.            MOV    A,P1
  209.            CJNE   A,#0BFH,K13
  210.            MOV    P1,#07FH
  211.            MOV    A,P1
  212.            CJNE   A,#07FH,K13
  213.            LJMP   MLOOP
  214. K13:      ANL     A,#0F0H
  215.            ORL    A,B
  216.            MOV    B,A
  217.            MOV    R1,#16
  218.            MOV    R2,#0
  219.            MOV    DPTR,#KEYTABLE
  220. K14:      MOV     A,R2
  221.            MOVC   A,@A+DPTR
  222.            CJNE   A,B,K16
  223.            MOV    P1,#0FH
  224. K15:      MOV     A,P1
  225.            CJNE   A,#0FH,K15
  226.            MOV    R6,#10
  227.            ACALL  DELAY
  228.            MOV    A,R2
  229.            RET
  230. K16:      INC     R2
  231.            DJNZ   R1,K14
  232.            AJMP   MLOOP
  233. DELAY:    MOV     R7,#10            ;10ms延時子程序
  234. TS1:    MOV    R6,#0FFH           
  235. TS2:      NOP
  236.            NOP
  237.           DJNZ    R6,TS2
  238.            DJNZ   R7,TS1
  239.            RET
  240.        END
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2018-10-1 20:18 | 只看該作者
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜国产羞羞视频免费网站 | 毛片免费看 | 综合欧美亚洲 | 欧美成人一区二区三区片免费 | 久久婷婷av | 亚洲一区中文字幕 | 日韩三级在线 | 中文字幕一页二页 | 欧美一页| 91超碰在线观看 | 精品国产91久久久久久 | 亚洲视屏 | 四虎永久免费在线 | 国产免费自拍 | 欧美日韩高清在线一区 | 日韩在线成人 | 亚洲网址 | 日韩中文字幕在线观看视频 | 自拍视频精品 | 国产欧美综合在线 | 精品一级电影 | 国产精品美女久久久久久久网站 | 亚洲激情在线观看 | 99精品国产一区二区三区 | 一区二区在线视频 | 国产精品自拍av | 2一3sex性hd| 久久av一区二区 | 男人的天堂avav | 久久久久久久综合 | av电影一区 | 婷婷丁香在线视频 | 国产一区二区三区 | 欧美在线a| 亚洲高清视频在线观看 | 亚洲国产小视频 | 黄色一级网 | 日韩免费一区二区 | 国产一区二区三区视频在线观看 | 日本欧美国产在线观看 | 成人久久18免费网站麻豆 |