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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#include<reg52.h>( f) ^9 O) @" ]
#include<intrins.h>
/ d* U. b8 u% a. K
( e1 L1 W. A& o/ t5 H* j5 ~#define uchar unsigned char
6 @# w7 Q# [; M) A#define uint unsigned int/ r& G4 b5 G( f' S; l1 m! \
//74HC164: A- a# L6 g$ x9 q' ?7 [
sbit CLK=P1^0;        // μíμ&ccedil;&AElig;&frac12;μ&frac12;&cedil;&szlig;μ&ccedil;&AElig;&frac12;±&szlig;&Ntilde;&Oslash;′¥·¢
. g; l* l* `1 N) f: Hsbit MOSI=P1^1;         //         êy&frac34;Yê&auml;è&euml;; C; h1 u% C: l" Y
! D1 R0 ?' C) D
unsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,: ~9 z# K* t. r. H+ i1 f1 t. {3 C+ M
                          0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};        //12ò&otilde;êy&Acirc;&euml;1ü
& w( |, c" B+ Z$ Q3 uunsigned char DS_data[6];
) f% c: \: X/ E7 f# A/*****************************************************
$ M2 T/ B$ T9 j( {. `$ Y% H# Aoˉêy1|&Auml;ü:êy&Acirc;&euml;1üé¨&Atilde;è&Ntilde;óê±×óoˉêy  Y, T7 m1 X* D
oˉêy1|&Auml;ü:&Ntilde;óê±1ms
( K- p0 d4 H2 {6 R4 u0 o
1 K( x; b0 f. c/ W) _***************************************************/1 C1 z! j9 C, e# J
void delay1ms()
' a* a* C( `% `$ D- K4 r: K{
0 \' D2 }4 P9 ~8 W   unsigned char i,j;        
( K( Z2 E3 w' K- p9 r         for(i=0;i<10;i++)! }7 }* _" N8 y4 R
          for(j=0;j<33;j++)  X- ^& X- S. m! Z# _
           ;                 % [1 @2 f. F1 s+ {: ~
}% d  x+ d! K; ~0 c) c1 Q& H. e, V
void separateData(unsigned long dat)         // dat&Icirc;a6&Icirc;&raquo;êy2 O9 i3 d" w! L# w; o
{5 M# E% a) T6 R/ W! l( g
   DS_data[0]=dat%10;
5 K  `3 g  w6 }( a2 E   DS_data[1]=dat/10%10;/ B7 n" {3 T$ L% K
   DS_data[2]=dat/100%10;6 x& I' \% J# E1 ]! h0 T
   DS_data[3]=dat/1000%10;) D1 `: f7 Q9 \. M. s% O
   DS_data[4]=dat/10000%10;
9 |) O$ Y" F7 ^8 r4 e& ]7 E   DS_data[5]=dat/100000%10;- y* R* c; [: v" [. G' M
}
# k. h0 p8 @" `. S) w, zvoid write_164(unsigned char dat)
  I. L; J% |% D* R$ }" X9 G- [4 V{
' K" `1 i3 k7 c7 M   unsigned char i;
: Y: v: x1 O" Q   for(i=0;i<8;i++)
! T) j2 M- U2 |; h1 G7 I) n. X   {
+ s2 w, I, M$ g' c* ]6 g7 o     CLK=0;            
  L9 J! F& s9 t/ L8 \3 ^     if(dat&0x80)  MOSI=1;, B/ g, z# q7 w2 n( P5 T& }
     else          MOSI=0;  Y4 }, _; e! O$ |
     CLK=1;               
. z# o. ?- f0 a5 h     dat<<=1;
* E+ |8 g0 W6 e" }+ b  }9 D# N. ^0 @9 G, c1 D( l
}
( \9 @& |" K: ?3 ^9 n/ g6 z
+ E. d/ h: V6 |) b8 w% @: i* hvoid display()6 T6 l5 z! Z& V- k! m
{9 S. l3 j$ |% q3 W
   unsigned char i;* K, s! v* a& N: D$ c; P- ^5 H
   for(i=0;i<6;i++)
" T% g0 `4 ~( O   {
. k" Y5 b1 o! U4 b                        write_164(Tab[DS_data]);
" o- p- Q* y% A/ |8 K                        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# H* ~( O( ]( E2 p) }
                        delay1ms(); / k- ~8 C1 e8 E; N: V
                        P2=0xff;        //êy&Acirc;&euml;1ü&Atilde;e
+ F) h! ^6 L- N" `7 M   }
& N6 `: u1 c7 `0 z2 |, _: C( [% u7 H" w$ T$ `
}$ N( n) ]2 O# }
6 E6 g& k( V6 v4 E9 n/ `2 r/ g
main()# ~/ ]8 N0 n4 Z  X, ]+ e: i; g
{
# S! @, V6 J& O; b) o1 o1 I   separateData(654321);* H9 l% R8 _9 j/ T' x/ T9 p8 S
   while(1) 8 ~$ q, @) `# f7 ^" y
   {3 G* n! Q$ E" Y6 ?$ P1 M, i
     display();
2 J+ ?3 f+ A: v# M5 g, d/ a$ s. u   }% D# l- y6 E& ?4 t/ g9 ?2 @  f
}' j2 d0 O) v! b0 o

# E) v5 u, [2 m#include<reg52.h>
; _5 u4 \5 N: J2 v8 J9 o9 o#include<intrins.h>
% p7 j6 V6 E, H; ^' ]' A0 B. w  z
#define uchar unsigned char
$ [/ U6 m# {+ u: c5 R- y#define uint unsigned int8 O$ n0 I4 z& n9 A$ R! o5 `8 `" C
//74HC164" y7 Q1 H  p+ Q% ]& S* o
sbit CLK=P1^0;        // 低电平到高电平边沿触发
& J# a9 D, `3 y2 d9 Ksbit MOSI=P1^1;         //         数据输入. r9 t( p2 W4 D9 k9 m2 h" X5 L$ w
+ e: d, W: T* ^/ J
unsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,: u& A0 q  t: K: [5 }
                          0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};        //共阴数码管
3 K4 ?" `6 Z- u( t+ Eunsigned char DS_data[6];
! p( l& o/ [% y/*****************************************************' S' s2 v2 h2 W5 ]# X
函数功能:数码管扫描延时子函数
" S( C+ Q, {9 T+ t* N/ @; g函数功能:延时1ms# D1 t- W5 u. X8 \& n
6 l9 y) W: {4 r. E! N
***************************************************/
1 O' V3 Q% t. @8 R/ H# ?void delay1ms()
9 X$ d! G" ~$ j3 ~+ [  t3 w{
5 p( f% D1 L/ _/ B8 e5 D2 O4 J: Z   unsigned char i,j;        
. K4 B8 [! }- R  d0 g. N         for(i=0;i<10;i++); N) R& v  c# ?) O- l
          for(j=0;j<33;j++)
! A( H8 q2 V. d6 d" q' d$ ?9 X6 \           ;                 ; T& l' I3 D$ c( F$ w
}' \9 \5 I" x( u0 H
void separateData(unsigned long dat)         // dat为6位数
5 H, V1 c7 A9 p8 P5 r{
8 f9 n5 I# ^7 y& t1 M; X. P   DS_data[0]=dat%10;1 p4 f9 [* g4 E' s" r
   DS_data[1]=dat/10%10;$ w* @0 Y$ {+ l; |
   DS_data[2]=dat/100%10;
! `# c% q6 v% D( F0 L   DS_data[3]=dat/1000%10;( f" \) M5 y. V/ g/ Z
   DS_data[4]=dat/10000%10;8 C4 M; ?7 G/ d8 g) w/ b' Z- v
   DS_data[5]=dat/100000%10;
  @8 l$ p3 R( g: ~8 v  c}: b6 V+ B  k$ L* @
void write_164(unsigned char dat)' a2 J& Q/ g+ ~* @+ G2 V# @2 ]% ?
{, |# ~7 Y9 n' ?( b! W; E
   unsigned char i;
# _$ j8 e+ w7 {5 F4 X9 q/ Y1 H   for(i=0;i<8;i++)  h! V  Q+ [- [8 C. D8 c+ p7 J
   {
$ a8 Y+ F6 B, H- b% K; @& c; h+ V     CLK=0;             * m7 j8 C) j0 t
     if(dat&0x80)  MOSI=1;
, d" f" C! w$ ~     else          MOSI=0;1 O4 F0 r0 i; [( B& f0 K
     CLK=1;               
$ A6 R6 A3 n- j8 n9 ^$ ?! ?/ [     dat<<=1;
; B4 r, W6 L. p/ ?" l# Q4 o) w3 ^" ^  }
+ x, y4 m2 y3 j$ Z  e2 s2 _$ ^}  W& J& y0 m. C

4 m. @9 K6 E1 e; c2 W7 D- H( q3 pvoid display()7 j- o: v  ^8 y' ]* M* ?' o) K
{
# k4 }! {5 L- ^# _  I   unsigned char i;
; v  k" K3 {. A   for(i=0;i<6;i++)
8 v" r/ v  C. C& M. e$ ]% V5 @   {
  Y3 Q: q, x; C! G. ]                        write_164(Tab[DS_data]);% s* i: D6 r. I  q2 ?5 |
                        P2=0x3f&(~(0x01<<i));     //数码管位 共阴低电平选中seg1对应P2.5 seg6对应P2.0+ S% W0 }8 Y+ Y+ n2 ~
                        delay1ms(); " k/ c& k% T# F5 E8 C3 N
                        P2=0xff;        //数码管灭  A! u* m2 X9 q+ F8 f+ O& b
   }
  O8 Y% p$ L* l# N4 D' i8 D* L8 J) y9 a8 _
}
7 S4 q2 g/ N: s
  h6 V! a& n6 d/ [0 @main()$ }0 @1 m1 y+ Y/ b
{$ `, g/ M! e* U+ d
   separateData(654321);
) C3 f' D+ l& Z9 _; ]3 @" R0 ?+ o   while(1)
4 d% r8 d# D! \+ G2 T6 W   {. \( }  i$ g# B2 n5 Y7 N8 X* H! g
     display();
+ U6 i& k: w2 b8 _7 d   }
4 R$ D8 {5 e5 E% {. d}3 v5 e* C$ H& B

$ z0 Z# d! L# J# u7 O- L2 S

拓展并行口电路仿真.zip

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

该用户从未签到

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

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-12 08:34 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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