|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
基于51单片机的74HC164驱动六位数码管动态显示程序
- D0 n" s c" x' V8 b
+ f5 g; `$ i4 N
( {: a0 R. w" Z* J l. H) P6 R#include<reg52.h>
! o" X; ]" ]6 R9 a ^4 z9 s#include<intrins.h>2 ?$ P' S3 z% q& D- l
0 b- j- D( o- r% j#define uchar unsigned char
& @5 S- e3 d) D0 o#define uint unsigned int2 a0 K7 P1 c) Z: {9 Y1 Y/ D
//74HC164
% I1 }# ~( }; Osbit CLK=P1^0; // μíμçÆ½μ½¸ßμçÆ½±ßÑØ′¥·¢
1 j, O3 I) K. \1 p2 {, R+ U3 msbit MOSI=P1^1; // êy¾Yêäèë1 D( l- |0 O8 t/ w
8 [1 Z6 D y. Q2 {2 b i# q9 r; Yunsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,; c0 Z# D( C" s2 t3 J
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; //12òõêyÂë1ü. R' ` ^! K$ M- h3 j) T: W# c" a
unsigned char DS_data[6];
$ e/ e% m' |; _2 s) C' i/*****************************************************
) }3 J, r4 j% u8 T* }8 a% n$ boˉêy1|Äü:êyÂë1üé¨ÃèÑóê±×óoˉêy+ a( J4 r$ |+ u! K3 D
oˉêy1|Äü:Ñóê±1ms% ?$ }7 e6 w: S! l% ]4 [! |( `. K
& g; w g8 b" h, \: Y0 k***************************************************/
$ ~7 ^, o6 a3 B. |' R3 mvoid delay1ms()
A2 m5 T% }0 G{1 | L; q: |$ ^8 S, g0 E& N! |
unsigned char i,j;
" t" U6 [+ W' z+ e+ T% e8 f. Y! _: y% T for(i=0;i<10;i++)
% D4 _8 W, D x/ F K5 T r. l for(j=0;j<33;j++)0 L2 l5 C8 B/ D5 t4 W- {; J
; 9 @4 O1 K$ j7 K7 k3 h5 v- M' R; U9 C. T
}
# I( n- p3 j7 S, r5 |. u, }void separatEDAta(unsigned long dat) // datÎa6λêy
& W' W) m3 {& Q4 J/ L{+ U/ O. d, ?0 S7 T
DS_data[0]=dat%10;% _8 r8 H6 i, v1 x3 p% C
DS_data[1]=dat/10%10;
% K$ B- [! T. A6 u0 j9 q DS_data[2]=dat/100%10;
7 Z7 p8 T5 F% z DS_data[3]=dat/1000%10;
, b+ D, K% ~2 ^% H9 z3 |: U DS_data[4]=dat/10000%10;5 W/ I% ~3 m" P/ \" A) ^! o0 v
DS_data[5]=dat/100000%10;6 \4 e- h+ V% v; t+ B
}2 v3 s8 j& a8 I, S" V, m2 Y b
void write_164(unsigned char dat)
, j( j4 w6 B- z{: N2 s& z* ?" v
unsigned char i;0 h. y' Q, Y; J3 T2 ]: Y
for(i=0;i<8;i++)/ Z4 Y/ s& S/ Q5 A# @1 A
{
1 K2 [8 k& y, y CLK=0;
1 P) i' a( \7 z0 T if(dat&0x80) MOSI=1;
9 d: F, v9 _ J/ K% T else MOSI=0;
- H3 m0 h+ @' O5 a4 v M CLK=1; 9 } ^( s: B0 e. J6 U
dat<<=1;
" @( S+ ^5 S7 K6 A9 @8 `. T; W2 i& e }7 r$ l( S4 [$ v" _+ m& w, X7 Z# \- z
}, l- Y: r) a/ L) }
6 i! n) \' W6 ?* `, j/ ]
void display()' | t- f2 s* q8 G
{
1 F2 r) s9 t: T+ s( i# l unsigned char i;. Z; | n% c* `7 d7 \5 B" I
for(i=0;i<6;i++)2 `1 w% h' ~1 O4 v# ?, \- d
{1 R5 X1 d( O6 _- y8 V7 w
write_164(Tab[DS_data]);
# R! [0 r( Z$ g, k% S; q9 E5 v9 g @ P2=0x3f&(~(0x01<<i)); //êyÂë1üλ 12òõμíμçÆ½Ñ¡ÖDseg1¶Ôó|P2.5 seg6¶Ôó|P2.0$ T8 d; s. ]5 P; T3 z
delay1ms(); ; n5 i0 g$ M0 c/ |
P2=0xff; //êyÂë1üÃe
2 {0 j! ~1 l* R! U& X& F; U4 T }( r0 n' @7 W# R1 j2 |
( [" @. N) [7 K4 a
}
7 J7 ^3 k( L; ?" f; t+ ]
$ `4 b' p) T0 W* ^main(), I; i; C+ J9 J$ o1 ~) B
{
8 c% V# {, ~7 Y; A' N% `% u separateData(654321);; e1 K, v8 n% s, N3 z7 K4 v/ X
while(1) 5 k! k/ f& H6 |! U
{! e3 u: K* K( |+ Q+ q/ @( K
display();
- o& G! k( C8 L/ z1 L2 I }1 |1 q6 G$ Q# B0 A# G
}
2 Y" t! D' ]) a' C; [8 b/ W
R/ J, s$ K8 Q& R6 T* t1 M) @# j2 K0 O) I% v3 B% Z5 ^
![]()
3 q; I F; ?" o, e
) Q7 s9 v3 O/ v }$ m5 P
X2 h, z9 }; c4 n4 |& J6 j#include<reg52.h>- Q: c7 l4 E: S! r. o+ a
#include<intrins.h>
6 }# l" j2 M! B0 A+ ]: ^! ~8 o: |' t5 N3 u/ D( g* I% ?
#define uchar unsigned char. E" Z% P- x; Q% Z
#define uint unsigned int3 Y% a3 q' L8 g$ p3 |. V) i$ T
//74HC164
|$ S: }4 S0 S6 S7 R U b* y% zsbit CLK=P1^0; // 低电平到高电平边沿触发$ X' c. E7 | A0 [, `
sbit MOSI=P1^1; // 数据输入% z5 C* t8 b* L, Q; F
. m0 N: k9 M6 s7 Z( z" T
unsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,+ ~3 z: @# F" w7 O
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; //共阴数码管/ a& y) G* p& w1 a
unsigned char DS_data[6];0 ]( g9 Z v, N2 e9 V
/*****************************************************
$ I: y" j; j, @6 x i函数功能:数码管扫描延时子函数
, G" ~: _) E/ q$ e( `函数功能:延时1ms
R& n6 l8 L7 Y4 u; ~9 H# p, V, O. h& p8 S) n
***************************************************/7 p/ a7 b, E, w: w6 u
void delay1ms()
+ R4 N4 Z/ w. T5 [. P" A) r{
; S2 r B6 e' f- X1 Q unsigned char i,j;
; A# i* r2 z9 z0 E6 t for(i=0;i<10;i++), s% w" k) X. U
for(j=0;j<33;j++)
" g5 W, h8 g* q$ Z9 } ;
+ A& @0 H Q. D}
2 W+ v8 q: e9 ]2 U; Y* j+ Xvoid separateData(unsigned long dat) // dat为6位数
' Q- A$ K/ V: l1 v. ]8 E{
4 B: y7 q9 M+ q# U% ?* {* k. _7 T3 b DS_data[0]=dat%10;
4 {, {4 s* Q' e- B# W+ j DS_data[1]=dat/10%10;7 U. u1 E' _% \: K) V
DS_data[2]=dat/100%10;8 W" J* P2 ?0 _- r
DS_data[3]=dat/1000%10;6 S; W$ P; \$ m' r' d2 T% r* {) D2 \
DS_data[4]=dat/10000%10;" H4 D( Z' P' F/ Q8 T3 a
DS_data[5]=dat/100000%10;
6 Y) M% A- j' D: I( ^+ a& o. i' A}
. p. f+ [! u9 s0 Nvoid write_164(unsigned char dat)
8 N- h/ D B7 M% S. U1 `" Y{) L' j2 ^! ]$ U5 P: g, h. C' `
unsigned char i;
4 T9 [% O. j0 T) R" y0 F r for(i=0;i<8;i++)4 a% ~ s& a( d5 Z$ X
{
; b% p" i+ j t CLK=0; ; D- U( B1 q" G( p6 p
if(dat&0x80) MOSI=1;. W5 U6 Y: y8 ^* L+ M; h* m9 v
else MOSI=0;
' d0 S- U0 i, d# g4 @ CLK=1; ' Q4 t0 \- B3 a& J! \
dat<<=1;
+ `9 L [/ y3 R0 |! G }& k( t% ]" \8 @8 u: j" t
}0 m" j2 I) f& P
. U! \; o# P1 c* T7 }void display()" ^/ _& q1 X/ X6 m5 a
{
# N8 ]9 b w$ [* ` unsigned char i;
) Z) a0 Y# \) G% n: m3 ? for(i=0;i<6;i++)# {$ Y9 ?% e, A) k/ P& G. F
{
: Z2 U& y6 D8 x. p4 w8 j write_164(Tab[DS_data]);
% l1 A% ^0 T! M+ t P2=0x3f&(~(0x01<<i)); //数码管位 共阴低电平选中seg1对应P2.5 seg6对应P2.0% ~+ D G$ r; y2 d0 _. x
delay1ms();
' I: e( c0 ]3 L5 a# C P2=0xff; //数码管灭
; Z8 M: \1 K% C' G }
$ P9 W4 D+ h+ t1 u8 c9 Y
4 W7 j' E u; q6 m) v& e: K* f}
f1 L& q* o9 p' G) r7 F# I& M6 m9 g8 `7 V4 h5 t% g
main()
% p3 O* v& x7 e9 E* L Z6 U, u{/ K, p2 p- v0 Z! q7 z6 Y
separateData(654321);7 O% \3 Y/ i& U4 g: G" j7 t
while(1) * i3 k4 [' i$ R0 f% K% ]: n2 y
{, ?1 U8 Y2 X8 u6 E$ w: m* r) n- |
display();
, g5 g" L4 g+ Z6 m+ K9 ? }1 v( m/ c6 h5 Q2 {
}
7 O8 J0 {9 S# B- Z: G3 f! \" g R) g% ?
; }. K8 E8 X, {# \
下载:$ y; `/ X# c; x2 l+ ?5 E
7 ]- a8 Q6 d- s; }9 i3 n3 l: m |
|