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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#include<reg52.h>8 H! {! z2 Q  r
#include<intrins.h>
% W  S" V9 ^! n& s9 g- f
+ J+ h: V2 t1 C#define uchar unsigned char
: p4 h' q# N% a; A) ^#define uint unsigned int- V( f6 d6 D4 j/ G
//74HC164/ u  A# X/ C- r( ^2 _% K2 a9 s) a+ O; B+ _
sbit CLK=P1^0;        // μíμ&ccedil;&AElig;&frac12;μ&frac12;&cedil;&szlig;μ&ccedil;&AElig;&frac12;±&szlig;&Ntilde;&Oslash;′¥·¢
! s2 [* f/ k; a! P3 y) U% C# Qsbit MOSI=P1^1;         //         êy&frac34;Yê&auml;è&euml;
- N4 S, G1 Y8 V: O) C+ _4 [! T6 z4 o
4 Q1 {+ p; J/ t' Dunsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,% l: i4 J+ o) q
                          0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};        //12ò&otilde;êy&Acirc;&euml;1ü$ y. g1 ^. o" k0 x
unsigned char DS_data[6];8 L' T* \7 ~- R  c
/*****************************************************
4 T4 S& l) ~0 g$ Hoˉêy1|&Auml;ü:êy&Acirc;&euml;1üé¨&Atilde;è&Ntilde;óê±×óoˉêy
! P8 {- r$ I+ s; ~% ?; h/ U' Qoˉêy1|&Auml;ü:&Ntilde;óê±1ms
, @% ]$ {# P9 n& e! g  R4 i9 e6 U5 n' Q, b' h/ x# b* N
***************************************************/
& @6 g" l  D- F' u# O/ pvoid delay1ms()
1 g& Y5 U) z& h& G" Z7 n& Q% C% B{
2 e9 `# P; m+ h" P' _' Z/ J* m' I   unsigned char i,j;        
! d& V% l+ x+ B         for(i=0;i<10;i++)1 _7 e, g' c& S( e3 Y
          for(j=0;j<33;j++)/ _: x" K% h$ E% h/ _6 Q( Y8 t
           ;                 + h( W% w' _, _" q
}
. b, }5 ~4 f+ e$ m6 W3 ^* o* }void separateData(unsigned long dat)         // dat&Icirc;a6&Icirc;&raquo;êy
1 ?3 ]. P# Y/ D! `4 [' C% {{/ M* i; G' [4 Z, N1 J# {# I6 L
   DS_data[0]=dat%10;' ^  g+ w: j3 Z1 U* B$ f
   DS_data[1]=dat/10%10;
# N% a( S% B$ `/ I: ^" v   DS_data[2]=dat/100%10;
+ A) h1 U" t( Z   DS_data[3]=dat/1000%10;
7 p. \) z: v* o   DS_data[4]=dat/10000%10;5 l8 {9 r9 J8 [0 K2 Z: r+ v" x
   DS_data[5]=dat/100000%10;
4 H* O. |% ^4 k}2 m) e* a9 r" F  \0 o/ n
void write_164(unsigned char dat)
8 o. s4 t& k% ?{
$ T) n: q) K, \: C) S   unsigned char i;' j/ r* \3 d) f5 R$ T* {& f9 }( P0 O: V
   for(i=0;i<8;i++)
) y5 O: T0 q: k; ^0 b  z+ N5 Q   {6 a  X; f3 c; {9 r
     CLK=0;             , x  r% _+ h; U
     if(dat&0x80)  MOSI=1;6 [- w' _1 j- r, X
     else          MOSI=0;& q4 ]9 Y: K% B1 |" ?
     CLK=1;               
" ]/ l% B/ q2 G. q     dat<<=1;
/ F8 |% ^6 y: L  \  }
4 ?6 R  t4 ^4 T% ~}: n8 a: e! m( e8 u, X* B8 E4 g
. s: {) c6 f/ x: @4 {6 S
void display()
# \; a6 z0 u0 D3 U( B{" P3 G9 _7 {6 j- l5 s6 ]
   unsigned char i;
& x2 x) @% I1 u% i7 H   for(i=0;i<6;i++)
3 Y, i8 b/ n5 t   {
: @# f; z: S$ B$ j0 P9 H8 w9 `) g                        write_164(Tab[DS_data]);
$ a8 g# F- B: B" o/ O                        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" u5 e3 J& [  K* c
                        delay1ms();
: S+ Y. R) H, S( @                        P2=0xff;        //êy&Acirc;&euml;1ü&Atilde;e
* \# _% E3 a0 |7 u3 b3 ?, E   }
" I( M; T0 x# h
1 N1 e% L. {, w, H/ ]% o}
( Q, `% t0 N- m; F% ~/ Z" ~6 x. O0 Q% ~" N  u3 V
main()( r  `& J  o1 J  W% H+ J% o3 ^7 z# t
{/ e2 F/ b& A) \. V5 W
   separateData(654321);) }4 z8 s5 ^$ R
   while(1) 6 H3 Z. _( ^; C/ A$ o7 M
   {! q, o* v2 c% ^8 y0 E
     display();; \7 I. G+ \: k% t- {' u
   }% s2 W/ V3 }8 X. L: ?
}+ q% _: f$ r( h9 A4 O( h- `

" h" w& h! A; K; K' Q#include<reg52.h>
7 h( c, B- H1 J8 ^#include<intrins.h>
9 W7 p0 Y- G1 x& L2 n8 i0 ]" U3 z( Q( D* q& q/ h0 I
#define uchar unsigned char
9 O; U, g; J3 H% n1 W#define uint unsigned int& j4 _: X( ~8 T; T2 x# D
//74HC164
, U, V; h/ C' C' r- B4 C- y' isbit CLK=P1^0;        // 低电平到高电平边沿触发% j* f: U' M- p" R/ V1 V% ?
sbit MOSI=P1^1;         //         数据输入& @: S" Q0 g" J! W: b; _* m

( c; |" o) C/ O! n& ~unsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
# W5 H* \0 _- F* g8 I8 K                          0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};        //共阴数码管8 u/ I* d; b/ F6 x
unsigned char DS_data[6];% W# m5 G6 l  U% s( u7 C
/*****************************************************2 r: q: L1 @; {% _
函数功能:数码管扫描延时子函数
+ C1 ^1 Y. E) _7 O5 u函数功能:延时1ms, M6 O. \! A4 I% n9 Y7 e

& U4 v' M% [0 G* g8 b***************************************************/
2 J9 U. n8 n0 N( C! C" p9 q. Ivoid delay1ms()
+ t# j8 Y, o6 |' H5 x2 N2 |& P{. ]$ R' Q) G6 J/ {, G& ?9 |3 C
   unsigned char i,j;        
/ E9 |: U" }# G0 i& f$ Z         for(i=0;i<10;i++)  a+ i1 [. N- x$ h  U; t
          for(j=0;j<33;j++)+ G$ O, L9 O8 C8 _3 z$ h5 V* H
           ;                 $ s4 z# e( r$ I7 P& V
}$ D: V: {: }8 d- b
void separateData(unsigned long dat)         // dat为6位数0 w3 ?- }2 m! ]2 b% Y3 ^
{
" C$ R5 ?) E: K$ A- k: U   DS_data[0]=dat%10;
8 H2 `8 C+ f/ e   DS_data[1]=dat/10%10;8 W& c- v. ~6 H4 Q+ t
   DS_data[2]=dat/100%10;# c+ E9 ^- H# d) Q  ~
   DS_data[3]=dat/1000%10;% M4 g. Y2 W! B
   DS_data[4]=dat/10000%10;' F2 w! n* ]2 {: L6 d
   DS_data[5]=dat/100000%10;9 ]- e- J* @8 C4 s$ H
}3 x8 k, K$ p: H
void write_164(unsigned char dat)
4 |2 P  J! G- E' l- m% M; V. @{
! f; u  L# D. o, s   unsigned char i;1 J1 f8 D' L  T
   for(i=0;i<8;i++)4 T; s3 ]4 K2 a  Z4 P
   {  H, y, f% a3 A* q, d) C
     CLK=0;            
& s8 r" F/ G* O3 R! L     if(dat&0x80)  MOSI=1;9 f* q+ [# ^* n! J
     else          MOSI=0;
& i( F8 G$ }$ `/ C9 R- F     CLK=1;               : K9 v9 \4 Q+ f4 ?! @5 c7 g
     dat<<=1;
* U8 Y" X! F8 m  }0 g: s3 c( S/ E( U( [
}6 V; i7 _) b; ^& Y* u3 o
- _: n: ]1 Z6 |0 x1 }9 z7 L
void display()
8 O4 @4 n: x  A0 [9 `6 r0 p{& O0 ]" j& l6 \' |% {
   unsigned char i;
: Y/ K) Y! r) q( p9 w% s# v# L   for(i=0;i<6;i++)) @* W) `$ H1 |' P4 j
   {7 D* l9 D4 n; ~( n' g+ f' n2 D
                        write_164(Tab[DS_data]);* k) j- L5 I0 |% v- z
                        P2=0x3f&(~(0x01<<i));     //数码管位 共阴低电平选中seg1对应P2.5 seg6对应P2.0
! s; m9 a& J" e% G: @' N- U- r# ?8 L                        delay1ms(); ' T5 l0 s: {- n# J+ t! A: o
                        P2=0xff;        //数码管灭
  u6 d3 ]# h) Z& i6 v0 r9 Y   }
6 l# T) \+ a2 J5 U: f9 F3 O2 p  v7 P5 k# o+ a  B) l- A. i5 ]
}. f8 Q5 r) e, G. C6 y

4 J9 x1 ]! V% }* ]- E* q/ ^main()# h/ {/ q9 u; ?/ C  k5 D
{0 ~$ }4 R% @: x  M
   separateData(654321);
' c/ y0 i7 W* c, u+ w   while(1) 9 G% {, [$ N5 ]4 n- J
   {! Z# }) d3 Y) k7 K" [
     display();
1 Q2 Y, M- o4 O/ ]   }
" ]2 R& R6 b8 B1 a9 V4 t}
/ B, m0 Y! O# _& c- l3 J
5 e5 K- z+ ^' x; w7 D; O2 l' W* q

拓展并行口电路仿真.zip

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

该用户从未签到

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

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-5-30 03:02 , Processed in 0.078125 second(s), 26 queries , Gzip On.

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

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

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