www.pudn.com > st-asm.rar > keycled.asm


;ST套件键控LED实验程序 
;本实验的目的是让大家熟悉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