|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
利用74HC595显示多个数码管
/ {; e+ K+ R6 u, L) Q; |. d# G# T: q+ s* h y. ~ N _, ~1 m- f
1 x# w0 i; W5 n9 C- J$ l3 n& p# {
#include <reg52.h>4 b. ]* Z: ` P0 A- _
#include <intrins.h>
1 K/ ?+ H% Z4 s2 B#define uint unsigned int! n w. Z7 b1 r/ W
#define uchar unsigned char
& ?8 c8 z' a, u8 l2 g; @. O/ ?4 [sbit ClOCK = P2^0; //HC595第11脚,串行时钟输入端3 d$ V3 S! C2 d# P) M% L& V
sbit DATA = P2^1; //HC595第14脚,串行数据输入端9 q* n/ U& p& v) l: w
sbit LATCH = P2^2; //HC595第12脚,输出锁存脉冲输入端& J* ]9 a5 W1 ~) L- ^3 t# Y" w
$ z k, r& L7 y! l' ~8 O7 P//定义共阴数码管段码0-9* x# T0 G' }/ X" r. ]
uchar code segment[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F};
@- y. u% f- w( S. y* x/ b! j0 z4 r, I* Q$ h) C
//串行输出一个字节
+ a7 _: b I" H9 e$ xvoid HC595(uchar word), Y/ x3 o ^6 d
{! D! i4 c* C( K* r7 g0 ?; h
uchar i;' o. ~- k: n5 k3 Z( E1 h6 J
for (i=8;i>0;i--)! _2 d5 q1 j6 b1 i8 @ p& z
{
5 S6 }0 i2 |8 E: k a- o' c/ k ClOCK=0;
3 F, A8 O' w$ Y2 r DATA=0x80&word;& f% p' m2 L. ^/ F, E
word=_crol_(word,1);
+ k4 r$ B* e; T ClOCK=1;4 }, Y- F* N `1 a' ]
_nop_();
* `6 |* R' K' |3 O4 s" U7 n5 b }* i, Q+ M& {% m- R$ l) A% ^1 H
}
2 C% h$ U4 a7 q& K; o- l6 l4 y# L8 G) U# ~4 r
# f1 x% k0 S. Qvoid display(uchar S1, uchar S2, uchar S3, uchar S4, uchar S5, uchar S6)
' b2 r! N; B/ z! W" z/ s P{
- ~$ S/ K6 ?* [# u: c7 L/ _! R HC595(segment[S6]);
0 Z. `/ T- M0 r6 q( N HC595(segment[S5]);; j z8 f6 L4 g& \
HC595(segment[S4]);
- m# y/ E' J6 D1 A% _ HC595(segment[S3]);) K( @# b S. J8 j9 n
HC595(segment[S2]);2 C, u/ {8 o/ _) u3 ]; l
HC595(segment[S1]);
5 |. K* }/ X7 |: c, b LATCH=1;3 @9 L% r& I- l \/ \
_nop_();
4 U% @7 u$ l+ V" I LATCH=0;
% i8 H3 N3 n( Y; q}
- ]8 {" }6 v& o6 f2 Nvoid main()0 d/ C7 n2 n) S0 T' R3 m- D
{- U9 S% J* B7 ]5 z. U3 U) |
LATCH = 0;& ~# x7 e5 H6 x# a5 X1 q0 k
while(1)5 L, g9 K7 L" I, k: J+ G0 Z* y
display(2, 0, 1, 3, 1, 4);
: E6 U4 J2 L# z( v" k1 M* Y- j# a! z}6 m4 d0 [ j+ @: n
$ W, J5 m2 G9 ]6 z. d8 w
X) M+ h( m0 ^% Y/ V |
|