📄 实验24.asm
字号:
CALL DELAY1S ;调用延时
MOVLW B'11100111'
MOVWF PORTD
CALL DELAY1S ;调用延时
MOVLW B'11111111'
MOVWF PORTD
CALL DELAY1S ;调用延时
GOTO HUI
;----------------------------------------------------------------------------------------------
;键盘粗扫描(有没有键按下)
;----------------------------------------------------------------------------------------------
JPSM MOVLW 0F0H
MOVWF PORTB
MOVLW B'11110000' ;屏蔽低4位
ANDWF PORTB,W
SUBLW B'11110000'
BTFSC STATUS,Z
RETURN ;没有键按下,返回
CALL DELAY10MS ;防干扰延时10MS
MOVLW 0F0H
MOVWF PORTB
MOVLW B'11110000' ;屏蔽低4位
ANDWF PORTB,W
SUBLW B'11110000'
BTFSC STATUS,Z
RETURN ;子程序返回
MOVLW B'11111110' ;键盘细扫描(哪个键按下了)
MOVWF PORTB
BTFSS PORTB,4
GOTO JIAN0 ;键"0"按下,转去执行对应键盘子程序
BTFSS PORTB,5
GOTO JIAN1 ;键"1"按下,转去执行对应键盘子程序
BTFSS PORTB,6
GOTO JIAN2 ;键"2"按下,转去执行对应键盘子程序
BTFSS PORTB,7
GOTO JIAN3 ;键"3"按下,转去执行对应键盘子程序
MOVLW B'11111101'
MOVWF PORTB
BTFSS PORTB,4
GOTO JIAN4 ;键"4"按下,转去执行对应键盘子程序
BTFSS PORTB,5
GOTO JIAN5 ;键"5"按下,转去执行对应键盘子程序
BTFSS PORTB,6
GOTO JIAN6 ;键"6"按下,转去执行对应键盘子程序
BTFSS PORTB,7
GOTO JIAN7 ;键"7"按下,转去执行对应键盘子程序
MOVLW B'11111011'
MOVWF PORTB
BTFSS PORTB,4
GOTO JIAN8 ;键"8"按下,转去执行对应键盘子程序
BTFSS PORTB,5
GOTO JIAN9 ;键"9"按下,转去执行对应键盘子程序
BTFSS PORTB,6
GOTO JIANA ;键"A"按下,转去执行对应键盘子程序
BTFSS PORTB,7
GOTO JIANB ;键"B"按下,转去执行对应键盘子程序
MOVLW B'11110111'
MOVWF PORTB
BTFSS PORTB,4
GOTO JIANC ;键"C"按下,转去执行对应键盘子程序
BTFSS PORTB,5
GOTO JIAND ;键"D"按下,转去执行对应键盘子程序
BTFSS PORTB,6
GOTO JIANE ;键"E"按下,转去执行对应键盘子程序
BTFSS PORTB,7
GOTO JIANF ;键"F"按下,转去执行对应键盘子程序
RETURN ;子程序返回
;----------------------------------------------------------------------------------------------
;对寄存器COUNT附相应值,用于主程序的查表转跳
;----------------------------------------------------------------------------------------------
JIAN0 CALL SFANG ;调用键盘释放子程序
MOVLW 00H ;寄存器COUNT赋值"0"
MOVWF COUNT
RETURN ;子程序返回
JIAN1 CALL SFANG ;调用键盘释放子程序
MOVLW 01H ;寄存器COUNT赋值"1"
MOVWF COUNT
RETURN ;子程序返回
JIAN2 CALL SFANG ;调用键盘释放子程序
MOVLW 02H ;寄存器COUNT赋值"2"
MOVWF COUNT
RETURN ;子程序返回
JIAN3 CALL SFANG ;调用键盘释放子程序
MOVLW 03H ;寄存器COUNT赋值"3"
MOVWF COUNT
RETURN ;子程序返回
JIAN4 CALL SFANG ;调用键盘释放子程序
MOVLW 04H ;寄存器COUNT赋值"4"
MOVWF COUNT
RETURN ;子程序返回
JIAN5 CALL SFANG ;调用键盘释放子程序
MOVLW 05H ;寄存器COUNT赋值"5"
MOVWF COUNT
RETURN ;子程序返回
JIAN6 CALL SFANG ;调用键盘释放子程序
MOVLW 06H ;寄存器COUNT赋值"6"
MOVWF COUNT
RETURN ;子程序返回
JIAN7 CALL SFANG ;调用键盘释放子程序
MOVLW 07H ;寄存器COUNT赋值"7"
MOVWF COUNT
RETURN ;子程序返回
JIAN8 CALL SFANG ;调用键盘释放子程序
MOVLW 08H ;寄存器COUNT赋值"8"
MOVWF COUNT
RETURN ;子程序返回
JIAN9 CALL SFANG ;调用键盘释放子程序
MOVLW 09H ;寄存器COUNT赋值"9"
MOVWF COUNT
RETURN ;子程序返回
JIANA CALL SFANG ;调用键盘释放子程序
MOVLW 0AH ;寄存器COUNT赋值"A"
MOVWF COUNT
RETURN ;子程序返回
JIANB CALL SFANG ;调用键盘释放子程序
MOVLW 0BH ;寄存器COUNT赋值"B"
MOVWF COUNT
RETURN ;子程序返回
JIANC CALL SFANG ;调用键盘释放子程序
MOVLW 0CH ;寄存器COUNT赋值"C"
MOVWF COUNT
RETURN ;子程序返回
JIAND CALL SFANG ;调用键盘释放子程序
MOVLW 0DH ;寄存器COUNT赋值"D"
MOVWF COUNT
RETURN ;子程序返回
JIANE CALL SFANG ;调用键盘释放子程序
MOVLW 0EH ;寄存器COUNT赋值"E"
MOVWF COUNT
RETURN ;子程序返回
JIANF CALL SFANG ;调用键盘释放子程序
MOVLW 0FH ;寄存器COUNT赋值"F"
MOVWF COUNT
RETURN ;子程序返回
;----------------------------------------------------------------------------------------------
;按键释放子程序
;----------------------------------------------------------------------------------------------
SFANG MOVLW 0F0H
MOVWF PORTB
MOVLW B'11110000' ;屏蔽低4位
ANDWF PORTB,W
SUBLW B'11110000'
BTFSS STATUS,Z
GOTO SFANG
CALL DELAY10MS ;防干扰延时10MS
MOVLW 0F0H
MOVWF PORTB
MOVLW B'11110000' ;屏蔽低4位
ANDWF PORTB,W
SUBLW B'11110000'
BTFSS STATUS,Z
GOTO SFANG
RETURN ;子程序返回
;------------------------------------------------------------------------------------------
;显示驱动子程序
;------------------------------------------------------------------------------------------
XSHI MOVLW 67H ;设置显示缓冲器的数据地址
MOVWF FSR
LOOP MOVF INDF,W ;取出数据
CALL BMA ;查询对应编码
CALL OUTXSH ;利用SPI方式输出编码数据
DECF FSR
BTFSS FSR,4 ;直到8位数码全部输出
GOTO LOOP
RETURN ;子程序返回
;------------------------------------------------------------------------------------------
;SPI方式输出编码数据子程序
;------------------------------------------------------------------------------------------
OUTXSH MOVWF SSPBUF ;送至SSPBUF后开始逐位发送
LOOP1 BSF STATUS,RP0 ;选择体1
BTFSS SSPSTAT,BF ;是否发送完毕
GOTO LOOP1 ;否,继续查询
BCF STATUS,RP0 ;发送完毕,选择体0
MOVF SSPBUF,W ;移空SSPBUF
RETURN ;子程序返回
;-------------------------------------------------------------------------
JKZT MOVLW 0AH ;监控状态(数码管全黑)
MOVWF 60H
MOVWF 61H
MOVWF 62H
MOVWF 63H
MOVWF 64H
MOVWF 65H
MOVWF 66H
MOVLW 0AH
MOVWF 67H
RETURN ;子程序返回
;-------------------------------------------------------------------------
YIWEI MOVF 62H,W ;移位
MOVWF 63H
MOVF 61H,W
MOVWF 62H
MOVF 60H,W
MOVWF 61H
RETURN ;子程序返回
;------------------------------------------------------------------------------------------
BINTOB MOVLW 10H ;BCD码转为二进制数子程序
MOVWF COUNT1
CLRF R1H
CLRF R1L
LPDTB BCF STATUS,C
RRF S1H
RRF S1Z
RRF S1L
RRF R1H
RRF R1L
DECFSZ COUNT1
GOTO ADJDCT
RETLW 00H
ADJDCT MOVLW S1L
MOVWF FSR
CALL ADJBIN
MOVLW S1Z
MOVWF FSR
CALL ADJBIN
MOVLW S1H
MOVWF FSR
CALL ADJBIN
GOTO LPDTB
ADJBIN MOVLW 03H
BTFSC INDF,3
SUBWF INDF
MOVLW 30H
BTFSC INDF,7
SUBWF INDF
RETLW 0
;----------------------------------------------------------------------------------------
;10MS延时子程序
;----------------------------------------------------------------------------------------
DELAY10MS
MOVLW 0FH ;外循环常数
MOVWF 20H ;外循环寄存器
LO2 MOVLW 0FFH ;中循环常数
MOVWF 21H ;中循环寄存器
L01 DECFSZ 21H,F ;中循环寄存器递减
GOTO L01 ;继续中循环
DECFSZ 20H,F ;外循环寄存器递减
GOTO LO2 ;继续外循环
RETURN ;返回
;-----------------------------------------------------------------------------------------
;1s延时子程序
;-----------------------------------------------------------------------------------------
DELAY1S MOVLW 06H ;外循环常数
MOVWF 20H ;外循环寄存器
L0 MOVLW 0EBH ;中循环常数
MOVWF 21H ;中循环寄存器
L1 MOVLW 0ECH ;内循环常数
MOVWF 22H ;内循环寄存器
L2 DECFSZ 22H,F ;内循环寄存器递减
GOTO L2 ;继续内循环
DECFSZ 21H,F ;中循环寄存器递减
GOTO L1 ;继续中循环
DECFSZ 20H,F ;外循环寄存器递减
GOTO L0 ;继续外循环
RETURN ;返回
;------------------------------------------------------------------------------------------
END
;------------------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -