|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
基于51单片机的74HC164驱动六位数码管动态显示程序$ ?2 d! o+ I, r# N* l7 i! i) K
& L3 R+ A5 T) a z1 M
! |8 o- R. I4 `4 d( G#include<reg52.h>
( j; J1 V0 ~$ ~- I; i. ?" {#include<intrins.h>2 f' o6 m0 ]2 H, X1 x: @, }
% u" I0 Q$ V0 c: y+ f
#define uchar unsigned char$ g6 I& @. @$ e! O
#define uint unsigned int# }; a/ s# k' j5 s0 N
//74HC164
8 j& s8 k- L- F9 tsbit CLK=P1^0; // μíμçÆ½μ½¸ßμçÆ½±ßÑØ′¥·¢
8 w0 I* M0 G$ Tsbit MOSI=P1^1; // êy¾Yêäèë
! B; H7 d' C; C7 j4 }
# r% w" U j# K) x6 g( wunsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,* J; v1 \. d6 G1 G0 V6 t! o
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; //12òõêyÂë1ü
- G: X: N& S9 o0 |( nunsigned char DS_data[6];9 Q+ t% [9 `+ b$ P
/*****************************************************
) G0 |! r7 k. R: j* P7 t L$ _% D# P$ hoˉêy1|Äü:êyÂë1üé¨ÃèÑóê±×óoˉêy& p% z. n3 G0 X: t/ t
oˉêy1|Äü:Ñóê±1ms4 `2 r1 j. B: @% r" ]* l
- c$ t0 d, ^: ~% _- r6 R& n***************************************************/4 v6 b D: R7 o7 e/ X
void delay1ms()
" v8 c" f% L* y4 K4 A. [{+ ^) `" F2 n0 S* W
unsigned char i,j;
, l2 I; G P% C2 Z for(i=0;i<10;i++), u; _. k" M! t. }1 o
for(j=0;j<33;j++)0 ?* Q. y" q/ X" s2 j
;
5 u% k& J% Z( z6 o3 w}; b/ c+ |. ~& Y
void separatEDAta(unsigned long dat) // datÎa6λêy
" c* y6 D7 B- ?) k$ X9 y) Y& S{6 y f% P9 h9 }+ k6 |* i8 V" k
DS_data[0]=dat%10;
" Q8 N# g; Q) t$ T9 z- M DS_data[1]=dat/10%10;
% c8 W& p( m3 H+ d( L6 d4 X DS_data[2]=dat/100%10;1 o3 w. C( G [; J
DS_data[3]=dat/1000%10;' P' q$ Z( |) a5 d, R1 O0 r6 z$ i
DS_data[4]=dat/10000%10;
7 n6 U4 v; Z4 S- Q DS_data[5]=dat/100000%10;
# i1 o! a* L# X0 ?& D- H7 Z}$ X8 b5 _& N4 {3 P) _
void write_164(unsigned char dat)$ j) u; R( e! n2 Z
{! ?2 C2 A3 i" z
unsigned char i;
' S M6 {' G5 W3 H% x for(i=0;i<8;i++)
4 q+ h% v% X& O$ C( F% ]$ H { z- L' N' n- I+ C6 ^6 b
CLK=0;
$ }, J L q; r8 X if(dat&0x80) MOSI=1;8 [3 ~# ]" }- p5 b D0 T
else MOSI=0;
8 a4 Z2 |& Z8 {8 W7 H, Q, m CLK=1; 6 F# R% n4 l" c
dat<<=1;
) d; \4 z: _( p1 H5 {' E I }+ K* b3 q3 U& D; @1 ?
}- C9 j0 G- g2 v. T3 o. c
4 U5 h" y' Z6 h) G, m) c6 z; n! |void display()
6 L6 o! h% ?4 L2 B{
6 i/ l( D0 `7 u" q! V) U4 t; S- Y- Y unsigned char i;
! }6 e; b2 s% ~$ X# Y for(i=0;i<6;i++)
9 Y5 N5 u" j/ ?! C, U2 v {7 p! R" _7 W! s3 w; j
write_164(Tab[DS_data]);; k7 S, e) q" g( h- t4 q' g
P2=0x3f&(~(0x01<<i)); //êyÂë1üλ 12òõμíμçÆ½Ñ¡ÖDseg1¶Ôó|P2.5 seg6¶Ôó|P2.03 J+ m0 W1 R/ N# y8 {+ w; A# V9 ^5 w
delay1ms(); / @. `2 j/ h0 n. j+ ~2 E
P2=0xff; //êyÂë1üÃe5 Z! l p% L3 s" Z
}, [. M; {! F6 W/ |( g/ A6 T0 L d9 V
u) \" E8 @$ D7 `: }2 U' a: c8 q
}
0 t5 n7 j5 @6 v! t% u- Z; A; _5 R1 M' G: V: b e
main()
! N' F6 L. d4 k{
/ ?8 Q; Q! Z+ H9 t( O separateData(654321);
+ ]. ^# a8 B2 ]# [" g while(1)
) E3 H9 ^ G/ q7 L {
: X( k! g) p7 T6 {! o4 a display();9 |- P* M* N' Y+ c7 x2 I7 k
}
% P# G9 }8 N* c9 T' r}/ i( Z. E% }$ v; x
! W% ]# V) ^# ^# N; M, ~% B. {
( q3 W3 Z$ I9 R% U" {3 N; Y! V![]()
, U7 @$ v8 z: z0 x4 R; Y) ?! g( D% S9 u( k5 \3 T3 M
6 I3 M2 S/ }4 ~. h
#include<reg52.h>
6 }+ c" h9 M8 b% i5 F9 Q: O* o' Z0 j#include<intrins.h>
0 c# v N7 U' v4 |' d% E9 o* _
3 e+ b/ {9 o$ ^9 c a- x" k#define uchar unsigned char' o. q' i4 L- z, x
#define uint unsigned int1 \) _: A( Z$ ]/ v- Z) x) d4 {) k
//74HC164; `4 J' i9 V+ _' E
sbit CLK=P1^0; // 低电平到高电平边沿触发( ~7 I7 ^- r: ^( R# Y
sbit MOSI=P1^1; // 数据输入6 D' H# c' K9 P3 v' {* O8 ? |7 J
0 |0 K! p2 P) X) G5 T$ ^9 b
unsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
9 G6 M2 n: j; J0 h5 O 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; //共阴数码管
" D% q" O9 {& d; y3 K# [4 }unsigned char DS_data[6];
4 P6 u: i# G$ F/*****************************************************
) m8 c9 h. I: W) n$ r+ R# \函数功能:数码管扫描延时子函数
4 K2 G+ E( k. [3 |* Z, l函数功能:延时1ms* e4 N4 O" U5 n+ z+ ?- i3 q- b: \
: [3 R. { e' y
***************************************************/" ^2 x! V+ F5 x0 S4 a
void delay1ms()
$ u3 s, k) S. H{
/ }# G( K+ m5 r- B5 Q: \" J unsigned char i,j; 1 ?0 k% L0 R. n+ P. Q, ?' }9 G
for(i=0;i<10;i++)5 o' s0 H$ i& i; e
for(j=0;j<33;j++)
) J5 t, K! b! I* Q# a ; 0 n% ]5 t1 F% `5 b
}
0 g7 H) V6 _8 Q7 o$ C4 v6 Y9 nvoid separateData(unsigned long dat) // dat为6位数
& @+ U; w: j7 D" u6 x9 S( W7 D{
0 ^& }/ d( e( Y5 S3 `, R9 X DS_data[0]=dat%10;1 |. A' q/ U4 Y2 i
DS_data[1]=dat/10%10;; D: `' M& ?' P- K( R/ @+ T
DS_data[2]=dat/100%10;
3 n' b& h1 P! B4 m$ U9 W- |; ~ DS_data[3]=dat/1000%10;, P2 i+ f6 p9 o8 H: }
DS_data[4]=dat/10000%10;8 ]$ i+ C; w7 |
DS_data[5]=dat/100000%10;
7 M6 e4 r N; }5 P- w8 n3 W6 Q/ K}7 A2 I) {4 w$ m5 l; m P
void write_164(unsigned char dat)
- u3 g; W& }! V2 Z4 @6 O2 k2 j{
. [$ `0 Y6 }' H& [* k unsigned char i;& }2 z+ x4 A" |6 H3 R
for(i=0;i<8;i++)
' A9 S1 k5 B- i {& F2 O& }: {, Q( S
CLK=0;
! ^) H% I4 n w. u! i6 F% D# g. E if(dat&0x80) MOSI=1;# `0 I+ W" v5 w
else MOSI=0;
% r7 G$ n) t5 ], ?# f$ p* ` CLK=1; 0 _! q" B, x2 H" W1 q
dat<<=1;
& B$ ?, e. @9 f2 _9 U& e }! i% V3 w7 v: |1 H! ^. i, {% r
}4 K1 c9 k( }- m4 L. M% X& A r& k
& U& y+ W6 F. avoid display()
9 N7 W3 O' w' e& z{
/ M1 j$ s$ T1 Q unsigned char i;
1 l5 V9 u, i- L1 ? for(i=0;i<6;i++)0 Z" l6 n1 G6 |5 j3 m
{
# N3 I1 X/ `$ N. }/ c write_164(Tab[DS_data]);
' `& J1 y" P1 K! f3 R1 ~% Z+ b P2=0x3f&(~(0x01<<i)); //数码管位 共阴低电平选中seg1对应P2.5 seg6对应P2.0' d0 V0 {7 s! c% s1 o4 {
delay1ms(); 7 N9 d, Y& u. X- U* {* j6 j- z( a
P2=0xff; //数码管灭
# [) V {0 f/ z! x }
2 D" s0 |8 X7 o* D3 A7 P; s6 ^$ ?. J. @2 D7 O' H3 s8 P6 m
}
/ a" R# I* d3 ^" M3 p6 F6 |1 E! @/ x' }7 b
main()
+ a% u% {* X" I8 Q{
# b3 r2 L, \ W( a7 P separateData(654321);4 {4 }$ e2 ]1 w+ ~) t( M; J
while(1)
2 @; F6 ^$ P2 V% m$ ? {: G. h+ g; c- I5 ?
display();
5 b( }- d/ |6 J. l8 _ }6 u8 _: |3 W% b9 N' I T
}
/ n" _( d0 j; W
/ O1 v9 O+ C$ \1 D! @ [5 J3 U% P [- |) ]3 r
下载:- p) p l- U! J5 f3 p
. ^6 ~. v) R% ~! ~6 _
|
|