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

📄 sonix松翰sn8p2系列vfd驱动子程序pt6311.txt

📁 SONIX松翰SN8P2系列VFD驱动子程序PT6311用
💻 TXT
字号:
;===========================================
DISP_CHAR_WELCOME:
MOV A,#04  ;设定最后地址
MOV Position,A
MOV A,#'E'-37H 
CALL CODE_TO_SEG
MOV A,#'M'-37H 
CALL CODE_TO_SEG
MOV A,#'O'-37H 
CALL CODE_TO_SEG
MOV A,#'C'-37H 
CALL CODE_TO_SEG
MOV A,#'L'-37H 
CALL CODE_TO_SEG
MOV A,#'E'-37H 
CALL CODE_TO_SEG
MOV A,#'W'-37H 
CALL CODE_TO_SEG
RET
;===========================================
; 清余中间显示部份(SEG1-SEG22)
;===========================================
DISP_CLEAR_MID:
;清全部显示暂存器
MOV A,#SEG1
MOV Z,A
    DISP_CLEAR_MID_TO_CLEAR:
MOV A,#00H
CLR Y
B0MOV @YZ,A
INCMS Z
NOP
MOV A,#SEG22+1
CMPRS A,Z
JMP DISP_CLEAR_MID_TO_CLEAR
RET
;===========================================
; 清全部显示暂存器(SEG1-SEG26)
;===========================================
DISP_CLEAR_ALL:
MOV A,#SEG1
MOV Z,A
    DISP_CLEAR_ALL_TO_CLEAR:
MOV A,#00H
CLR Y
B0MOV @YZ,A
INCMS Z
NOP
MOV A,#SEG26+1
CMPRS A,Z
JMP DISP_CLEAR_ALL_TO_CLEAR
RET
;=================================================================================
; 将数送到 SEG 中
; 位置->osition (20-0)  码-> A
;=================================================================================
CODE_TO_SEG:
B0MOV Y,#VFD_CHAR_TAB$M
B0MOV  Z,#VFD_CHAR_TAB$L
ADD Z,A
MOVC
MOV BufA,A
CLR Y
BCLR FC
MOV A,Position ; ->A
ADD A,#SEG1
MOV Z,A
MOV A,BufA
MOV @YZ,A
INCMS Position ;+1 ->A
MOV A,Position
ADD A,#SEG1
MOV Z,A
MOV A,R
MOV @YZ,A
INCMS Position
RET
;=================================================================================
;=================================================================================
; V F D 子程序
;=================================================================================
; 局部变量:A Y Z R BufA Loop
;=================================================================================
;=================================================================================
; 初始化VFD,并清全部显示暂存器(SEG1-SEG26)
;=================================================================================
VFD_INIT:
BSET VFDpSTB
BSET VFDpCLK
BSET VFDpDATA
BSET VFDioSTB ;输出
BSET VFDioCLK
BSET VFDioDATA
CALL DISP_CLEAR_ALL
;=================================================================================
; 送内部暂存器到VFD
;=================================================================================
VFD_SEND_ALL:
MOV A,#01000000B ;COMMAND2
CALL VFD_SEND_8BIT
BSET VFDpSTB
CALL VFD_SEND_28DATA
MOV A,#00001100B ;COMMAND1 ;14DIGx14SEG
CALL VFD_SEND_8BIT
BSET VFDpSTB
MOV A,#10001111B
CALL VFD_SEND_8BIT
BSET VFDpSTB
RET
;=================================================================================
; 读按键
;=================================================================================
VFD_READ_KEY:
;============ 送COMMAND2 READ KEY =============
MOV A,#01000010B ;COMMAND2  READ KEY
CALL VFD_SEND_8BIT
;============ 读KEY K1-K4,SG1-SG2 =============
CALL VFD_INCEPT_8BIT
AND A,#11101100B ;去掉多余的位
RET
;=================================================================================
; VFD 内部子程序
;=================================================================================
;==============================================
VFD_SEND_28DATA:
    ;=============== 送地址 00H ===============
MOV A,#11000000B ;COMMAND3
CALL VFD_SEND_8BIT
    ;=============== 送28个数据 ===============
MOV A,#SEG1
MOV Z,A
MOV A,#3
MOV BufA,A
    VFD_SEND_28DATA_26Byte:
CLR Y
B0MOV A,@YZ
MOV Y,A
MOV A,#8
MOV Loop,A
    VFD_SEND_28DATA_8Bit:
RRCM Y
BTS1 FC              ;C为1跳
JMP $+3
        BSET VFDpDATA ;传送数据1
JMP $+2
BCLR VFDpDATA ;传送数据0
nop
BCLR VFDpCLK
nop
BSET VFDpCLK
DECMS Loop
JMP VFD_SEND_28DATA_8Bit
;跳过无用寄存器
DECMS BufA
JMP VFD_SEND_28DATA_DD
MOV A,#3
MOV BufA,A
JMP VFD_SEND_28DATA_D
VFD_SEND_28DATA_DD:
INCMS Z
VFD_SEND_28DATA_D:
;判断是否到头
MOV A,#SEG26+1
CMPRS A,Z
JMP VFD_SEND_28DATA_26Byte
BSET VFDpSTB
RET
;==============================================
VFD_SEND_8BIT:
BSET VFDioDATA ;输出
BCLR VFDpSTB
MOV Y,A
MOV A,#8
MOV Loop,A
    VFD_SEND_8BIT_A:
RRCM Y
BTS1 FC              ;C为1跳
JMP $+3
        BSET VFDpDATA ;传送数据1
JMP $+2
BCLR VFDpDATA ;传送数据0
nop
BCLR VFDpCLK
nop
BSET VFDpCLK
DECMS Loop
JMP VFD_SEND_8BIT_A
; BSET VFDpSTB  ;在外面设1
RET
;==============================================
VFD_INCEPT_8BIT:
BCLR VFDioDATA ;输入
BCLR VFDpSTB
MOV A,#8
MOV Loop,A
    VFD_INCEPT_8BIT_A:
BCLR VFDpCLK
NOP
BTS1 VFDpDATA            ;C为1跳
JMP $+3
        BSET FC  ;传送数据1
JMP $+2
BCLR FC  ;传送数据0
RRCM Y
BSET VFDpCLK
DECMS Loop
JMP VFD_INCEPT_8BIT_A
MOV A,Y
BSET VFDpSTB
RET

⌨️ 快捷键说明

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