找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5934|回复: 0
打印 上一主题 下一主题
收起左侧

单片机按键连按长按汇编程序

[复制链接]
跳转到指定楼层
楼主
ID:70976 发表于 2014-12-27 18:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. ;===============================================================
  2. ;程序编写人:兰建文
  3. ;编写地点:51hei培训机构
  4. ;时间:6月7日下午  星期日
  5. ;功能:本程序实现P0口的对2个数码管显示0到99,一个按键实现一次
  6. ;按键只递加1次,到99回到0,按着不动不影响数码管动态显示;任何时
  7. ;刻,任何一个按键,若按键连续按键3次,每次间隔时间不大于1秒,循
  8. ;环显示0到9回到0。若间隔时间大于1秒,显示加1,低电平亮
  9. ;P2口实现对数码管的片选功能
  10. ;===============================================================
  11. ;==========================系统程序=============================
  12. ;=========================开始初始化============================
  13.            SHUCHU   EQU   P0           ;定义P0口为输出口
  14.      PIANXUAN EQU   P2           ;定义P2口为片选口
  15.         SHUZI    EQU   30H          ;设置处理数据存放地址
  16.      JIANBIT0 BIT   20H.0     ;设置按键标志位         
  17.      XIAN0    BIT   20H.2     ;显示标志位
  18.      T_BIT    BIT   21H.0     ;设置中断定时器0标志位
  19.      LIANAN   BIT   20H.1     ;设置连按标志位
  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服务程序
  28.                     ORG   0030H        ;入口地址
  29. ;=========================主程序===============================        
  30.               START:MOV   SP,#60H  ;移开指针        
  31.         MOV   SHUZI,#00  ;数据初始化
  32.         MOV   DPTR,#TAB     ;查表初始化
  33.            MOV   P1,#0F8H      ;设置P1.0口为输入
  34.      CALL  INIT   ;开中断
  35.      CLR   JIANBIT0  ;按键标志位清0
  36.      CLR   LIANAN  ;连按标志位清0
  37.      CLR   BIT4
  38.      SETB  T_BIT   ;中断标志位置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     ;中断标志位清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;按键标志位=1判断P1.3口,若为0则判断按键是否抬起
  62.            JNB   P1.3,XIANSHI0   ;若没抬起(P1.3=0)则调到XIANSHI0   
  63.      SETB  BIT4
  64.      INC   R2
  65.      MOV   R3,#0      
  66.          CLR   JIANBIT0    ;按键标志位清0
  67.      CLR   XIAN0     ;显示标志位清0
  68.         JMP   MAIN     ;返回MAIN   
  69.    
  70.       PANDUAN:
  71.            JB    P1.3,MAIN    ;若按键抬起则返回MAIN,若没有抬起按键标志位清0
  72.            SETB  JIANBIT0
  73.            JMP   MAIN
  74.    
  75.      XIANSHI0:
  76.               JB    XIAN0,MAIN
  77.               SETB  XIAN0   ;显示标志位清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服务子程序========================
  95. ;输入:无
  96. ;输出:无
  97. ;实现的功能:实现定时20MS,影响标志位T_BIT
  98. ;===============================================================
  99.       T0_1:MOV    TMOD,#MODE  ;定时器1工作方式1
  100.            MOV    TL0,#0E0H     ;设置定时初值
  101.      MOV    TH0,#0B1H
  102.      SETB   T_BIT   ;定时标志位清0
  103.      RETI
  104. ;========================中断设置子程序=========================
  105. ;输入:无
  106. ;输出:无
  107. ;实现的功能:初始化设置定时器,设置初值
  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. ;实现的功能:把30H的数据的十位和个位分离出来
  119. ;===============================================================
  120.              JISUAN:MOV   A,SHUZI      ;数据放在A中  
  121.         MOV   B,#10        ;除数放在B中
  122.         DIV   AB           ;商放在A中,余数放在B中
  123.         RET               
  124. ;========================显示子程序=============================
  125. ;输入:"A"
  126. ;输出:"P0口"
  127. ;实现的功能:把A的数输出到P0口显示,十位和个位分开显示
  128. ;===============================================================
  129.          DISPLAY:MOVC  A,@A+DPTR    ;查表
  130.        MOV   SHUCHU,A         ;显示十位
  131.        MOV   PIANXUAN,#04H    ;片选
  132.                  CALL  DELAY     ;查表
  133.        MOV SHUCHU,#0FFH   ;关闭数码管
  134.        MOV   A,B              
  135.        MOVC   A,@A+DPTR    ;查表
  136.          MOV   SHUCHU,A         ;显示个位
  137.        MOV   PIANXUAN,#05H    ;片选
  138.        CALL  DELAY            ;延时
  139.        MOV SHUCHU,#0FFH   ;关闭数码管
  140.                  RET
  141. ;======================加处理子程序=============================
  142. ;输入:无
  143. ;输出:无
  144. ;实现的功能:把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. ;实现的功能:延时一段时间
  157. ;===============================================================
  158.           DELAY:
  159.           MOV  R6,#80
  160.        L7:MOV  R7,#80
  161.        L8:DJNZ R7,L8
  162.           DJNZ R6,L7
  163.     RET
  164. ;=====================共阳查表数据==============================
  165.       TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
  166. ;=======================程序结束================================
  167.     END
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表