|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
利用74HC595显示多个数码管
* {- r$ W+ |' }6 Z$ K$ E$ r
, {3 Y; J6 W6 @9 F1 ?4 S) i! T' j
( J* m8 d. I; }, G, G2 T" ]#include <reg52.h>( P" C$ @$ b$ s& K! T" L2 q8 ?
#include <intrins.h>4 s/ h; F+ y& M' b: U g
#define uint unsigned int
# {6 \3 ^4 O' |" r#define uchar unsigned char
- U5 n" z6 f6 t' asbit ClOCK = P2^0; //HC595第11脚,串行时钟输入端" n* ~0 f/ n' a. N- K, `, | Z
sbit DATA = P2^1; //HC595第14脚,串行数据输入端# d! P' _ z4 C% R* q* M
sbit LATCH = P2^2; //HC595第12脚,输出锁存脉冲输入端
' d( F* e& g" P! }' i( i. B" f. D: m( o4 l
//定义共阴数码管段码0-93 y3 i2 q& U- [- R, ~+ O0 `# s
uchar code segment[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F};
! c) G e# Z& v/ I( d
5 b& o' e8 w+ n1 v0 h//串行输出一个字节) i7 _( f ^* z: e" w2 I
void HC595(uchar word)( P f1 a$ p: U# o; G$ [1 w
{" u: y# c6 I* J" q
uchar i;
. _% A" s# `) }" g for (i=8;i>0;i--)
s" A4 O2 F$ h. K0 Y {. @ I1 i1 ~3 m1 k& A8 t
ClOCK=0;3 j9 d) w& V) g
DATA=0x80&word;: D0 G) A3 b( ?1 E: z; T1 k8 }7 t
word=_crol_(word,1);' V. d8 t2 K1 M
ClOCK=1;
/ s- C+ K& [5 H7 W _nop_();
7 l+ V/ L E0 \# I+ j4 N8 R7 y2 H }& l$ |9 ]( q3 K# ?2 k0 P" y
}
! V( m7 L$ _# B' |! ^2 ?. k: K' ? W# ]0 n" G8 {3 v0 R& M/ Q
* J! W! M% L4 `& \ ]void display(uchar S1, uchar S2, uchar S3, uchar S4, uchar S5, uchar S6)
: q; f5 H4 d- L{
6 t, H3 w) D' Z. h* R4 Z' z; q5 C HC595(segment[S6]);# R* u; t2 q% q( s! W1 V
HC595(segment[S5]);
3 ~" g) B3 X+ Q* A8 S4 y" r HC595(segment[S4]);
. {# J, W( V% g0 w; t HC595(segment[S3]);/ m3 V) ]* y7 g1 G+ k/ ~4 |$ v8 |
HC595(segment[S2]);
6 [( x) ~# [2 Z! ~ HC595(segment[S1]);
0 ?; [* D% x. _9 Z( H LATCH=1;+ j- u: N; }7 m& A$ O( S( W! A
_nop_();
( d1 E, R; F) e LATCH=0;
! Z3 _' u; M8 S+ W4 R/ U7 v4 j}
( [) G& J) r0 P% W* tvoid main()8 Q% n! ^; |( [- @. P
{
% G! Q" |! x5 W, ~& A3 c+ z LATCH = 0;, {9 N7 N/ N% y
while(1)$ M; ?/ _) i. _7 v* H
display(2, 0, 1, 3, 1, 4);3 ~ Y& y) C% x+ T
}
% _- M4 ~9 G1 v2 S; C. W
4 r9 u- `( U o* Y. D4 o+ h
* l1 G# B) d2 E2 b7 [; T& e( H |
|