VFD控制驱动器
;占用: ACC, R0, R1
;************ 公共变量定义 ****************
PUBLIC WVFD_6311
PUBLIC GETKEY_6311
PUBLIC SETUP_6311
PUBLIC DIM_VFD
PUBLIC CLEAR_VFD
PUBLIC WLED_6311
;************ 公共变量定义 ***************
; EXTRN BIT(B_CLOSE_MACH) ;现键值寄存
;************* 变量说明 ******************
BC_DIN_6311 BIT P2.4 ;数据输入脚
BC_DOUT_6311 BIT P2.5 ;数据输出脚
BC_CLK_6311 BIT P2.6 ;时钟
BC_STB_6311 BIT P2.3 ;使能脚
;************ 变量说明 *****************
;************** 常数定义 ******************
;************** 常数定义 ******************
PT6311KEY_NUM EQU 16D ;现在用的6311键总数(48个)
READ_6311KEY EQU 42H ;PT6311读键值命令符
;===========公共子程序 (可被C调用)==================
;************* 写6311显示内存 **************
;********************************************
;参数1: PAR 要写的显存地址(MSB: 1 1 B5,B4,B3,B2,B1,B0 :LSB)(B5-B0 MEM START ADDRESS)
;参数2: PAR+03H 写的高1位数据
;参数3: PAR+02H 写的中8位数据
;参数4: PAR+01H 写的低8位数据(先送出, 且从bit0位开始)
;返回:
;占用: ACC
WVFD_6311: ;发送数据到PT6311进行显示
CLR BC_STB_6311 ;pt6311 stb=0 (ENABLE)
MOV A,#40H ;data set command--write data to disp mem by increment address mod
LCALL DISP ;sendn data to pt6311 here is data set command
SETB BC_STB_6311 ;STD=1 (DISABLE)
NOP
CLR BC_STB_6311 ;PT6311 ENABLE
MOV A, PAR ;pt6311 disp mem start mem in 1DH
LCALL DISP ;send data to pt6311 here is address set command
; JB B_CLOSE_MACH,CLEAR_LBL1
MOV A, PAR+02H
LCALL DISP ;send data to pt6311 here is transmission data
MOV A, PAR+01H
LCALL DISP ;send data to pt6311 here is transmission data
SETB BC_STB_6311 ;PT6311 DISABLE
RET
CLEAR_LBL1:
MOV A, #00H
LCALL DISP ;send data to pt6311 here is transmission data
MOV A, #00H
LCALL DISP ;send data to pt6311 here is transmission data
SETB BC_STB_6311 ;PT6311 DISABLE
RET
;******** 读键盘按键子程序 ************
;***************************************
;参数:
;返回: PAR 返回键值, 0=无按键
;占用: ACC
GETKEY_6311:
SETB BC_STB_6311 ;STB
SETB BC_DOUT_6311 ;pt6311 Dout
SETB BC_DIN_6311 ;pt6311 Din
NOP
CLR BC_STB_6311 ;pt6311 STB
MOV A, #READ_6311KEY
LCALL DISP ;向pt6311发送读键值命令
MOV PAR, #PT6311KEY_NUM
NOP
LBL_P8:
CLR BC_CLK_6311 ;Pt6311 CLK
NOP
NOP
NOP
NOP
MOV C,BC_DOUT_6311 ;pt6311 Dout
JC LBL_P9
NOP
SETB BC_CLK_6311 ;Pt6311 CLK
NOP
DJNZ PAR, LBL_P8 ;PAR表示键位置
LJMP LBL_P99
LBL_P9:
NOP
LBL_P99:
SETB BC_STB_6311 ;pt6311 STB
RET
;*****************************************
;参数:
;返回:
;占用: ACC
SETUP_6311:
CLR BC_STB_6311 ;ready to send data to pt6311 STB
MOV A,#0CH ;0000,1010=0AH
LCALL DISP ;send command to pt6311,here is set displayer mod,11dig/17seg
SETB BC_STB_6311 ;STD
RET
;********** 打开荧光显示 **************
;参数:
;返回:
;占用: ACC
DIM_VFD: CLR BC_STB_6311 ;STD=0 点亮显示字符
NOP
MOV A,#8FH
LCALL DISP ;send data to pt6311,here is control disp dimming
NOP
SETB BC_STB_6311 ;STD=1
RET
;********** 清除11段数据显示(清荧光屏) ********
;参数:
;返回:
;占用: ACC, R1
CLEAR_VFD:
MOV R1,#0EH ;清除14段数据显示
MOV PAR, #0C0H ;置显存第1段的地址
LBL200:
MOV PAR+01H, #00H ;置低8位数据
MOV PAR+02H, #00H ;置中8位数据
LCALL WVFD_6311 ;送入pt6311显存
MOV A, PAR
ADD A, #03H
MOV PAR, A ;start address move to next digit 下一个
DJNZ R1,LBL200
RET
;********** 送数据到6311的LED口 *********
;参数: PAR 要送入的数据
;返回:
;占用: ACC
WLED_6311:
CLR BC_STB_6311 ;pt6311 stb=0 (ENABLE)
MOV A,#41H ;data set command--write data to LED PORT
LCALL DISP ;sendn data to pt6311 here is data set command
MOV A, PAR ;pt6311 LED DATA
LCALL DISP ;send data to pt6311 here is address set command
SETB BC_STB_6311 ;PT6311 DISABLE
RET
;************** 写一字节到6311 ************
;参数: ACC 要写入的数据(从bit0位开始送出)
;返回:
;占用: ACC, R0
DISP: MOV R0,#008H ;send command to pt6311
CLR C
LBL206: CLR BC_CLK_6311 ;PT6311 CLK
RRC A
MOV BC_DIN_6311,C ;send data to pt6311
NOP
NOP
NOP
NOP
NOP
SETB BC_CLK_6311 ;CLK
NOP
NOP
NOP
NOP
DJNZ R0, LBL206
SETB BC_DIN_6311
SETB BC_CLK_6311 ;BC_CLK_6311 normal high
RET
上一篇:单片机遥控控制的霓虹灯程序
下一篇:单片机软件陷阱介绍
- 热门资源推荐
- 热门放大器推荐