专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

读入独立键,并点亮相应的LED灯

作者:佚名   来源:本站原创   点击数:  更新时间:2010年09月30日   【字体:
/***************************************************************************
         006.asm
     读入独立键盘上的按键,并把相应的LED灯点亮,若一段时间无按键,刚循环点亮LED
     接线:P0口接八位LED
        P2口接八位独立按键
        定时器T0计时,中断方式
                                          2010.09.04
***************************************************************************/
   ORG 0000H
      LJMP MAIN
   ORG 000BH
      LJMP INT_T0
   ORG 0100H
MAIN:     ;主程序入口
    MOV SP,#50H    ;设置堆栈
 MOV TMOD,#01H     ;设置定时模式
 MOV TH0,#15H   ;赋定时初值
 MOV TL0,#9FH
 CLR 20H.0    ;初始化按键标志
 MOV R2,#0FFH   ;初始化键值
 MOV R3,#01H    ;初始化循环闪铄初值
 MOV R4,#00H    ;初始化定时初值
 SETB TR0    ;启动定时器
 MOV IE,#82H    ;开中断
LOOP:
    LCALL KEY_READ    ;扫描键盘
L1: JB 20H.0,LIGH  ;有键输入,则去点亮相应LED
    JBC 20H.0,LOOP  
 MOV A,R4
 CJNE A,#0C8H,LOOP   ;否则去判断定时是否到,定时到,循环点亮八位LED
 LCALL LEED
 LJMP L1

/*点亮相应LED*/
LIGH:
    MOV A,R2     ;取键值
 MOV P0,A     ;输出
 RET

/*循环点亮LED*/
LEED:
    MOV A,R3
LOOP1:
 CPL A
 MOV P0,A
 LCALL KEY_READ
 JB 20H.0,RETUN0
 MOV R0,#0FFH
 LCALL DELAY
 MOV A,R3
 RL A
 MOV R3,A
 CJNE A,#80H,LOOP1
LOOP2:
 CPL A
 MOV P0,A
 LCALL KEY_READ
 JB 20H.0,RETUN0
 MOV R0,#0FFH
 LCALL DELAY
 MOV A,R3
 RR A
 MOV R3,A
 CJNE A,#01H,LOOP2
 SJMP LOOP1
RETUN0:
    RET

/*键盘扫描程序*/

KEY_READ:
    CLR EA     ;扫描键盘时关定时中断
    MOV A,P2
 CJNE A,#0FFH,DE
 LJMP RETUN
DE: MOV R0,#8AH
    LCALL DELAY
 MOV A,P2
 CJNE A,#0FFH,DE0
 LJMP RETUN
DE0:MOV R2,A
    SETB 20H.0
 MOV R4,#00H
DE1:MOV A,P2
 CJNE A,#0FFH,DE1
RETUN:
    SETB EA
    RET 

/*中断子程序*/

INT_T0:
      CLR EA
      PUSH ACC
   MOV TH0,#15H      ;重赋定时初值
      MOV TL0,#9FH
   INC R4
   POP ACC
   SETB EA
   RETI

/*延时子程序 */

DELAY:
D1:   MOV R1,#0FFH
D0:   DJNZ R1,D0
      DJNZ R0,D1
   RET  


   END
关闭窗口

相关文章