📄 16311.asm
字号:
;例如:
fill:
mov r0,#VFD_BUFF ;缓冲区开始地址
mov a,#0aah
contfill:
mov @r0,a
inc r0
cjne a,#26,contfill ;填充完为止
call display_sub
ret
; 上述程序调用DISPLAY_SUB
; 显示结果为13G的VFD上比画相间显示
;
;下面有DISLAY_SUB READKEY_SUB 两个程序可直接调用,搞请缓冲区的地址即可
;住你好运!!!!!!!
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; UPD16311 COMMUNICATION DISPLAY PART
; USED : R0,R6,C,A
; RAM : DISPLAY BUFFER 31H---40H
; CONTANST: VFD_BUFF equ31H
;
DISPLAY_SUB:
SETB VFD_STB
MOV A,#DISPLAYMODE;写模式
ACALL SEND_16311
SETB VFD_STB
;
MOV A,#WRITEDATA ; 40H 写显示缓冲区命令
ACALL SEND_16311
SETB VFD_STB
;
MOV R6,#0dH ; 13 GRIDS 送显示缓冲区的数到16311
MOV R0,#VFD_BUFF ; 31H 缓冲区开始地址
MOV A,#DISPLAYADDR ; 0C0H
ACALL SEND_16311 ; DISPLAY RAM ADDRESS
DISPLAYRAM: ; DISPLAY RAM
MOV A,@R0
ACALL SEND_16311
;
inc r0
mov a,@r0
acall send_16311
;
mov a,#00h
acall send_16311
;
inc r0
DJNZ R6,DISPLAYRAM
SETB VFD_STB
; acall readsw_sub 读16311的SW1-4
;readsw_sub:
; setb vfd_stb
; MOV A,#readsw
; ACALL SEND_16311
; acall rxdata
; mov c,acc.0
; setb vfd_stb
; mov mute_psw,c
; mov mute_port,c
;----------------------------------------------------
; MOV C,MUTE_PSW ;////
; JC MUTELPON1 ;////控制显示模式
MOV A,#DISPLAY1
setb led_ct
JNB standby_PSW,MUTELPON2
; SJMP MUTELPON2 ;/////
;MUTELPON1:
MOV A,#DISPLAY2 ;///
clr led_ct
; CPL C
; MOV ACC.3,C
MUTELPON2:
ACALL SEND_16311
SETB VFD_STB
;-----------------------------------------------------
writeled data 41h
disp_led12345: setb vfd_stb ;写LED功能
mov a,#writeled
call send_16311
; mov a,ledout_buff
; anl a,#1fh
mov a,#1fh
mov c,standby_psw
cpl c
mov acc.4,c ; led5 pin46
call send_16311
setb vfd_stb
;-----------------------------------------------------
ret
;00000000000000000000000000000000000000000000000000000000000000000000000000000000000000
; UPD16311 COMMUNICATION READ KEYBOARD PART
; USED : R0,R6,C,A
; RAM : KEYBUFFER 42H/43h
; CONTANST: KEY_BUFF equ41H
; KEYBUFFER NUMBER 读两个字节的键盘
READKEY_SUB:
MOV R0,#KEY_BUFF;键盘缓冲区的起始地址
MOV R6,#02H ; KEYBUFFER NUMBER
MOV A,#READKEY ; 42H 读键盘命令
ACALL SEND_16311
READLP:
acall rxdata
MOV @R0,A
INC R0
DJNZ R6,READLP
SETB VFD_STB
RET
;.......................................................................
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DISPLAYMODE DATA 0cH ; 13 GRIDS & 15 SEGMENTS
DISPLAYADDR DATA 0C0H ; 00H--2FH
DISPLAY1 DATA 8FH ; 14/16 10000 ONOFF XXXB 1/16 2 4 10 11 12 13 14 /16
DISPLAY2 DATA 87H ; 14/16 10000 ONOFF XXXB 1/16 2 4 10 11 12 13 14 /16
WRITEDATA DATA 40H ; COMMAND : 0100YYXXB
READKEY DATA 42H ;
readsw data 43h
;*********************************************************************
; DISPLAY RAM
; S1 S8 | S9 S16 | S17 S20
; LOW 00H HIGH | LOW 01H HIGH | 02H (LOW) G1
; LOW 03H | LOW 03H | 04H (LOW) G2
; ................. Gn
; LOW 2DH HIGH | LOW 2EH HIGH | 2FH (LOW) G16
; ********************************************************************
;KEY MATRIX
;KEY1 KEY4 KEY1 KEY4
; S1/KS1 S2/KS2
; ......................
; S11/KS11 S12/KS12
; B0 B1 B2 B3 B4 B5 B6 B7
;************************************************************************
;SEND OR RECEIVE DATA LOW IS FIRST
;************************************************************************
SEND_16311:;发送八位子程序
CLR VFD_STB;在此清了VFD——STB脚
MOV R7,#08H
CLR C
SENDLP:
CLR VFD_CLK
RRC A
MOV VFD_DATA,C
NOP
SETB VFD_CLK
NOP
DJNZ R7,SENDLP
SETB VFD_DATA; 很重要
RET
;----------------------------------------------------------------
;USED :A,R0,B
;A: DISPLAY DATA R0, DISPLAY ADDRESS
;
;VFD_BCD:
; RET
;------------------------------------------------------
rxdata:;接收八位
MOV R7,#08H
CLR C
CLR A
RECLP:
CLR VFD_CLK
RRC A
MOV C,VFD_DATA
MOV ACC.7,C
SETB VFD_CLK
NOP
DJNZ R7,RECLP
ret
;quequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequequ
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -