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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#include<reg52.h>6 R3 R6 a) S0 Z& S& H
#include<intrins.h>
: O: ~% n2 o( w6 S; M2 y2 F" F' b7 m/ L* l
#define uchar unsigned char/ P6 Q/ s0 u! P$ L: t
#define uint unsigned int* f9 V% N5 d/ j2 b6 J' x$ j# \
//74HC164
; |; z) n6 g  |+ Lsbit CLK=P1^0;        // μíμ&ccedil;&AElig;&frac12;μ&frac12;&cedil;&szlig;μ&ccedil;&AElig;&frac12;±&szlig;&Ntilde;&Oslash;′¥·¢
1 R5 T+ M6 Q: n1 ^. w6 L9 x. w6 \; Esbit MOSI=P1^1;         //         êy&frac34;Yê&auml;è&euml;" z! x; D& `( y  u- j
0 V+ L4 e0 v' j# `0 ]" s5 P
unsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
5 Q- S* _9 [0 a( p8 b- P1 B) b( w                          0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};        //12ò&otilde;êy&Acirc;&euml;1ü
; ~7 V$ i9 J  [& d* `9 \' Yunsigned char DS_data[6];9 W& S) Y  M  T# |& t2 X' f! ^
/*****************************************************
7 z3 `: y& Z* m* ]0 @# K4 F7 Roˉêy1|&Auml;ü:êy&Acirc;&euml;1üé¨&Atilde;è&Ntilde;óê±×óoˉêy
) L; R' q8 M2 t( i7 eoˉêy1|&Auml;ü:&Ntilde;óê±1ms
3 W: s5 D; i( M5 @% _% {- O& A3 o6 d! Z2 Z0 [" X
***************************************************/
/ ?# h4 ?) K! s0 m- ]4 A/ Ivoid delay1ms()
* b5 y: V  W4 E* |" T$ ^; `. z4 J% [{2 O+ {  g0 _9 X. N
   unsigned char i,j;        
/ D9 ?1 ^' J' l1 {& j+ ^         for(i=0;i<10;i++)
7 Z9 N5 I3 A5 B7 z1 _7 G/ d7 x2 T          for(j=0;j<33;j++)
" ]8 f5 L* w0 d" X           ;                 
; {/ l  `$ A3 K! c5 X}- |( v) _/ c0 y1 L3 \# r( M8 {
void separateData(unsigned long dat)         // dat&Icirc;a6&Icirc;&raquo;êy/ [/ q6 o2 a# Y& j  R& y; G- H
{' l7 y: m  ?! A. k5 m( G1 D
   DS_data[0]=dat%10;
) [) t+ ^. D8 l( p# P+ Q+ y   DS_data[1]=dat/10%10;
" F, k+ n1 m; x* T5 x   DS_data[2]=dat/100%10;
7 E, m0 W$ K$ z9 c0 y3 p   DS_data[3]=dat/1000%10;
: U. I* x" K+ K  p  q7 g2 v   DS_data[4]=dat/10000%10;
9 _3 B/ ~1 o; n   DS_data[5]=dat/100000%10;
( Y2 W8 A/ f$ L# M9 c/ L5 x1 K}
6 j& |* b" y6 ^& ?4 @; _8 @, C, ]void write_164(unsigned char dat)
: i: U& i0 q" c7 w{
# W! T; B* x$ W, e   unsigned char i;
. B0 u- I5 `/ O  F   for(i=0;i<8;i++)
- g9 @. K9 z2 d$ B/ y   {
0 Y+ w9 n' @$ l  n& A6 C$ s     CLK=0;            
: N: r5 D: B7 i     if(dat&0x80)  MOSI=1;  g2 u8 `2 ?& @6 c  b- B
     else          MOSI=0;8 U. M" R6 [8 o" Z1 N$ x1 G) `
     CLK=1;               
, P) z) ?5 ?1 K$ `* e# G2 J     dat<<=1; ; x' n% _' i! R" ]8 o" X6 C
  }9 }( t  P* b- G* I* Z0 A/ J
}
- p: H8 ^2 H4 f4 @
1 l( M& V# @7 s1 m: g/ Lvoid display(): A: Q7 W. _8 H/ \" [
{
" M% `# ^8 t3 O- b5 y   unsigned char i;
6 S6 j9 T3 k9 X8 V7 _: ~) B4 ?' ]) u   for(i=0;i<6;i++)0 V% V8 Z# y! S1 G; `
   {
. w. {$ u4 k& U0 @  m$ Q                        write_164(Tab[DS_data]);' A0 T2 B5 v% |
                        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
4 y5 R: v$ ^, ?; t' t  b                        delay1ms(); ! o( A" z+ k8 b( S6 L& Z
                        P2=0xff;        //êy&Acirc;&euml;1ü&Atilde;e# |* Y& A! g6 O( L/ g8 |/ x5 g
   }9 E' `1 U& c( T# _, y2 F
- F$ U# j  C! N5 }+ B! y  D1 R
}$ J6 P7 u7 v2 K
! \3 E7 _* J5 H8 ~$ l7 I
main()
# I/ S* Q9 G' x) A+ O+ N* C$ e{; E/ b0 |) D" M; _+ G
   separateData(654321);3 ]2 ?# y+ }; E' f. w% e9 h
   while(1)
; A  F. u, w) u3 T6 |7 V, y   {' G( @' _9 d2 m# N  u9 f# T; N
     display();- o! u( |# N5 n6 p: m$ x
   }
+ L9 X# ]. M' f3 C}
! w( }8 m2 H4 L$ r: q, z$ Z
$ l  I9 s* a5 U* U* P#include<reg52.h>- y1 M4 k2 N; g1 o/ m! H4 B
#include<intrins.h>
$ G" `- Y' y0 c2 r
) N% N0 s! O7 [4 ?; Y6 g: l- a% \#define uchar unsigned char/ c! a4 ?5 c, o- B. M. t5 B% g
#define uint unsigned int
) Q5 a( O5 J  h! S5 Z//74HC164
" i% C8 x1 ]) Z3 V2 y% x* vsbit CLK=P1^0;        // 低电平到高电平边沿触发
7 C& T) L* b$ a6 A6 r- j; t/ ssbit MOSI=P1^1;         //         数据输入/ t- v8 {2 r6 r! i( z8 w+ G" q' I* M

5 S' x$ K5 A( _- ]' Q: a3 _% gunsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,$ `2 \9 K+ e# b. x3 Y  g
                          0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};        //共阴数码管6 a. Z9 N. H! T% Q5 z& K& [
unsigned char DS_data[6];5 @) R7 [! g8 T1 @7 @9 R
/*****************************************************% v: P+ H, V1 e
函数功能:数码管扫描延时子函数
  `  K3 |) {! \; _( P7 K函数功能:延时1ms
  F- f1 K% i- `- q- q# |! k  r4 g+ E: ]  M
***************************************************/
$ o/ ~9 }5 W) s, E, @. Fvoid delay1ms()* |$ j/ P) s' b# P6 ?( Q, S6 l
{
  S1 L& k" p) x   unsigned char i,j;        * H7 O4 d2 T2 A8 c: x
         for(i=0;i<10;i++)
' @. o+ r5 i" Q2 e" O1 I! t7 ?          for(j=0;j<33;j++)
2 C3 X( }2 h& n' D           ;                 % R5 d# t; h/ Y! G+ A0 \" G
}2 m. s  T" {, e
void separateData(unsigned long dat)         // dat为6位数
  f/ g* C- w8 i5 ~/ e{. w; {% m4 x. N& l, s- ]* H
   DS_data[0]=dat%10;
& O* S( z4 I9 U0 E* h* D+ {1 n# f/ k' U   DS_data[1]=dat/10%10;
- m9 g7 S7 d7 Y1 W1 }   DS_data[2]=dat/100%10;
: b5 J5 J: c3 u! z  a3 t; G   DS_data[3]=dat/1000%10;* b( Z# W7 B" L# u9 a
   DS_data[4]=dat/10000%10;# p( F$ u/ C( W+ P9 A
   DS_data[5]=dat/100000%10;- x2 c8 k# f, d2 l: _; P
}
3 P6 S4 _, B. k+ L5 \void write_164(unsigned char dat)
/ ^$ h$ n( W: V6 m' l8 ]8 Y{( D, r, y  j1 `' w% @
   unsigned char i;
; s" ]2 o. V2 n" K   for(i=0;i<8;i++)- t# Q# N; P' v) f; `2 l/ I! m
   {
" i! y! C# m: q* ^  P$ h: t     CLK=0;            
$ A& Y: u% h6 z# b     if(dat&0x80)  MOSI=1;7 n4 e: T' Q) ^9 R/ g# o  q$ C
     else          MOSI=0;; b( {" @- v# R7 }. H
     CLK=1;               
# p1 X; x% e) ?' T     dat<<=1;
% l! b( w; g9 n$ C5 O; L  }/ Q5 c  X  g* }9 R, z3 V4 ?
}
: S3 V5 {% ^' u' w
( u3 M& J$ P( F; K9 ?) |void display()
: l+ X! E! m1 L6 L( y$ j{& J1 q8 S- M+ ?- a* c" D
   unsigned char i;
0 i! U% C8 }7 X/ Y: J1 u/ @8 J* i   for(i=0;i<6;i++)/ n- R: ^6 L" x7 m
   {
' ~" d. p$ ?" j2 h                        write_164(Tab[DS_data]);. x! ?8 p4 W) ]
                        P2=0x3f&(~(0x01<<i));     //数码管位 共阴低电平选中seg1对应P2.5 seg6对应P2.0
7 A* `9 u% ~* Q0 }, @; k5 E                        delay1ms();
/ U$ W( o, h3 z7 R- c" y                        P2=0xff;        //数码管灭9 C& {/ Z+ B/ _7 z: n$ l* T; Y
   }
% D( D0 y, O+ m9 L# p* K
) ]1 u& W& _7 I6 {$ h+ Q& A}+ `  C* j) B0 g1 [

8 s) i$ y, e) Q% i+ Vmain()0 H: z3 m7 _7 }7 p1 H' U
{
) B1 \) x; |4 }1 w$ l( l7 }( o8 H   separateData(654321);+ ^$ I5 ?$ S+ R0 I; c
   while(1) 4 m  g, v) q- ?9 d+ f0 f  m! g  o( \
   {
% P, U  I/ J' b1 U: _" {3 d. [     display();  f0 p2 M8 u$ h+ T
   }
2 A$ K$ Z4 ?0 V# E! ~}9 L# ?" C" t  Z( t4 Q/ ?4 k
# ?4 D8 B+ V2 X, u5 z8 A

拓展并行口电路仿真.zip

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

该用户从未签到

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

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-23 19:27 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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