技术热线: 4007-888-234

实战五:键控LED的实验

更新时间: 2019-03-25
阅读量:907

深圳市英锐恩科技有限公司:台湾麦肯单片机(Micon MDT单片机)亚太地区A级代理商

键控LED的实验
;本实验的目的是让大家熟悉IO口的输入操作,本程序的作用是用按键控制LED
;按S2时只有LED8发光,按S3时只有LED7发光,按S4时只有LED6发光,按S5时只有LED5发光
;烧写时应注意:配置位已经在程序中写明,加载HEX文件时会自动加载,烧写时不用再手动设置配置位。
;实验时请注意套件跳线选择
;****************************************************************
  LIST P=16F84A,R=DEC          ;定义器件为16F84,默认数制为十进制
;----------------------------------------------------------------
  __CONFIG B'11111111110001';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC
                                              ;没有代码保护
                                              ;看门狗关闭
                                              ;上电廷时器开启
                                              ;振荡器模式为XT
;----------------------------------------------------------------
STATUS EQU 03H               ;寄存器单元定义
RP0 EQU 5
;----------------------
PORTA EQU 05H
PORTB EQU 06H

TRISA EQU 5H
TRISB EQU 6H
;-----------------------    ;变量单元定义
DATA1 EQU 20H
;----------------------RA
KEY1 EQU 3
KEY2 EQU 4
;----------------------RB
KEY3 EQU 0
KEY4 EQU 1
;--------------------
   ORG 0000H
MAIN
   CLRF PORTA               ;初始IO口
   CLRF PORTB

   BSF STATUS,RP0           ;设置数据寄存器体1
   MOVLW 00011000B          ;定义RA。3,RA。4为输入其它为输出
   MOVWF TRISA
   MOVLW 00000011B          ;定义RB。0,RB。1为输入其它为输出
   MOVWF TRISB
   BCF STATUS,RP0           ;恢复数据寄存器体0

LOOP
   BTFSS PORTA,KEY1         ;扫描按键,有按键被按下转到键值处理
   GOTO SET_KEY1
   BTFSS PORTA,KEY2
   GOTO SET_KEY2
   BTFSS PORTB,KEY3
   GOTO SET_KEY3
   BTFSS PORTB,KEY4
   GOTO SET_KEY4
   GOTO LOOP                ;反复扫描
;---------------------------------
SET_KEY1
   BTFSC PORTA,KEY1         ;是干扰退出
   GOTO LOOP
   MOVLW 255
   MOVWF DATA1
SET_KEY1A
   BTFSC PORTA,KEY1         ;去抖动
   GOTO LOOP
   DECFSZ DATA1,1
   GOTO SET_KEY1A
   MOVLW 03H
   ANDWF PORTB,1           ;熄灭所有LED
   MOVLW 80H
   IORWF PORTB,1           ;点亮LED8
SET_KEY1B
   BTFSS PORTA,KEY1        ;等待按键放开
   GOTO SET_KEY1B
   GOTO LOOP              
;---------------------------------
SET_KEY2
   BTFSC PORTA,KEY2
   GOTO LOOP
   MOVLW 255
   MOVWF DATA1
SET_KEY2A
   BTFSC PORTA,KEY2       
   GOTO LOOP
   DECFSZ DATA1,1
   GOTO SET_KEY2A
   MOVLW 03H
   ANDWF PORTB,1
   MOVLW 40H
   IORWF PORTB,1          ;按S3点亮LED7    
SET_KEY2B
   BTFSS PORTA,KEY2
   GOTO SET_KEY2B
   GOTO LOOP
;---------------------------------
SET_KEY3
   BTFSC PORTB,KEY3
   GOTO LOOP
   MOVLW 255
   MOVWF DATA1
SET_KEY3A
   BTFSC PORTB,KEY3
   GOTO LOOP
   DECFSZ DATA1,1
   GOTO SET_KEY3A
   MOVLW 03H
   ANDWF PORTB,1
   MOVLW 20H
   IORWF PORTB,1          ;按S4点亮LED6
SET_KEY3B
   BTFSS PORTB,KEY3    
   GOTO SET_KEY3B
   GOTO LOOP
;---------------------------------
SET_KEY4
   BTFSC PORTB,KEY4
   GOTO LOOP
   MOVLW 255
   MOVWF DATA1
SET_KEY4A
   BTFSC PORTB,KEY4
   GOTO LOOP
   DECFSZ DATA1,1
   GOTO SET_KEY4A
   MOVLW 03H
   ANDWF PORTB,1
   MOVLW 10H
   IORWF PORTB,1
SET_KEY4B
   BTFSS PORTB,KEY4        ;按S5点亮LED5
   GOTO SET_KEY4B
   GOTO LOOP
;---------------------------------
   END