找回密码
 注册
关于网站域名变更的通知
查看: 368|回复: 3
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#include<reg52.h>0 ^- p; j; b4 z3 \
#include<intrins.h>
/ }: N1 q& J; q$ P4 X, C/ \/ i6 S$ H! e0 y
#define uchar unsigned char% |" j& ]4 L# G* R  ~7 d# _) b% J
#define uint unsigned int* z- @5 R/ N! u2 F! d
//74HC164% \4 ?  P+ I4 b0 J% v$ m) B
sbit CLK=P1^0;        // μíμ&ccedil;&AElig;&frac12;μ&frac12;&cedil;&szlig;μ&ccedil;&AElig;&frac12;±&szlig;&Ntilde;&Oslash;′¥·¢/ x# |( {: h; b$ {* j; |- I* Q$ z* Y
sbit MOSI=P1^1;         //         êy&frac34;Yê&auml;è&euml;
+ e- H9 t8 M. t8 |# }0 L9 w* K" q/ I& Q) o1 m" H, H% `' r) t! ?
unsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0 o& {, O/ }! j0 e2 `6 K% k
                          0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};        //12ò&otilde;êy&Acirc;&euml;1ü8 m: X- Y5 Z& ?1 G* ?
unsigned char DS_data[6];
2 z3 _  U4 H5 B& g* Z! x" n/*****************************************************# a  j: I7 M+ \4 M# ?, o
oˉêy1|&Auml;ü:êy&Acirc;&euml;1üé¨&Atilde;è&Ntilde;óê±×óoˉêy
3 n$ T; ?7 N% hoˉêy1|&Auml;ü:&Ntilde;óê±1ms
7 s, A7 q. r7 d3 W# }3 O: X5 N9 K& X8 k0 o0 }
***************************************************/3 J% r. e9 c  T: M
void delay1ms()- @3 r! Z( w/ D" e; \" f1 o6 S
{
9 p$ @1 m" H! Y* W- L; j   unsigned char i,j;        * l) j: X9 G: g, c, L+ U) Y! ^4 @- ^
         for(i=0;i<10;i++). T8 i: W% }  V$ s
          for(j=0;j<33;j++)
% d+ ^6 b% D9 P+ r# d           ;                 
4 t* J2 r0 T8 B4 _1 D) x( g! w}$ o) s* s. G# v8 K, e; h
void separateData(unsigned long dat)         // dat&Icirc;a6&Icirc;&raquo;êy
% s5 N' Y  Y  y: t{4 Z, X& ]! A& M+ f  M; e
   DS_data[0]=dat%10;1 N* y4 C( j" E, ~* F3 H$ q( _( Z
   DS_data[1]=dat/10%10;- W+ V  I! z" i  x6 S  d
   DS_data[2]=dat/100%10;
1 p! z2 x: B* R8 o   DS_data[3]=dat/1000%10;5 I* @. d7 J6 g7 |" D' o+ K$ D
   DS_data[4]=dat/10000%10;
$ e! B( S9 t. z( H3 i   DS_data[5]=dat/100000%10;
. x+ `: K. h8 Z: C* p}
9 T! I) ]9 S4 @4 lvoid write_164(unsigned char dat)
8 J  ^7 j4 H: R: x) U* T) j+ ~- ^{- I& ~( G2 @  n  N, ?6 G' G$ u
   unsigned char i;& }, `8 T# G* q) F1 d# a
   for(i=0;i<8;i++)
' n8 z& F, F1 ^) F* ?) K& n9 Q   {; j! t  v/ m: @$ Q; X3 K% C1 {$ Z
     CLK=0;            
4 i+ U! b" e* |' ]     if(dat&0x80)  MOSI=1;, t1 g+ Y6 [, L# A6 V
     else          MOSI=0;. ^& I' Q7 r9 r, U
     CLK=1;               
8 t  L& b% e/ E" r     dat<<=1; 5 q$ s  J; c& v) A
  }* c( r1 C- u, R: ~. {" u
}$ U+ t0 q( N; d( x3 q
! T' U! W/ O- ]; w6 C, g
void display(); C  r6 i$ }8 ]
{% J9 n' _, C( ~) `8 _
   unsigned char i;- k! |6 b1 C- h" u
   for(i=0;i<6;i++)
5 w& q" J1 I3 d9 U8 d   {7 M1 W5 @7 g& A, b* R' C
                        write_164(Tab[DS_data]);/ q: l, |$ d, D/ }/ K" c
                        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.0
( i+ L3 P1 @( O: X% K* Q$ j                        delay1ms();
6 n/ ]: I" z& M1 V7 C; W                        P2=0xff;        //êy&Acirc;&euml;1ü&Atilde;e
( ?0 h' `' n$ Z6 D2 k$ B" W   }4 S1 c3 Z7 v& k7 {

& v' W5 n) ~0 ~) S+ k  G- @}
, }5 `8 ~* C; q+ p! w/ i; O5 M, W% u: `0 I! `  r( ^3 Q
main()
! x$ v9 V* z) f  ?{
( @1 q$ s9 k  |+ i   separateData(654321);
/ Q& E/ c9 e: x' J3 J9 x   while(1) ( |& n' V; O$ ?( {
   {
0 y% J% b) Q& \9 [2 H* }2 G4 M     display();- {  G* }" c) o/ p7 g
   }9 ]0 {4 r9 D0 O, S: D, y
}. Z) C) `8 y% j+ l4 H; t

4 l7 z6 `. |7 z/ o& o. N. n, x#include<reg52.h>' R3 y3 Q6 B5 W# e
#include<intrins.h>- ]6 K, v$ u: ]: z6 `3 I
1 W! o: }& y( ^, o$ D- C
#define uchar unsigned char- g" J5 G) |  ~- J
#define uint unsigned int+ ^3 D+ O9 d" O. f/ T9 e8 f
//74HC164- r3 M2 P' H; k$ p: u# G/ j
sbit CLK=P1^0;        // 低电平到高电平边沿触发
: ?. p$ v+ L  D2 K& Rsbit MOSI=P1^1;         //         数据输入; s: D! z0 i! J9 m* t& q

: b$ j0 r- ]' ?9 C0 yunsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
& q* q2 l2 m) ?, ], L- ]                          0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};        //共阴数码管
: Q0 C$ C! u" X/ L% }* q! L/ |4 Funsigned char DS_data[6];
7 U' u7 \8 {- A/*****************************************************, I9 n$ W6 t$ s# z7 _" J9 T
函数功能:数码管扫描延时子函数$ `$ B- c9 b6 B: i* Q" {7 Y
函数功能:延时1ms( ^" ?' j+ g. @! j+ r* L. w* X
3 z6 O- t) J& o/ W9 Z0 @
***************************************************/5 o! ]( m, k+ N0 d" c
void delay1ms()
8 U( i( ~1 {6 y% d, V+ k; }6 F5 t5 k/ j{. {0 M: r. J7 F6 N, ?0 @" R
   unsigned char i,j;        
) V- |/ x9 e2 @         for(i=0;i<10;i++)
( Y, D, u, n8 U: l" t          for(j=0;j<33;j++)# f1 l5 C! z) E
           ;                 . ]9 P" R; C  n; x0 I
}
9 U7 J  j! \6 x- V, ?1 e, ?8 ?( Q- uvoid separateData(unsigned long dat)         // dat为6位数0 v9 U/ K) g& \; }3 c# k: e7 z
{
! {( g' u3 [- Z7 {+ X. G   DS_data[0]=dat%10;
0 ~$ I- f6 F3 [3 z2 x: d! f   DS_data[1]=dat/10%10;
, q1 g  ^! T9 |3 N5 W9 d   DS_data[2]=dat/100%10;0 R' D9 q' o0 j
   DS_data[3]=dat/1000%10;( a4 p. A7 \5 B& F
   DS_data[4]=dat/10000%10;5 M7 k8 p: w  c& y
   DS_data[5]=dat/100000%10;7 m6 b! v' l% o3 a' @" _1 x+ n8 B
}
8 X8 O* j# [: hvoid write_164(unsigned char dat)
! M$ K- K# W% {7 z1 J4 `{
( b. F; t3 V6 ]  ]: \   unsigned char i;
" B2 i6 O& @+ ^7 T! c   for(i=0;i<8;i++)
. j( X" F! r" c   {+ J! g8 h1 X- V" g9 V3 Z$ F2 @2 X
     CLK=0;            
% \% B+ ?" u" u; S3 U' D     if(dat&0x80)  MOSI=1;( N, t  \8 V) j7 w
     else          MOSI=0;$ \5 M$ ?' [' C- ], `
     CLK=1;               / u! V8 ^5 D# C/ i5 L  z" j7 E
     dat<<=1;
1 |& C; x- c& ^9 u  }4 @3 }+ X, `: x( r* j. r0 S9 g
}
2 J6 }, R  S* K. ~; g7 s* o, U, ^6 P; i# O8 v6 Y3 K
void display()7 @/ t' D, t. m; f8 X9 Y
{2 }! X! I4 j6 e* C# _4 Y7 X
   unsigned char i;* t. q: L% D, N6 z6 f
   for(i=0;i<6;i++)
) o. R6 W5 L1 @' F6 Z( `   {
) Z$ a* }7 n2 f+ s" _                        write_164(Tab[DS_data]);
  C4 A' M7 B' R/ R7 u                        P2=0x3f&(~(0x01<<i));     //数码管位 共阴低电平选中seg1对应P2.5 seg6对应P2.0
! g/ b8 O- T1 C3 }( {; e: I                        delay1ms();
3 u4 e3 |+ p6 G8 c5 {3 g                        P2=0xff;        //数码管灭/ I, H5 H4 {# \% ~$ Q% l
   }
) f* M7 d( \! v* F! U# J4 o
  A- e' E; b$ X  E2 x}
- s: a$ T: ]" u% W  B( Q9 b5 B" d% N' T8 j& d
main()- C1 H" N9 G% m' F9 ]1 R
{: ^. \$ T1 b" n; A
   separateData(654321);
1 Y' f& i6 \1 V! Y8 I% i   while(1) 5 M# G6 |. K& Z; J% @# q" M* r1 @! ^
   {0 Z- n( X5 {( y0 _; P+ r& V
     display();$ m. U" D" z) \. U, W& r. D2 Q) z% K3 q
   }% c# M3 S& u; n
}1 x7 Z1 y7 Z0 Q& ^" n" }
5 D, c1 B+ f8 Z

拓展并行口电路仿真.zip

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

该用户从未签到

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

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-12 11:29 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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