|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
基于51单片机的74HC164驱动六位数码管动态显示程序, M( R5 }% T) _/ [
4 f( h( d; M7 l6 e: k5 V# U8 Y* b7 j7 o7 k
+ X& v* N( ~2 l' V#include<reg52.h>
9 D8 L* |: i' H; y) M: U4 V#include<intrins.h>
' n3 Z3 h+ q! ]* r# _0 z# S0 `* k$ c1 _
#define uchar unsigned char
& Q2 M- }: c( n( k/ |) ~#define uint unsigned int
* n7 O* Y, b, D e' W8 v0 o//74HC1647 c7 \: O+ E( ?7 g
sbit CLK=P1^0; // μíμçÆ½μ½¸ßμçÆ½±ßÑØ′¥·¢. B( p; S) k" K% G
sbit MOSI=P1^1; // êy¾Yêäèë2 R1 B8 z0 |6 P7 y- h0 _
; `* F# {" {5 k$ M* Cunsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,& B5 @7 o3 J6 ~1 ]$ N
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; //12òõêyÂë1ü' Q' ~9 ]* S- _( W9 ^
unsigned char DS_data[6];
: a: m( g" s0 d8 h! v# R0 u/*****************************************************" ]0 v& [) c: o* s
oˉêy1|Äü:êyÂë1üé¨ÃèÑóê±×óoˉêy6 e* v7 ~; E t
oˉêy1|Äü:Ñóê±1ms: u8 K) i3 L" ~7 {
- s+ {! R0 y" m***************************************************/
2 z: B! u; G$ Z% l7 z" kvoid delay1ms()7 u- P% w0 ?# F X: k
{1 S2 O' A1 m& {
unsigned char i,j; , W; y1 x% p- I2 G) E
for(i=0;i<10;i++)
4 {) ~$ T9 t& f6 R4 w5 ]$ R: D0 P for(j=0;j<33;j++)# V# X; j) X6 V( Q
; " q" n- S3 `8 N) o
}
! }9 o* W2 ?# T& h- G$ d1 u2 Svoid separatEDAta(unsigned long dat) // datÎa6λêy3 a- W3 p+ ]5 B8 U Y4 R
{9 v7 P5 x, |3 D& k9 u" A- ^1 U d
DS_data[0]=dat%10;0 L. U( h4 H x; R2 H9 x' @1 l
DS_data[1]=dat/10%10;
* ?# g7 h, n8 g: J$ P+ Q5 Z DS_data[2]=dat/100%10;
3 u& Z- y% \ y/ n* b1 U9 F' e DS_data[3]=dat/1000%10;' D* b5 S: K7 ?9 L* T' U/ `- T
DS_data[4]=dat/10000%10;
% ^( g& `" H4 z DS_data[5]=dat/100000%10;2 M) e0 B3 V8 I8 E/ s7 ]( k- B1 R
}5 M' w9 L) I4 v2 U
void write_164(unsigned char dat)
: s& b) ~9 ?: g( j% d2 [; [{) A* k# l5 k& I a) K
unsigned char i;/ |# T+ o8 c6 `5 j: ~& e/ b
for(i=0;i<8;i++)
6 E8 i: I2 Y6 w9 }5 G N6 _ {# G0 s" ~- H2 q6 l. U
CLK=0; . E: x7 ^ r& L/ }6 a$ W) Z5 p
if(dat&0x80) MOSI=1;
: S4 S" E9 d z6 e else MOSI=0;
! v8 W6 B# o6 q CLK=1; 3 v) E& J" k6 [
dat<<=1; + ?$ X6 k7 Y+ @9 }
}
i& s6 D0 R" B2 {+ I7 S1 r}
& L% u; t& H/ X/ e, Q0 V) a
' } Q( t! ~: F5 ]2 v& F1 kvoid display()4 U, Z+ v* |0 P+ N$ C2 u. C) T! X f
{
6 ^' M9 @" t. x3 ?9 J5 O7 U unsigned char i;% `9 M3 N9 G* m0 ^) c: J" }6 J
for(i=0;i<6;i++)" G. A) s8 ~7 N9 I E2 O
{
2 K& D/ |! z$ o write_164(Tab[DS_data]);) w, R3 g, [0 h: _7 T
P2=0x3f&(~(0x01<<i)); //êyÂë1üλ 12òõμíμçÆ½Ñ¡ÖDseg1¶Ôó|P2.5 seg6¶Ôó|P2.0
" K- [0 _2 O" Q+ X5 ^6 |" z ?4 W delay1ms(); 9 A$ s: H5 ]3 f7 E' c
P2=0xff; //êyÂë1üÃe' d3 C- {0 c* W
}
6 M/ f" L8 N! o. ~
- n, l; b& S. c. I5 V s. h1 o}
/ ]" r! t$ ]% I0 O
2 ?9 R) R/ j x5 I& i- wmain()& D p' [* H9 F0 P7 k. G# j; H9 {
{% W& }% ]$ l9 O3 C- }
separateData(654321);
( |1 U* Y2 ^; }0 o+ H4 Z while(1)
; H( @: I% e9 ? {+ m; g {
+ `0 T! t5 O }0 L) ^ display();
" n/ W7 @: C" F }- ~3 J9 |) o/ d* X% [* \7 J
}
! q# S* B' e3 W: k& J9 y$ Z
+ O& H8 q; L, _* S: |
i( N2 ]+ @! } 1 D' u$ ~- R8 }. e/ e) t* m8 A
8 U: G2 X! C2 u8 M7 m8 W, N# ^9 }/ t/ _- _" Y
#include<reg52.h>. l1 r; C: e3 o; d
#include<intrins.h>9 y' a; O! x. r9 [ d: O
) R" k+ [3 Y7 C; u% B
#define uchar unsigned char
4 t5 O: ]) B* [" | Y2 n3 `#define uint unsigned int
( `/ b8 r* q3 c7 T+ x7 d9 ?//74HC164% X; Z1 Q) V; j k; v4 d
sbit CLK=P1^0; // 低电平到高电平边沿触发# \6 ~/ v3 y/ `: y
sbit MOSI=P1^1; // 数据输入
$ `8 T, F0 D" x" V
+ l1 Q( ]+ O) U" p) Vunsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,: [ P W: ^& U% ?3 l. ?: _( L
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; //共阴数码管
. e& A. Z( Q$ W0 `0 k. l# Sunsigned char DS_data[6];
3 [' U4 u2 X( H, \4 G/ R( z' b/*****************************************************
2 z" A& x! }% q( Q函数功能:数码管扫描延时子函数
/ q( p5 {8 F5 S- K% [函数功能:延时1ms
2 m: w# F* g9 i7 n8 Q o* }3 J1 B+ Y# N2 Q
***************************************************/
- L& W) C* ~ g0 K2 Avoid delay1ms()
, {5 r# ^8 E: c{4 T9 r6 Y9 V+ J$ `: d
unsigned char i,j; ) `- t7 A! P7 M" M! R1 b7 X9 v
for(i=0;i<10;i++)
- C& `4 v3 `3 K3 M* a for(j=0;j<33;j++)' @% T. v$ |$ v
;
u% @. P+ B2 m0 d+ c6 J, e5 X3 I}: E X" h$ b: e, R6 Z
void separateData(unsigned long dat) // dat为6位数$ O7 _2 a: U! B
{
! l `' v* r( n w2 t* K- w DS_data[0]=dat%10;
7 J, J& e( L+ g DS_data[1]=dat/10%10; `8 z* p9 |( V# Q6 ~- z7 s7 `
DS_data[2]=dat/100%10;
- a$ ]: Y W( o3 @0 I s( }! b M DS_data[3]=dat/1000%10;
* R$ a' T% ^4 b$ Q# h DS_data[4]=dat/10000%10;+ d3 G G' V4 X7 O9 z! o
DS_data[5]=dat/100000%10;% X4 n5 o4 C0 s
}/ |1 l1 r- y+ F+ G3 T
void write_164(unsigned char dat)
, z/ ~6 z) j9 \* f3 M! B{( x/ `. ]* H7 q4 l7 A" f9 k( V
unsigned char i;1 s; t3 ?7 q9 B$ W( O! u
for(i=0;i<8;i++)
0 K: }, @" f5 u3 b1 u+ s0 h1 [& s {4 D- [7 Q: z( K- t% j# A, D* w
CLK=0; 4 V. P" ~8 H2 u, C+ a) o$ J
if(dat&0x80) MOSI=1;' M( b4 O2 H. {1 v( F& T4 T
else MOSI=0;
0 N& m: W2 U/ ]: \; N CLK=1; ! L5 |& Q1 B. ^- T3 ?/ a
dat<<=1; 0 U: b% A( K1 `
}
" d( {8 q& B% D# x: {& ^( X' ?$ L}+ a% T! b# O3 `' z( P3 T
2 N1 E6 G5 X$ ]. V+ m8 k4 u0 gvoid display()
9 y5 M5 @5 e: K6 ?# s{# y6 P4 r3 s' c
unsigned char i;2 F* L3 S! P3 r8 b' b! ?+ J
for(i=0;i<6;i++)
3 r# Z% B4 j7 N; E' I {4 H( s k9 n, y* e4 k5 v4 h
write_164(Tab[DS_data]);. R! d. M( ~% a$ B0 L! j3 A
P2=0x3f&(~(0x01<<i)); //数码管位 共阴低电平选中seg1对应P2.5 seg6对应P2.0$ @* E% d) ?) p- U- T" ^
delay1ms(); + A6 q: l7 W0 K: N ~
P2=0xff; //数码管灭: b- t( Z& c; ~! r0 s
} j6 o* v& c% g% D( s
; k( P& S6 v$ v- \3 D" B8 e2 ~3 a) ]
}/ v/ a: l3 S1 J0 ~- O) E
7 ^9 Q4 r7 V& o9 d; A2 a1 A, H
main()
) H' a3 b& Y n9 [/ {{
6 V- w1 v/ R, ^/ I4 W. B separateData(654321);- i- k( h( U- B& Q+ Z" e$ i
while(1) & O: L6 ?. t" M
{: S' ?; |2 X: l; H9 h/ C
display();% B ~: K: |# h* c) ~& @8 \
}
9 V% Y5 ?- Q; l}, D2 j: T) P( F) ^( x/ x
; h) O E( d) R# J
?6 H3 j/ y9 W; P+ D下载:
/ t4 X8 _( K4 `5 y" q$ Z; T0 F( b# V H: t' J" I
|
|