找回密码
 注册
查看: 343|回复: 3
打印 上一主题 下一主题

51单片机的74HC164驱动六位数码管动态显示程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-11-16 10:28 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
#include<reg52.h>
# U. x. o' g' U* c4 C0 {+ Q#include<intrins.h># L6 g) n* G& Y# \
( h/ X4 T( T" z( S
#define uchar unsigned char+ t& K9 d9 d6 M7 T# }; t! F0 h( P
#define uint unsigned int! O; z* \7 \; |  r: u
//74HC1648 K! t% \+ G3 a4 B0 g
sbit CLK=P1^0;        // μíμ&ccedil;&AElig;&frac12;μ&frac12;&cedil;&szlig;μ&ccedil;&AElig;&frac12;±&szlig;&Ntilde;&Oslash;′¥·¢4 z# |5 C9 w- ?
sbit MOSI=P1^1;         //         êy&frac34;Yê&auml;è&euml;2 T+ `% Z1 d+ w, x- u6 g
/ t: j1 C" u% e
unsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,/ r0 s; j! T& ]% f
                          0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};        //12ò&otilde;êy&Acirc;&euml;1ü
9 I' t. x/ _2 ^9 punsigned char DS_data[6];
  d" ^& I" Z7 H) _/*****************************************************7 S# U( S# n! L, ^
oˉêy1|&Auml;ü:êy&Acirc;&euml;1üé¨&Atilde;è&Ntilde;óê±×óoˉêy* P% a/ i/ K* B; E& a5 M+ s
oˉêy1|&Auml;ü:&Ntilde;óê±1ms  Q% t5 K; Q$ z( n: {
( j4 q6 k% J' b% N& \6 J7 C
***************************************************/
% P$ B9 ^4 h5 @9 p/ uvoid delay1ms()
  u7 X- B* `( A1 ?+ a4 m9 n: P. c{0 p' e( H7 E/ G; p& U
   unsigned char i,j;        ) E4 `# P" s! ^! F0 F" U6 V
         for(i=0;i<10;i++)# T4 J" e3 t) l! z" v
          for(j=0;j<33;j++)) L$ y) {/ _0 Z- R: x8 h% l5 ]! X
           ;                   E& c' ^/ |# _5 @! l$ R' A
}: G2 P' Y* K% |6 _
void separateData(unsigned long dat)         // dat&Icirc;a6&Icirc;&raquo;êy5 E- \" O; V; f- j3 b' z( K& u, ^
{- }& R" O0 L( P0 E$ z3 [3 g: b
   DS_data[0]=dat%10;. j  \! S0 q# }  X9 `  }
   DS_data[1]=dat/10%10;
2 a* y# O; `2 ]) `" m/ P   DS_data[2]=dat/100%10;
) W, M) d/ B" z) @5 d( Q- z   DS_data[3]=dat/1000%10;# {4 ^9 W) R/ ?% J- R3 p$ p3 l- _
   DS_data[4]=dat/10000%10;* [" d6 Y/ ]! x9 M* H
   DS_data[5]=dat/100000%10;' p  |6 O4 W( A! t
}
+ ^9 J# A2 x( M2 ?$ i+ V( A/ Yvoid write_164(unsigned char dat)
' ^0 C3 Q! L& `0 L$ Y# X{6 |; t$ i) s0 u/ e, v' a  h
   unsigned char i;
+ b) H0 H0 F7 P- F* b8 E   for(i=0;i<8;i++)
3 R: M4 y( b" M: E& k   {
% \/ T7 u# f8 O$ K! E* e/ S     CLK=0;            
, r" |0 A+ \$ ]1 Z( u: Y     if(dat&0x80)  MOSI=1;$ |3 Q) G, ~$ d6 a4 }
     else          MOSI=0;
( A9 L, }6 D" m5 d     CLK=1;               # z; ]7 {  C  T+ X( ^
     dat<<=1;
" t; Q/ N7 J8 v! f1 |! _  }
; ^/ v( w4 v" c( B0 t" Y* P% h}0 `4 ~- I. D- T/ D8 Q/ _
& @( [4 B2 J* N2 L
void display()
+ `0 ]8 F" k( T4 E{$ A: `0 K+ O4 Q0 u! i  A  g9 Y  ~5 _
   unsigned char i;
: T2 H) r- t$ c1 O% u   for(i=0;i<6;i++)
# ^. n4 O' s2 o8 }( Z+ V: q   {! Y' t, O" N& H0 B- |- I! T8 n1 T
                        write_164(Tab[DS_data]);. w7 q( y( w% g# J, w
                        P2=0x3f&(~(0x01<<i));     //êy&Acirc;&euml;1ü&Icirc;&raquo; 12ò&otilde;μíμ&ccedil;&AElig;&frac12;&Ntilde;&iexcl;&Ouml;Dseg1&para;&Ocirc;ó|P2.5 seg6&para;&Ocirc;ó|P2.01 s8 x! e7 E& _8 M8 N
                        delay1ms();
+ G& E, q9 ]' L( j7 G                        P2=0xff;        //êy&Acirc;&euml;1ü&Atilde;e
# A2 }$ w& X  W( k8 Z7 ^3 I2 R   }
- O% j9 w$ H; j) @# x
  m" v4 N3 y( j+ x# Y. E}! `, U$ b5 i# E0 N% e
  |7 t0 K3 J7 J1 ]3 j; [
main()
8 w$ i  i: v% D1 E5 ~{
+ A9 ]( |( ^5 H6 T   separateData(654321);
: H4 O4 l7 F" q6 o( ^6 `6 t8 `5 y   while(1) . l) V, @. b/ P: f6 t' Z
   {9 W/ @! ?9 v2 L: J9 D- o9 I
     display();
% Y9 }. `5 O" t3 ]1 o6 g. ~   }
: q2 @0 B  f# B' T}1 Q+ w/ L% r! n3 Z: m0 V7 t
5 T3 [, t5 z- v* Q
#include<reg52.h>
2 m  r/ H* `) ], [#include<intrins.h>
; \/ K( X; p4 R1 q+ t
! u# V/ i. F  h( P. J0 [1 o; e+ \: R1 C#define uchar unsigned char- R" ]1 G+ {$ k5 j0 p( u0 p4 q
#define uint unsigned int5 P% ^9 I; r% V& t2 }) D# U5 T4 C
//74HC1646 Y0 w. Y; O+ B' M! m; ~9 \
sbit CLK=P1^0;        // 低电平到高电平边沿触发
4 {% M) Y; U2 K' e7 r2 C! [sbit MOSI=P1^1;         //         数据输入1 w4 t9 |3 \) V$ @, l% `3 V& T
. B2 s- C! u0 G6 a$ }
unsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,  v7 v: r; M5 H& k( W
                          0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};        //共阴数码管8 X* m7 w  m5 [  s8 A3 o6 t0 m
unsigned char DS_data[6];5 ~; R. ^4 e, B, E# g) u
/*****************************************************% |5 l9 r6 a( F
函数功能:数码管扫描延时子函数8 l5 N" `9 _" n: Z5 A& f; O
函数功能:延时1ms# B- Q6 M3 `, `: ~5 E5 A
6 ~$ O/ ^) w9 q# l7 c
***************************************************/
5 f) a. J% e, g( E9 H  vvoid delay1ms()
/ r7 ^6 m, s1 r) C$ {{+ v, m6 D! }* E  i1 l" a% W. Y! X
   unsigned char i,j;        ! S( b! S4 T' M2 P9 I# S
         for(i=0;i<10;i++)
, n: q  C: T" y) t  }4 J          for(j=0;j<33;j++)- z: Y2 s5 c# K# I1 g6 [
           ;                 ! V7 Y% V1 s9 R: o9 D; Q
}
5 y0 y  x. {6 R( ^7 H' R! J: }void separateData(unsigned long dat)         // dat为6位数1 t* M% j, N5 m5 W9 F7 \  s' b
{
' V. L3 p# {8 E7 z0 p" T   DS_data[0]=dat%10;
) P2 f+ O/ N) g, K: ~2 M: U   DS_data[1]=dat/10%10;
; R4 E# j* l( f  ~3 y   DS_data[2]=dat/100%10;$ F6 E2 U* D: D1 P  m9 Y+ _
   DS_data[3]=dat/1000%10;
2 n$ {: g1 n, h  u   DS_data[4]=dat/10000%10;. [7 h: d- j5 m6 P5 {
   DS_data[5]=dat/100000%10;  O+ i, {: w% p, C' m# Y' I: e1 a/ ]
}
% }1 g) T* J0 A2 r4 Xvoid write_164(unsigned char dat)0 x* ~5 j9 Q, B) t9 p8 E% e* f6 A0 w
{( k- Y- X: ~" t8 u7 a; D- \' C0 G$ F
   unsigned char i;0 B* v* u% S% V: V; ?$ @0 |; f
   for(i=0;i<8;i++)3 `3 m& Z. T, ?8 M% x
   {
' f# b5 }( f7 x5 c  I. j     CLK=0;             2 {* E! m5 |  d! M! [8 g. Z+ C; ]
     if(dat&0x80)  MOSI=1;! z  d  C, K5 l4 p
     else          MOSI=0;; @6 W: V: l, C8 b: {+ ]
     CLK=1;               
% j. ~4 `: P2 E  B6 M4 C     dat<<=1;
1 H! h6 E4 K! ]2 [  }
6 j! Z( D$ \# A3 R6 F! @% q}: r% _& h9 p5 _0 _

0 F* v7 S) Q# g3 s8 x/ m( tvoid display()+ W6 V$ a% g3 n8 a. `9 Y. @8 j8 `
{
4 A) z/ j3 W1 k5 ~   unsigned char i;9 q7 T/ Q; N+ }  z6 Q% Y
   for(i=0;i<6;i++)
1 H! ^8 c) q- t( }0 I4 ^+ Y) J8 p: n" @8 l   {
( p5 i/ o3 g! K' {; g$ I                        write_164(Tab[DS_data]);; E8 |0 c% _. U1 D& y5 R9 p( j( }
                        P2=0x3f&(~(0x01<<i));     //数码管位 共阴低电平选中seg1对应P2.5 seg6对应P2.0
: J" a4 W4 t+ o  n+ h  H                        delay1ms();
' b& Q* h: d2 `6 j- y; s& G                        P2=0xff;        //数码管灭
4 E+ Q% q- l7 R0 B" v+ n   }
( w- l. o% m/ z0 F
* o& T+ G6 y6 @* c6 w}. |, S# z& j' k+ B! Q; E9 u
- o, f; m; N" r1 h  m7 ~
main()
5 b2 o. a" _5 n, T3 O$ o/ ?0 H# w{  g2 Y3 O3 b4 D* n$ s; d1 S
   separateData(654321);
. v  @( W' @- @# j6 r# B  l% ]" R1 }/ |   while(1) ' C' C" Z" U3 T3 I& c, I$ U
   {1 N& h& O: S: T
     display();  k9 u  j0 M! @7 g3 I
   }' k( x8 A4 W/ u7 Y6 J/ X8 g" T
}
* Q* c+ f4 f2 Y6 j) F6 w0 F- I: E7 l' {" c# k, h5 M

拓展并行口电路仿真.zip

76.67 KB, 下载次数: 0, 下载积分: 威望 -5

该用户从未签到

2#
发表于 2022-11-16 13:16 | 只看该作者
位选控制亮不亮,而段选控制显示数字,利用了人体肉眼观察的能力。4 a' k2 c1 V$ ~6 ^8 D0 q
给人的感受是第一位数码管并没有灭(实际已经灭了),因为时间太短人体肉眼无法识别。这样就会发现数码管动态显示是向左或向右一位一位点亮。

该用户从未签到

3#
发表于 2022-11-16 13:29 | 只看该作者
高速硅门 CMOS 器件,与低功耗肖特基型 TTL (LSTTL) 器件的引脚兼容。
. v+ h, }, g- k/ F是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。数据通过两个输入端(DSA 或 DSB)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。

该用户从未签到

4#
发表于 2022-11-16 13:45 | 只看该作者
动态显示:动态显示占用CPU时间长,只要不执行显示程序,就立刻停止显示。动态显示使用硬件少,占用 I/O较少。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-5-28 10:44 , Processed in 0.078125 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表