找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6531|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機按鍵連按長按匯編程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:70976 發(fā)表于 2014-12-27 18:16 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. ;===============================================================
  2. ;程序編寫人:蘭建文
  3. ;編寫地點:51hei培訓(xùn)機構(gòu)
  4. ;時間:6月7日下午  星期日
  5. ;功能:本程序?qū)崿F(xiàn)P0口的對2個數(shù)碼管顯示0到99,一個按鍵實現(xiàn)一次
  6. ;按鍵只遞加1次,到99回到0,按著不動不影響數(shù)碼管動態(tài)顯示;任何時
  7. ;刻,任何一個按鍵,若按鍵連續(xù)按鍵3次,每次間隔時間不大于1秒,循
  8. ;環(huán)顯示0到9回到0。若間隔時間大于1秒,顯示加1,低電平亮
  9. ;P2口實現(xiàn)對數(shù)碼管的片選功能
  10. ;===============================================================
  11. ;==========================系統(tǒng)程序=============================
  12. ;=========================開始初始化============================
  13.            SHUCHU   EQU   P0           ;定義P0口為輸出口
  14.      PIANXUAN EQU   P2           ;定義P2口為片選口
  15.         SHUZI    EQU   30H          ;設(shè)置處理數(shù)據(jù)存放地址
  16.      JIANBIT0 BIT   20H.0     ;設(shè)置按鍵標(biāo)志位         
  17.      XIAN0    BIT   20H.2     ;顯示標(biāo)志位
  18.      T_BIT    BIT   21H.0     ;設(shè)置中斷定時器0標(biāo)志位
  19.      LIANAN   BIT   20H.1     ;設(shè)置連按標(biāo)志位
  20.      BIT4     BIT   20H.2
  21.      MODE     EQU   01H
  22.      SHU      EQU   40H
  23. ;========================程序開始==============================
  24.                     ORG   00H          ;程序開始
  25.                     LJMP  START        ;跳到START
  26.      ORG   0BH     ;中斷定時器0入口地址
  27.      JMP   T0_1     ;跳到定時器0服務(wù)程序
  28.                     ORG   0030H        ;入口地址
  29. ;=========================主程序===============================        
  30.               START:MOV   SP,#60H  ;移開指針        
  31.         MOV   SHUZI,#00  ;數(shù)據(jù)初始化
  32.         MOV   DPTR,#TAB     ;查表初始化
  33.            MOV   P1,#0F8H      ;設(shè)置P1.0口為輸入
  34.      CALL  INIT   ;開中斷
  35.      CLR   JIANBIT0  ;按鍵標(biāo)志位清0
  36.      CLR   LIANAN  ;連按標(biāo)志位清0
  37.      CLR   BIT4
  38.      SETB  T_BIT   ;中斷標(biāo)志位置1
  39.      MOV   SHU,#0
  40.      MOV   R2,#0
  41.      MOV   R3,#0
  42.      MOV   R4,#0
  43.      MOV   R5,#200
  44.          MAIN:JNB   T_BIT,MAIN   ;等待中斷
  45.            CLR   T_BIT     ;中斷標(biāo)志位清0
  46.      JB    BIT4,VV
  47.      INC   R3
  48.      CJNE  R3,#25,XX
  49.      MOV   R3,#00
  50.      MOV   R2,#0
  51.         JMP   DD
  52.      XX:CJNE  R2,#3,VV
  53.      SETB  LIANAN
  54.      MOV   R2,#00
  55.      DD:CLR   BIT4
  56.         VV:JB    LIANAN,XUNHUAN ;判斷是否有連按
  57.   
  58.      CC:CALL  JISUAN      ;計算分離十位和個位
  59.            CALL  DISPLAY      ;顯示個位和十位
  60.       
  61.         JNB   JIANBIT0,PANDUAN;按鍵標(biāo)志位=1判斷P1.3口,若為0則判斷按鍵是否抬起
  62.            JNB   P1.3,XIANSHI0   ;若沒抬起(P1.3=0)則調(diào)到XIANSHI0   
  63.      SETB  BIT4
  64.      INC   R2
  65.      MOV   R3,#0      
  66.          CLR   JIANBIT0    ;按鍵標(biāo)志位清0
  67.      CLR   XIAN0     ;顯示標(biāo)志位清0
  68.         JMP   MAIN     ;返回MAIN   
  69.    
  70.       PANDUAN:
  71.            JB    P1.3,MAIN    ;若按鍵抬起則返回MAIN,若沒有抬起按鍵標(biāo)志位清0
  72.            SETB  JIANBIT0
  73.            JMP   MAIN
  74.    
  75.      XIANSHI0:
  76.               JB    XIAN0,MAIN
  77.               SETB  XIAN0   ;顯示標(biāo)志位清0
  78.      CALL  JIACHULI  ;加處理   
  79.      JMP   MAIN
  80.     XUNHUAN:
  81.              MOV    A,SHU
  82.        CJNE   A,#10,KKK
  83.        MOV   SHU,#0
  84.        CLR   LIANAN
  85.        MOV   A,SHU
  86.         KKK: MOVC   A,@A+DPTR    ;查表
  87.        MOV    SHUCHU,A
  88.              MOV    PIANXUAN,#05
  89.        INC    R4
  90.        CJNE   R4,#50,OUTT      
  91.        INC    SHU
  92.        MOV   R4,#0
  93.             OUTT:JMP    MAIN  
  94. ;====================定時中斷0服務(wù)子程序========================
  95. ;輸入:無
  96. ;輸出:無
  97. ;實現(xiàn)的功能:實現(xiàn)定時20MS,影響標(biāo)志位T_BIT
  98. ;===============================================================
  99.       T0_1:MOV    TMOD,#MODE  ;定時器1工作方式1
  100.            MOV    TL0,#0E0H     ;設(shè)置定時初值
  101.      MOV    TH0,#0B1H
  102.      SETB   T_BIT   ;定時標(biāo)志位清0
  103.      RETI
  104. ;========================中斷設(shè)置子程序=========================
  105. ;輸入:無
  106. ;輸出:無
  107. ;實現(xiàn)的功能:初始化設(shè)置定時器,設(shè)置初值
  108. ;===============================================================
  109.                INIT:MOV    TMOD,#MODE  ;定時器0工作方式1
  110.             MOV    TL0,#0E0H
  111.      MOV    TH0,#0B1H
  112.      MOV    IE,#82H   ;開定時器中斷0
  113.      SETB   TR0    ;開定時器0
  114.      RET
  115. ;========================計算子程序=============================
  116. ;輸入:30H
  117. ;輸出:"A和B"
  118. ;實現(xiàn)的功能:把30H的數(shù)據(jù)的十位和個位分離出來
  119. ;===============================================================
  120.              JISUAN:MOV   A,SHUZI      ;數(shù)據(jù)放在A中  
  121.         MOV   B,#10        ;除數(shù)放在B中
  122.         DIV   AB           ;商放在A中,余數(shù)放在B中
  123.         RET               
  124. ;========================顯示子程序=============================
  125. ;輸入:"A"
  126. ;輸出:"P0口"
  127. ;實現(xiàn)的功能:把A的數(shù)輸出到P0口顯示,十位和個位分開顯示
  128. ;===============================================================
  129.          DISPLAY:MOVC  A,@A+DPTR    ;查表
  130.        MOV   SHUCHU,A         ;顯示十位
  131.        MOV   PIANXUAN,#04H    ;片選
  132.                  CALL  DELAY     ;查表
  133.        MOV SHUCHU,#0FFH   ;關(guān)閉數(shù)碼管
  134.        MOV   A,B              
  135.        MOVC   A,@A+DPTR    ;查表
  136.          MOV   SHUCHU,A         ;顯示個位
  137.        MOV   PIANXUAN,#05H    ;片選
  138.        CALL  DELAY            ;延時
  139.        MOV SHUCHU,#0FFH   ;關(guān)閉數(shù)碼管
  140.                  RET
  141. ;======================加處理子程序=============================
  142. ;輸入:無
  143. ;輸出:無
  144. ;實現(xiàn)的功能:把30H地址加1
  145. ;===============================================================
  146.         JIACHULI:MOV   A,SHUZI
  147.                 CJNE  A,#99,L0         ;若A不等于9,則跳到LL
  148.       MOV   A,#00  
  149.       JMP   L1
  150.          L0:INC   A                ;自加一
  151.          L1:MOV   SHUZI,A   
  152.         RET
  153. ;========================延時程序===============================
  154. ;輸入;無
  155. ;輸出: 無
  156. ;實現(xiàn)的功能:延時一段時間
  157. ;===============================================================
  158.           DELAY:
  159.           MOV  R6,#80
  160.        L7:MOV  R7,#80
  161.        L8:DJNZ R7,L8
  162.           DJNZ R6,L7
  163.     RET
  164. ;=====================共陽查表數(shù)據(jù)==============================
  165.       TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
  166. ;=======================程序結(jié)束================================
  167.     END
復(fù)制代碼


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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表