⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.asm

📁 PIC实验板源程序
💻 ASM
字号:
;实验目的:熟悉按键的判断
; 数码管无按键按下时显示“FF”,有按键按下时显示按键的编号
;硬件要求:拨码开关S1全部置ON
;          拨码开关S6全部置ON,S5第5-6位置ON,其他位置OFF
;          其他拨码开关置OFF
#include<p16f877A.inc>    ;包含头文件
__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC
;*******************用户寄存器定义*********************
DISPLAYVAL1   EQU    20H  ;显示高位寄存器
DISPLAYVAL2   EQU    21H  ;显示低位寄存器
 
;******************程序入口地址************************
 ORG       00H
 NOP                       ;ICD所需要的空指令
 GOTO      MAIN            ;转主程序

;*****************查表程序*****************************
TABLE
 ADDWF     PCL,1           ;加上偏移地址
 RETLW     0C0H            ;0的编码
 RETLW     0F9H            ;1的编码
 RETLW     0A4H            ;2的编码
 RETLW     0B0H            ;3的编码      
 RETLW     83H             ;b的编码
 RETLW     88H             ;A的编码
 RETLW     8EH             ;F的编码

;****************主程序*******************************
MAIN
 MOVLW     0FFH
 MOVWF     PORTD           ;关闭所有显示
 BANKSEL   TRISA           ;选择I/O口方向寄存器所在的体
 MOVLW     0FH             
 MOVWF     TRISA           ;A口高2位输出,低4位输入
 MOVWF     TRISB           ;B口高4位输出,低4位输入
 CLRF      TRISD           ;D口输出
 BANKSEL   ADCON1
 MOVLW     06H
 MOVWF     ADCON1          ;A口为普通I/O口
 CLRF      STATUS          ;回体0

LOOP
 MOVLW     6
 MOVWF     DISPLAYVAL1
 MOVWF     DISPLAYVAL2     ;F的偏移地址
 BTFSC     PORTB,0         ;BO是否按下?
 GOTO      PB_1            ;否,转判B1
 CALL      DELAY           ;延时,清除干扰信号
 BTFSC     PORTB,0         ;再次判断BO口是否按下?
 GOTO      PB_1            ;否
 MOVLW     4               ;是,b的偏移地址
 MOVWF     DISPLAYVAL1
 MOVLW     0               ;0的偏移地址
 MOVWF     DISPLAYVAL2
 GOTO      LOOP_END        ;转显示部分
PB_1
 BTFSC     PORTB,1         ;B1是否按下?
 GOTO      PB_2            ;否,转判B2
 CALL      DELAY           ;延时,清除干扰信号
 BTFSC     PORTB,1         ;再次判断B1是否按下?
 GOTO      PB_2            ;否
 MOVLW     4
 MOVWF     DISPLAYVAL1     ;是,b的偏移地址
 MOVLW     1
 MOVWF     DISPLAYVAL2     ;1的偏移地址
 GOTO      LOOP_END        ;转显示部分
PB_2
 BTFSC     PORTB,2         ;B2是否按下?
 GOTO      PB_3            ;否,转判B3
 CALL      DELAY           ;延时,清除干扰信号
 BTFSC     PORTB,2         ;再次判断B2是否按下?
 GOTO      PB_3            ;否
 MOVLW     4
 MOVWF     DISPLAYVAL1     ;是,b的偏移地址
 MOVLW     2 
 MOVWF     DISPLAYVAL2     ;2的偏移地址
 GOTO      LOOP_END        ;转显示部分
PB_3
 BTFSC     PORTB,3         ;B3是否按下
 GOTO      PA_0            ;否,转判A0
 CALL      DELAY           ;延时,清除干扰信号
 BTFSC     PORTB,3         ;再次判断B3是否按下?
 GOTO      PA_0            ;否
 MOVLW     4
 MOVWF     DISPLAYVAL1     ;是,b的偏移地址 
 MOVLW     3
 MOVWF     DISPLAYVAL2     ;3的偏移地址
 GOTO      LOOP_END        ;转显示部分
PA_0
 BTFSC     PORTA,0         ;A0是否按下
 GOTO      PA_1            ;否,转判A1
 CALL      DELAY           ;延时,清除干扰信号
 BTFSC     PORTA,0         ;再次判断A0是否按下?
 GOTO      PA_1            ;否
 MOVLW     5               ;是,A的偏移地址
 MOVWF     DISPLAYVAL1
 MOVLW     0
 MOVWF     DISPLAYVAL2     ;0的偏移地址
 GOTO      LOOP_END        ;转显示部分
PA_1
 BTFSC     PORTA,1         ;A1是否按下
 GOTO      PA_2            ;否,转判A2
 CALL      DELAY           ;延时,清除干扰信号
 BTFSC     PORTA,1         ;再次判断A1是否按下?
 GOTO      PA_2            ;否
 MOVLW     5               
 MOVWF     DISPLAYVAL1     ;是,A的偏移地址
 MOVLW     1
 MOVWF     DISPLAYVAL2     ;1的偏移地址
 GOTO      LOOP_END        ;转显示部分
PA_2
 BTFSC     PORTA,2         ;A2是否按下
 GOTO      PA_3            ;否,转判A3
 CALL      DELAY           ;延时,清除干扰信号
 BTFSC     PORTA,2         ;再次判断A2是否按下?
 GOTO      PA_3            ;否
 MOVLW     5
 MOVWF     DISPLAYVAL1     ;是,A的偏移地址 
 MOVLW     2
 MOVWF     DISPLAYVAL2     ;1的偏移地址
 GOTO      LOOP_END        ;转显示部分
PA_3
 BTFSC     PORTA,3         ;A3是否按下
 GOTO      LOOP_END        ;否,转显示部分
 CALL      DELAY           ;延时,清除干扰信号
 BTFSC     PORTA,3         ;再次判断A3是否按下?
 GOTO      LOOP_END        ;否,转显示部分
 MOVLW     5
 MOVWF     DISPLAYVAL1     ;是,A的偏移地址
 MOVLW     3
 MOVWF     DISPLAYVAL2     ;3的偏移地址
 GOTO      LOOP_END
LOOP_END
 MOVF      DISPLAYVAL1,0   ;显示低位
 CALL      TABLE           ;查表获取相应的编码
 MOVWF     PORTD           ;送数码管显示
 BCF       PORTA,4         ;使能相应数码管显示
 CALL      DELAY           ;延时一段时间,以保证足够的亮度
 BSF       PORTA,4         ;关闭显示
 MOVF      DISPLAYVAL2,0   ;显示高位
 CALL      TABLE           ;查表获取相应的编码
 MOVWF     PORTD           ;送数码管显示
 BCF       PORTA,5         ;使能相应数码管显示
 CALL      DELAY           ;延时一段时间
 BSF       PORTA,5         ;关闭显示
 GOTO      LOOP            ;循环判断是否有按键按下,并显示

;*******************延时程序*************************
DELAY
 MOVLW     0FFH
 MOVWF     30H
 DECFSZ    30H,1
 GOTO      $-1
 RETURN

;******************程序结束**************************
 END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -