📄 sddp.asm
字号:
;********************SDDP********************
;本程序实现软件模拟方式动态显示N位数字。
;入口参数:显示缓冲区首地址在SADR中,显示位数在CNT中。
;出口参数:无。
;占用资源:W,FSR,STATUS,RC3,RC4,020H,023H,028H~02BH,两重堆栈。
;说 明:1.这里采用的是共阴极数码管。
; 2.要想得到持续的显示效果,用户必须不断的调用本程序 。
; 3.显示位数应不大于8位。
; 4.显示缓冲区的数据格式为非压缩格式。
CLKBIT EQU 4
DATBIT EQU 3
IFNDEF SDDP1
#DEFINE SDDP1
include "dlynms.asm"
;*************显示段码表格*****************
TABLE ADDWF PCL,F
RETLW B'00111111' ;共阴极段码表格
RETLW B'00000110'
RETLW B'01011011'
RETLW B'01001111'
RETLW B'01100110'
RETLW B'01101101'
RETLW B'01111101'
RETLW B'00000111'
RETLW B'01111111'
RETLW B'01101111'
; ………… ;用户可在此处继续添加
SDDP BSF STATUS,RP0
MOVLW 0E7H
ANDWF TRISC,F ;RC3,RC4设为输出
BCF STATUS,RP0
BSF PORTC,CLKBIT ;时钟静态电平为高
MOVF SADR,W
MOVWF FSR ;FSR指向段码首址
MOVLW B'11111110'
MOVWF TEMP3 ;TEMP3作为位码产生器
NEXT56 MOVF INDF,W
CALL TABLE ;产生段码
MOVWF TEMP1 ;TEMP1作为段码送出缓冲器
;****************送出段码****************
MOVLW D'8'
MOVWF TEMP2 ;8位段码
BSF STATUS,C
NEXT58 RLF TEMP1,F ;段码左移
BSF PORTC,DATBIT
BTFSS STATUS,C
BCF PORTC,DATBIT
NOP
NOP
BCF PORTC,CLKBIT ;发时钟脉冲
NOP
NOP
BSF PORTC,CLKBIT
DECFSZ TEMP2,F
GOTO NEXT58
;****************送出位码***********
MOVLW 8
MOVWF TEMP2 ;8位位码
BCF STATUS,C
MOVF TEMP3,W
MOVWF TEMP4 ;TEMP4作为位码移出缓冲器
NEXT57 BCF STATUS,C
RLF TEMP4,F
BSF PORTC,DATBIT
BTFSS STATUS,C
BCF PORTC,DATBIT ;将C送出
NOP
NOP
BCF PORTC,CLKBIT ;发时钟脉冲
NOP
NOP
BSF PORTC,CLKBIT
DECFSZ TEMP2,F ;位码送完吗?
GOTO NEXT57
MOVF CNT,W
MOVWF TEMP2
MOVLW D'2' ;送完一位,延时2MS
MOVWF SOU
CALL DLYNMS
MOVF TEMP2,W
MOVWF CNT
DECFSZ CNT,F ;外部位计数器减1
GOTO NEXT59
RETURN
NEXT59 BSF STATUS,C
RLF TEMP3,F
INCF FSR,F
GOTO NEXT56
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -