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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機匯編計算器的問題(最高3位數運算)

[復制鏈接]
跳轉到指定樓層
樓主
ID:335599 發表于 2018-5-28 11:09 來自手機 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
匯編計算器(最高3位數運算),想將4*4的矩陣鍵盤改為4*5的,原用p1.0-p1.3接行,p1.4-p1.7接列可以實現功能,改用p3.3到p3.4接鍵盤列,鍵盤掃描程序將讀p1改為讀p3卻不能實現,還需要改其他嗎?

  1. ORG     0000H;
  2. JMP     MAIN;
  3. ORG     0003H;
  4. JMP     INP0;
  5. ORG     0030H;
  6. /*鍵盤所輸入數字依次存入70H-77H*/
  7. MAIN:   MOV   R6, #70H;
  8.         MOV   SP, #60H;
  9.                 CLR   80H;
  10.                 CLR   81H;
  11.                 SETB  EA;
  12.         SETB  EX0;
  13.                 SETB  IT0;
  14. DISP1:     MOV   R0,    #70H;//從第一位地址存數
  15.            MOV   R2,    #01H;//位選第一位
  16. DISP2:     MOV   A,     @R0;
  17.            LCALL SEG7;                 //跳轉段碼
  18.                    MOV   P0,    A;         //P0輸出字形
  19.                    MOV   P2,    R2;         //位選輸出
  20.                    LCALL D1MS;                 //跳轉延時
  21.                    MOV   P2,    #0;         //位選關閉,段碼不輸出
  22.                    INC   R0;                 //選擇下一位;
  23.                    MOV   A,     R2;         
  24.                    CLR   C;                         //進位標志清零
  25.                    RLC   A;                         //掃描字右移
  26.                    MOV   R2,    A;         //保存掃描字
  27.                    JNC  DISP2;                 //C=0時, 循環一次未結束,跳轉到DISP2
  28. PASS:      LJMP  DISP1;
  29. D1MS:      MOV   R7,    #50H;//延時程序
  30. DMS:       DJNZ  R7,    DMS;

  31.                    RET;
  32. SEG7:      MOV   DPTR,  #TABLE;//查表程序
  33.            MOVC  A,     @A+DPTR;
  34.                    RET;
  35. TABLE:  DB    0C0H, 0F9H, 0A4H, 0B0H;
  36.         DB    99H,  92H,  82H,  0F8H;
  37.                 DB    80H,  90H,  88H,  83H;
  38.                 DB    0C6H, 0A1H, 86H,  8EH;
  39. /*P1.0-1.3,行線;    P1.4-1.7,列線;*/
  40. /*P0,輸出字形;      P2,輸出位選*/         
  41. INP0:         
  42.         PUSH  ACC;
  43.                 PUSH  B;
  44.                 PUSH  PSW;
  45. START:  MOV   R4, #00H;
  46. L1:     MOV   R3, #0F7H;//設掃描初值,11110111,P3.3=0
  47.         MOV   R1, #00H;        //取碼指針;





  48. /*首先行掃描*/
  49. L2:     MOV   A,  R3;        //行掃描開始
  50.         MOV   P1, A;        //掃描值輸出至p1
  51.                 MOV   A,  P1;        //讀入P1的值
  52.                 MOV   R4, A;        //P3口中P3.4-3.7的狀態通過A,傳送到R4
  53.                 SETB  C;                //進位標志置1
  54.                 MOV   R5, #04H; //                  
  55. l3:     RLC   A;                //按鍵左移,通過C是否為0,判斷此列是否有0;無0則r1進行累加;有0跳轉到延時,
  56.         JNC   KEY;                //C=0,跳轉到延時
  57.                 INC   R1;               
  58.                 DJNZ  R5, L3;
  59.                 MOV   A,  R3;      
  60.                 SETB  C;
  61.                 RRC   A;           //換行掃描
  62.                 MOV   R3,A;         
  63.                 JC    L2;           //C=1,跳轉到L2
  64. KEY:    ACALL DELAY;
  65. D1:     MOV   A,P1;
  66.         XRL   A,R4;
  67.                 JNZ    D1;
  68.                 MOV   A,   R6; //指定存入地址
  69.                 MOV   R0,  A;  
  70.                 MOV   A,   R1; //存入數字
  71.                 MOV   @R0, A;




  72. /*判斷運算法*/
  73.         MOV   A,     R1;
  74.                 XRL   A,     #0AH;//判斷是否為加法符
  75.                 JZ    ADD1;
  76.                 MOV   A,     R1;
  77.                 XRL   A,   #0BH;//判斷是否為減法符
  78.             JZ    SUBB1;
  79.                 MOV   A,     R1;
  80.                 XRL   A,   #0CH;//判斷是否為乘法符
  81.             JZ    MUL1;
  82.                 MOV   A,     R1;
  83.                 XRL   A,   #0DH;//判斷是否為除法符
  84.             JZ    DIV1;
  85.                 MOV   A,     R1;
  86.                 XRL   A,   #0EH;//判斷是否為等于號
  87.             JZ    EQUAL1;
  88.                 MOV   A,     R1;
  89.                 XRL   A,   #0FH;//判斷是否為清零鍵
  90.             JZ    ON1;



  91.    
  92.                 INC   R0;           //選擇下一個地址
  93.                 MOV   A,   R0; //存入r0的新數值
  94.                 MOV   R6,  A;
  95.                 POP   PSW;
  96.                 POP          B;
  97.                 pop   ACC;
  98.                 RET;
  99. DELAY:  MOV   R7,   #60;//消除抖動延時程序
  100. DLY1:   DJNZ  R7,   DLY1;
  101.                 RET;



  102. ADD1:   MOV   A,    80H; //加法程序
  103.         MOV   81H,  A;
  104.         LJMP  D1;
  105.                 MOV   A,    81H;
  106.                 ADD   A,        80H;
  107.                 MOV   80H,  A;   
  108.         RET;



  109. SUBB1:  MOV   A,    80H;//減法程序
  110.         MOV   81H,  A;
  111.         LJMP  DD1;
  112.                 MOV   A,    80H;
  113.                 SUBB  A,    81H;
  114.                 MOV   80H,  A;
  115.         RET;



  116. MUL1:   MOV   A,    80H;//乘法程序
  117.                 MOV   81H,  A;
  118.         LJMP  DD1;
  119.                 MOV   A,    80H;
  120.                 MUL   AB;
  121.                 MOV          80H,  A;   
  122.         RET;




  123. DIV1:   MOV   A,    80H;//除法程序
  124.                 MOV   81H,  A;
  125.         LJMP  DD1;
  126.                 MOV   A,    80H;
  127.                 DIV   AB;
  128.                 MOV   80H,  A;  
  129.         RET;



  130. EQUAL1: MOV   A,    80H;//等于程序
  131.                 MOV   B,    #64H;//算百位數
  132.                 DIV   AB;
  133.                 MOV   72H,  A;         //將此數除100,商數放72h,余數放71h。
  134.                 MOV   71H,  B;
  135.                 MOV   A,    71H;
  136.                 MOV   B,    0AH;//算十位數
  137.                 DIV   AB;
  138.                 MOV   71H,  A;         //將此數除10,商數放71h,余數放70h。
  139.                 MOV   70H,  B;
  140.                 RET;


  141. ON1:    CLR    70H;                 //清零程序
  142.         CLR    71H;
  143.                 CLR    72H;
  144.                 CLR    73H;
  145.                 CLR    78H;
  146.                 CLR    79H;
  147.                 CLR    7AH;
  148.                 CLR    80H;
  149.                 CLR    81H;
  150.                 CLR    82H;
  151.                 CLR    88H;
  152.                 CLR    89H;
  153.                 CLR    8AH;
  154.                 MOV    R0, 00H;
  155.                 MOV    R1, 00H;
  156.                 MOV    R2, 00H;
  157.                 MOV    R3, 00H;
  158.                 MOV    R4, 00H;
  159.                 MOV    R5, 00H;
  160.                 MOV    R6, 70H;
  161.                 MOV    R7, 00H;
  162.                 RET;  


  163. DD1:    MOV   B,            #0AH;//將所輸入兩位數轉換為十進制,并存入80h中
  164.         MOV   A,     78H;
  165.         MUL   AB;
  166.                 ADD   A,     70H;
  167.                 MOV   80H,   A;
  168.                 RET;
  169. END;
復制代碼


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 伊人久久综合 | 国产成人福利 | 午夜婷婷激情 | 美女爽到呻吟久久久久 | 久久久青草婷婷精品综合日韩 | 草比av| 日韩欧美中文在线 | 精品视频在线免费观看 | 91九色在线观看 | 国产精品久久久久无码av | 福利视频一区二区三区 | 久久久久国产一区二区三区 | 欧美久久久久 | 日韩有码一区二区三区 | 一级黄色录像片子 | 欧美伊人久久久久久久久影院 | 亚洲男人天堂 | 国产91久久久久久久免费 | 91精品国产综合久久婷婷香蕉 | 久久免费小视频 | 日韩一区二区三区视频 | 日韩在线国产精品 | 久久成人国产精品 | 亚洲精品18 | 国产精久久久 | 欧美午夜影院 | 在线播放国产一区二区三区 | 天天干天天干 | 99久久久无码国产精品 | 欧美日韩精品一区二区三区蜜桃 | 色爱综合| 国产在线看片 | 免费一区 | 精品视频在线免费观看 | 成人一区二区三区在线观看 | 国产成人精品a视频一区www | 国产精品一区二区久久久久 | 日韩欧美在线播放 | 99久久精品国产一区二区三区 | 精品一区二区三区中文字幕 | 免费在线观看av |