|
发表于 2008-8-21 15:59:55
|
显示全部楼层
ht16512及VFD驱动
( w$ q# q8 E+ kVFD驱动要点:
+ P) p- y8 D" k2 a3 Z/ r X* x- c4 T" H( Q; [
1, 以灯丝电压为参考点,当阳极和栅极电压都为正时,相应点亮,当其中一极相对灯丝电压为0或负时,相应点暗,为消除侧漏光和保证可靠截止,推荐为相对副压。
/ C) A* B0 M, F6 ~# m& \ J1 E( U9 ^7 \7 R6 t9 q
2, 静态显示,栅极固定接正(一般只有一个栅极),通过控制阳极电压来显示,动态显示时,分时扫描各个栅极,同时在栅极为高时来控制其相应的阳极来显示。通过调节栅极脉宽来调节亮度,为了防止由于余辉效应使相邻的栅极间交替时的虚亮,栅极扫描脉冲的位与之间要留有10~20μs的消隐时间。2 E2 S4 ^$ a' I1 h% H7 v
7 t9 w4 H8 N7 w1 `% r- b2 U6 x- F- v, s; q% C% _! a
3, 标准驱动电路;上图为静态,下图为动态。
m& \! ?8 B* i$ @* ^7 o7 I7 q" c& z# \- w5 ~8 g+ X: S, t3 C0 b. Y" A
8 Q8 a$ }" p& |) B8 `
; j+ S0 v3 o/ M2 I
. e" m- Q/ B4 A! h# w
' v, e6 @. C# k% I; S
7 _$ d- e, ~ h! t r( u! ]( a7 ]$ q
+ ]' z& Q: K8 [2 O1 W. Y4, HT16512介绍' B6 T) h+ E' ^, C' T9 @ U
- ~9 T" v( w% F$ ]3 b
# C( ?) V" ^1 Q% C* I HT16512芯片是用来驱动4位(控制真空管的栅极)到11位的VFD(或FIP)显示的驱动控制芯片。它功能齐全,易于与微控制器接口,通过三线串行方式接收串行输入数据,它的初始化设定,需要驱动的位,段数,和显示的占空比后,向显示RAM区写数据就可以显示了。同时有键盘扫描和4led驱动,4IO输入的功能。
0 ]# e' V4 R& |: |2 W
# v+ y; f3 ^' |! M! [
% ]/ i0 M4 ]; S" A7 u5 l1 L9 n2 _& `0 J6 d8 y' g& u
5 x; t+ f% c! ^ ;*********************************************3 B, Q( ^6 e( h( V
: o9 d" K4 \2 H+ A" ^! m* ^+ s+ D: S ]- z$ ~* T8 X @ e+ A
;引脚定义- c* c+ i! p3 d5 K! ~5 g2 n
2 y: R0 m; J; a1 h; C$ ^# b, J% h* D0 e
;*********************************************+ r4 W. e$ r# Q1 U* @$ a3 F
+ V. X N' ~( M4 z% @9 }& R" \5 J0 f! g& r" P+ G7 T
vfd_cs equ pa.6 ' k0 H9 D o' q2 F0 _* t
p0 q# V# M6 [: x/ H% b( o1 B/ ]$ C4 n4 l7 z w# @* [" y/ V
( I: i" c5 o3 k# G2 p$ H& V8 ^vfd_cs_control equ pac.6 4 l$ U; d; N4 K' J4 l1 J' |$ {
) x1 w9 y( v7 \; j& w7 b) ^, M" i/ {- [& Z
5 D: H0 P( V/ \% Pvfd_clk equ pa.5 4 O# A( o% V% n. s, R7 M U& J! t5 J# }& w
1 H1 C6 X9 x0 i6 E* R8 s; j- Y8 F
vfd_clk_control equ pac.5 5 \' a% P0 V) Y5 Z9 X" C( p1 a: g- ^0 n2 d# O/ Z( R
' I- I) i7 z. Z7 Z7 A0 n5 S' `vfd_din equ pa.4
4 e& m9 L/ q4 ^: I8 O" X3 @' U4 ?. P
vfd_din_control equ pac.4
& }# [* C9 k- C5 C. H: S1 Z: b' K" w- `5 P3 ~ e) k& {% N$ {( z1 f( s# _- g; t- p
vfd_dout equ pa.4
- p$ k/ b4 ]" a4 [! S, v4 b% O0 Q+ W. E9 W5 ?. A7 v* `* s* u& f' l2 S: h
vfd_dout_control equ pac.4# J$ y* F2 R8 ]' |
9 |/ y1 d. v& P* y6 ^& M* I
# V" E3 V# t/ ~( G0 Q;*********************************************% C% ~/ o+ B d
* Z0 g. j" x9 B0 ^7 T. y& O# a* V8 w/ o: I8 E# y7 i$ B; k* @6 ?+ F$ X) A( _5 a7 Y
;初始化HT16512) x- U M6 d; u% A8 x, j u
( R8 i2 L) d% c8 J/ M* v) @
1 R. `; ~8 E: K# [;*********************************************
( {+ Z4 Y# J8 z2 [5 ]8 o
# G; n1 [1 ?+ ~+ [ N; S' Z: t! vini_vfd:* b+ Q, \9 a" w( J0 M9 x, ^
% S$ w! w' `- _$ V. o. R8 j6 m( `7 K% o6 Q9 P
clr vfd_cs_control* j) S6 V; Y" [; s' A5 y: T( Y( E7 C
. Z1 N ^ \- _0 G0 z/ \8 u/ |: L4 ^set vfd_cs$ S5 i8 _8 i' r& @3 g
7 u9 U5 S+ i" p+ h7 q$ k5 v+ y3 q9 M" e
nop
* R$ T! G, Z5 C/ x9 [9 n( ^
" l5 d, |$ X" q; ~; C5 Iclr vfd_cs
' S& y" m: [0 ]
& l) @( @2 D8 O, zmov a,00000111b ;显示模式设置命令字:11位/11段% ]2 H X1 r2 c# e$ M7 ]9 s6 W& i
6 r4 e0 S! U( f' E
mov data_buffer1,a6 K: A8 ?5 h+ S7 Y
$ s) x: e8 q( A H' f' s( b2 \! {0 c8 o8 P) X
call data_out
0 T, z7 I1 x& f# U1 {$ S, J: u2 k1 v. k) I. w( r F% v7 g; ?1 _: b6 Q1 j, a ^) j
set vfd_cs1 X# h, ?* l( Y$ Z T
: \* b, U1 b2 q# X9 y: v" d$ N$ B! I& T$ P
nop! ?: q5 j& s* q8 B( f1 l+ F0 I& h+ U/ D( N k& r" ?
% a( _( o' q: F/ |+ |$ [( O3 Q y
4 W! B, R. Q! j7 E* ~' ]0 \ret# Z5 u1 t! M4 r6 H4 t- L8 T) v* ]0 |" E
3 g+ S8 x) }( H' ~0 n; J
; k$ | _1 b' N1 M" j;*********************************************2 h% w* R6 P8 d7 b5 q- Z
4 [* M" {. J5 v2 V$ z( y+ _( j# V0 D ^0 A% B$ h: t& C8 t8 w/ ?$ X- z6 U/ T4 E, Y- A1 V
;写显示数据到HT16512( N9 v4 H: G# v+ H9 N9 T0 F% G) m& a4 ?: u2 v4 {: e
, X8 _5 x; C; ?6 A! `
4 ~& T; h }0 e) \9 G3 Z;*********************************************; e) P" v. c. `) w8 t% g
) j& V3 L3 x- m
7 L' H; _$ F+ X; G+ N6 E2 S' Twr_vfd:6 h3 p- `& a1 T. V+ D0 H8 r* `8 g/ v- o* I. r- z2 y- C
6 U7 B X, i1 ^2 v& J q. Hclr vfd_cs_control
6 K( {. p U9 |/ r* h
7 d- U6 g# t4 S: sclr vfd_cs 0 [4 {: ]* m4 O' z
. O) k4 ]) Z8 Qmov a,01000000b ;数据设置命令字:正常工作/地址加1方式/写显示数据# O# {, w- D$ G& R c0 N
3 D& i8 N% c$ l z5 L1 K" _& O; U c% Z( G4 }- g- ^4 x
mov data_buffer1,a% C! ]+ F/ W1 U! b
# z0 m& A" _( x) I& M+ s. s& f
- ^5 k( |6 [6 V4 \8 B3 Tcall data_out6 i6 i2 L* [0 Q2 ?' G7 R) |% Q3 c d( u8 V
F( \" t2 J6 Q: r8 Y: q6 B- s6 F$ I! q4 B. A
set vfd_cs( l( Y# K1 \; I& n
! J& s) r, e' `' F" c* R* C) y* t, Y0 r- j) `& O, |+ K+ F, w! }/ O: X
nop
: K A& q3 \4 I; i4 [; f
# F3 {, t, J) a& e7 iclr vfd_cs
. p c L3 v2 b. I* n# }; N; e1 ~9 U. f/ x
mov a,11000000b ;地址设置命令字:从地址0开始
3 m8 x, y/ e% M# R+ i( g3 O, t0 k# G( b5 e4 v$ G2 [6 ~( H* t c$ O
mov data_buffer1,a, z+ Y: Q6 @2 t
9 b9 z' O, ^* A5 {! R. j: b
' }! R" @! }; I- S9 e8 U0 v F( scall data_out; [9 l' L5 L% c! P' s3 K+ w! H5 a/ B# ^2 u0 H# g5 q& J
. L9 N5 R% h% c; h' g5 N
! W# L: }, z- Wmov a,22
- E% v, ]: X, K$ }9 ?8 n8 ^. j. g. m
# z9 ]# M& W: T: K9 Zmov temp1,a
3 Z. R5 o0 r% R- t W( F2 d: G: h
% D$ q: ~ }9 Kmov a,50h ;显示数据放在控制单片机RAM50H~65H2 A6 X: Z8 Q! J. j& f7 V w3 u: }
4 p! e: i$ ^: V$ ~; }% x6 J- a
- A5 T8 `1 [. D0 N% ` dmov mp,a R# ~: E6 x( V2 k' U3 @& O( U7 l. ^3 e, M- l$ H1 Z/ C
7 M, m0 A, q) _: d9 k& _" P1 _+ X0 s( }
wr_vfd_loop: ~& C; _. F6 |- I1 \0 e& Y
2 M4 a9 }! Z# Z7 E' u5 u4 p
E) U0 W4 ]% |& y# \mov a,iar9 f8 x- {; n6 G6 R5 L e! ~- p q7 i' b H5 u
8 e/ j6 i* W% Z0 T/ p- s- F' H& F( q- _8 t1 B: ^( R$ [+ ]
mov data_buffer1,a; {$ q N2 d u9 ^" C9 k( L% h1 ^
$ X$ b, M2 Q8 w8 A+ b" B. y
call data_out* Q% Y1 i* V6 c8 ]/ y: |+ p
# c! }. Y: {0 S* j# C6 k5 @# y0 |0 j+ R3 {, S
inc mp' f0 |. w* h# Z) j
1 v* {7 j ~7 b+ ?+ M1 B
sdz temp1& k# h7 U- `$ ]4 E {' ?
9 f: @% A' N1 H' y& M9 V3 R9 ]# I* o; [
9 i# j$ g, t# C! `$ {5 _jmp wr_vfd_loop
7 O% c) E, }1 n& e' _* B8 Y2 x! p) p. {8 k8 x7 K' j" e @
set vfd_cs$ T* I; x4 @( V6 `, O
; @& ]: z( X4 N; F" {6 r) ]- p4 C: N' v# h; G
4 D/ u# \ h8 E' w0 C; enop6 C$ e% `4 @7 }8 J) P
* I+ A' v$ l$ Q# A y: _( ]3 G/ ?' @4 m) X* a- y+ s+ {! l ]& c$ g; I7 _
clr vfd_cs( [7 X3 n( [3 K0 e( r
9 Z$ ]9 F# Q) t$ [3 G1 r0 O7 u9 l1 J& @/ F
mov a,10001111b ;显示控制命令字:显示开/脉冲宽度14/162 x2 L s; L# j8 L
4 g" v2 v% R+ z4 |! X" B
7 n% `/ {$ g8 F9 I2 b. {( jmov data_buffer1,a/ Y' M; S& z- B
1 V- i5 H( x1 {' V! d1 q5 B6 H) I& Y( f+ S! @: }$ O5 O/ [
call data_out @3 t% N! M9 x d' }5 c& x
6 n3 x6 k7 n3 @' X- ~1 j
8 n: U' C% Q, H n$ s/ \5 i% o3 ~/ }set vfd_cs8 V# g3 C( R# Q; W$ s& W
5 Y5 A/ Y2 q& j6 S5 v
0 K$ k, ?$ W- H+ j% ~; \1 [' G# xnop' s5 H2 s% Q* a- n6 H4 G; K3 A6 z+ j! e1 X! I3 w
$ n' _* E" e0 d2 q5 ?$ Y* o& D# T: y2 o
ret* Z8 x, ~2 t0 h; I# ^' ?$ Y1 W1 W
+ L. Y( J6 p* T4 v9 j1 U3 A4 J. |, u' D9 S7 k; |/ i& J6 \
;*********************************************
6 N9 I7 J- u9 `7 ~! w" s5 J# a; T3 d% _+ Y1 n* N- Q4 M& `# B+ g0 K$ |8 C; X! f+ n( @$ h
;读HT16512键盘数据9 ~* W z. K9 k5 F& w8 m. d7 |% C+ b& i9 `9 c+ Q0 k
% I. L5 t' A1 N+ g) ~# N! E P. E! R& a( C0 a
;********************************************* 8 X; c8 t; w& |# w1 [
4 [0 L. w" d8 x9 g- |4 \( g( }0 ~+ Q% S3 r- [0 @* E$ y0 [) o
7 J! D2 X |: w/ {+ [: U* rrd_key: T' N( V8 ^' I/ L5 G
9 v, i; Y" `: H! C7 }+ N
1 m4 `1 g% m9 mclr vfd_cs_control+ t0 j* V( d2 w9 n! g0 I2 p: V) w" c
/ a: H' C, p; l% @) Z6 u* Gclr vfd_cs2 Y* q. ]# ]: k" T5 g3 i4 o3 [1 q& X0 C
: ^+ Q& M% _9 M' L6 A% X2 y. o' p6 i+ M
mov a,01000000b ;数据设置命令字:正常工作/固定地址/读键盘6 y5 L1 D5 C. O- w# ~4 c* e7 v6 f4 ~* v6 F# @) C, e
/ t- c8 k3 W$ l# O
8 _- i; F9 A/ e7 J. nmov data_buffer1,a5 G$ q) w# ]: E, E& L+ {, J% r; m
/ y3 B) e- v" I f1 Q( ~* `. j+ s$ ]( q" _
call data_out ; `4 M: p! s* Y) H. I
3 h3 T" k. h- S
- `! w+ j; d* f1 y" z4 y8 } O. z. Ocall data_in
. k- u6 u4 Z: a5 w1 X6 g* F: |8 |" u2 }. H) A* E3 W
. }8 c3 D1 T9 f% E. g8 Omov key_buffer1,a ;键值数据存储器的第一个字节给key_buffer19 [9 s4 G. x! F# W! x; t
; u f7 Z' E: B4 e' J
call data_in
6 ~8 M: V6 f8 M: V Z" ?# `+ Y3 I' N6 Y5 [8 h( X' n% s% v* I& {/ N! l
mov key_buffer2,a ;键值数据存储器的第二个字节给key_buffer2% @& i, ?4 x) O* m. q# s5 g) T8 ^0 f
% @- [; o W, {' N( M J
call data_in( J7 [, @ e) f8 ]6 h8 ~( ^6 {/ R, u4 R3 l1 g
4 q4 h! @6 y/ L
5 L3 V& s/ i, v9 s mov key_buffer3,a ;键值数据存储器的第三个字节给key_buffer3& `: ^3 \ v; K& J
% u8 o3 g: k1 v0 M! K set vfd_cs
@3 I8 ~+ d! O/ {! N! r3 U
3 _ A1 g! }2 D7 C0 _4 y ret. J: {+ C- N0 {! Q+ k+ n8 N
; v# h: Q$ Q1 \, h' K1 `5 |/ l6 T: m% H
;*********************************************
) d* Q7 L5 U! S. G; o) @
5 v& d# R" `! X5 `! L k;数据输出
' F/ |5 E7 A* A9 R+ C8 ~3 C$ d$ j/ V, z) J2 L9 Q
;*********************************************
7 K# {! W: x, X2 r+ ?6 p' I4 v% V0 D! R8 p" E# L4 c: J. F6 m. x
data_out:
6 L$ N" @4 l o. W8 m; l% C1 @9 N5 ?8 `" k) {4 b1 z( W, T/ x7 _# Z* _
clr vfd_clk_control8 l3 o* {3 M0 Z8 ]- `+ W: B+ I0 [9 U# @; y( P, m+ g/ V3 l' m
4 P) T* q/ N0 c% a4 e1 Z1 X% M clr vfd_dout_control0 n/ {' _" @/ S- |8 g3 L& j
4 Z3 w4 E) v4 b4 E5 [# Y6 B
$ I" ^0 L* ]) K! d9 Y( z) ]! E set vfd_dout# D7 w' l, g- ~6 F
, T* V4 ]6 s9 C& q
4 G5 E4 M+ l6 c8 k2 E mov a,8 ;传送一个字节9 p0 [2 L3 {2 o8 C- X
! [" e8 y0 A9 h; D' v) W( |9 u9 H0 T2 i, r T* J
]( e. Z/ o8 r, h. u2 udata_out_loop:5 i! I' c6 w4 @' @' D. |
2 d% ?0 b& S3 Q$ Z
5 {# A' o) Y6 }. C) [ clr vfd_clk/ |" w; W6 n' J5 g; p7 I: t1 \( ^
' u( [2 c# T/ y% v9 D
rrc data_buffer1& ~8 P9 _- _6 l. b+ W) M6 H. Y$ r
! D4 T/ X) y% I! t) L0 ~
) e& p2 q& e# Y6 y4 k snz c+ L# N/ v: D, z3 ~# n
! g+ n4 F$ |' l( B4 i0 [ |
|