技术热线: 4007-888-234

单片机开发--键控LED的实验

更新时间: 2019-01-05
阅读量:2153

本实验的目的是让大家熟悉IO口的输入操作,本程序的作用是用按键控制LED

;按S2时只有LED8发光,按S3时只有LED7发光,按S4时只有LED6发光,按S5时只有LED5发光
;PIC单片机学习网——-http://www.pic16.com
;烧写时应注意:配置位已经在程序中写明,加载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