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

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-31 13:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
基于51单片机的74HC164驱动六位数码管动态显示程序
* z% }! \& ]! }  {  D3 F- D& k; U$ i7 K- X! t0 T4 l7 a

7 I+ d8 A& b" c' m3 i* b#include<reg52.h>
5 y+ N$ q* E; Z, q#include<intrins.h>! [0 |* D/ r+ H/ `" ?: V

5 G* I7 i. B. O  g#define uchar unsigned char1 E: [; q0 |0 w7 [
#define uint unsigned int' B1 e' o3 l2 k0 W9 k( R. }! E
//74HC164
+ Y& ^& m% |; X4 A* R- p  g5 v* Wsbit CLK=P1^0;        // μíμ&ccedil;&AElig;&frac12;μ&frac12;&cedil;&szlig;μ&ccedil;&AElig;&frac12;±&szlig;&Ntilde;&Oslash;′¥·¢3 `, [. t' _) [' T
sbit MOSI=P1^1;         //         êy&frac34;Yê&auml;è&euml;% P$ Y6 i2 Z- n4 L8 \2 b1 q
5 l) B1 j- ~7 k* a: W
unsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,8 @5 b$ {6 H1 n% @8 i. K
                          0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};        //12ò&otilde;êy&Acirc;&euml;1ü( N" N% L5 E, t& u2 j
unsigned char DS_data[6];' p0 H. _3 k/ u# \% b1 x7 J
/*****************************************************# ]* r1 Y3 A+ I0 p& r( g
oˉêy1|&Auml;ü:êy&Acirc;&euml;1üé¨&Atilde;è&Ntilde;óê±×óoˉêy9 N0 J, F2 |. ]) r0 L
oˉêy1|&Auml;ü:&Ntilde;óê±1ms3 x. P2 E( P  m. `; I4 y# v
$ g- c! v' l7 w2 Z8 E1 W" z- o$ b* ~
***************************************************/3 {) J  M( X4 V& e) l
void delay1ms()+ Z# B, X0 e( i1 P8 e
{
8 R# j; j3 N% k( z( \   unsigned char i,j;        8 W7 }' h  D7 b  q2 S5 T/ r5 l/ H
         for(i=0;i<10;i++)+ Y+ K/ l+ i5 _' b5 N8 c# T
          for(j=0;j<33;j++)
, P) f9 Q) s; j9 m/ }( G" E( T2 [/ W, T           ;                 ; N7 U' |% W: ?. @$ d1 M
}
6 T0 b  v" o: Y) c. Fvoid separatEDAta(unsigned long dat)         // dat&Icirc;a6&Icirc;&raquo;êy
7 K& C7 B, n- Q; Y$ M$ ?+ e{# _0 K. W  w. L6 J1 Y
   DS_data[0]=dat%10;, [8 p' Y# R5 i
   DS_data[1]=dat/10%10;7 T1 I1 j0 U& b/ p1 m
   DS_data[2]=dat/100%10;8 c0 F. r- f- M$ ~8 d4 c" ?- p
   DS_data[3]=dat/1000%10;
; Y* R! T" j* F5 ]3 [   DS_data[4]=dat/10000%10;
7 z: H; ?! X8 V% Y8 E6 y   DS_data[5]=dat/100000%10;
$ {4 r) H5 {  \" b. v}
/ K. r! c+ j7 n( f; ?4 ?. evoid write_164(unsigned char dat)' f$ D! `" R9 w. C+ j$ z0 y
{
' C+ _/ h$ _- _; ]0 f$ w" M   unsigned char i;
) P3 m  ^: a, f1 e   for(i=0;i<8;i++)/ s. ?$ y; _& V8 @2 o4 L$ L
   {
# }& Y' |3 @, M; H- F; E     CLK=0;            
) j8 O7 W* U0 ?) r' j; P, E+ O     if(dat&0x80)  MOSI=1;6 V! G4 H/ l5 }  m  L# G! ?# ?" N
     else          MOSI=0;
' }5 q8 _4 X6 E3 x! W' m. f     CLK=1;               
0 e) b: Q3 e- s* O     dat<<=1; , ~8 n# {$ L5 T( s# b# n
  }
# t3 A& ]+ @; F2 q) c% P}4 ~4 d- r& t" M' x  K1 v

& [& g, g! y, ~void display()3 [- Q1 h9 l2 B& v7 N- l& p8 q
{
8 p4 @, G* y2 M2 j   unsigned char i;5 k  v5 }! M9 V/ z# u! G4 L( v
   for(i=0;i<6;i++); G3 n& ]0 `1 F# C
   {
6 W) Y$ r. U; d+ X: ?4 V                        write_164(Tab[DS_data]);6 p! W" W! J+ ~! L9 l
                        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
3 n: v1 B5 ^! y5 Z                        delay1ms();
: v$ R9 T( A5 \/ X5 c* F& p                        P2=0xff;        //êy&Acirc;&euml;1ü&Atilde;e5 P' m4 x9 y- @& i! A' C# }' r
   }
3 u& A, G' G6 b
+ }& L( m' X& p}! j; M9 W8 e: U1 l2 t( Y

7 J3 l# l0 T0 f# Zmain()- }) z+ X0 Q, r8 K9 _. q4 a  a
{
' o  }7 U2 W6 A- l! m5 S   separateData(654321);
$ D, r9 `8 @. y# d: F   while(1) % I  {1 Y% y  X- |
   {# j; j6 h4 g5 t" ]7 l/ e
     display();  h1 J, L; b; d( G' w
   }
2 y$ M% L% v, m/ Y+ Y}
  B, G! R9 l* j! G/ r5 b9 u+ [

3 Z! |7 N9 L2 u1 [& j/ y

8 X& d+ @1 c  B: V8 ?8 l, d, V
, n4 G+ [; i- P% m. R
1 a$ s3 `& Q+ T" q. P, T/ n! X

/ C! e: r) g4 S! ~: z% m#include<reg52.h>
. C$ [0 P: }5 D) l#include<intrins.h>
7 C! E( h1 l, g8 f0 x+ M4 H9 ^8 a9 ~. j5 f* h) v, r3 E  |  l
#define uchar unsigned char
$ J0 s, \7 {3 r2 Y9 }$ I+ h8 E#define uint unsigned int6 i' D7 J! j3 s2 f7 t! |1 M
//74HC164. g3 r* W" h- b$ b
sbit CLK=P1^0;        // 低电平到高电平边沿触发
& \3 Z: C. Z8 V  xsbit MOSI=P1^1;         //         数据输入
* O- c8 E2 d6 D6 V" F$ _1 Q2 a" u0 R
unsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
) x$ O/ m5 I6 W5 q                          0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};        //共阴数码管1 G2 i/ b* x  l- ]
unsigned char DS_data[6];: f) ~4 h, `0 O  j
/*****************************************************
2 Z8 p: ]  H3 Z函数功能:数码管扫描延时子函数1 J" L8 N5 t9 n8 l1 m
函数功能:延时1ms# h5 J, j& ^0 P  ^  u# f
8 j) ]4 A- j- ?+ U5 U
***************************************************/
* `* y0 ]; F9 E( N( m8 l( ]void delay1ms()
& }2 F- x# l& D* `6 C  K5 F, r( l{
& K7 C9 {9 d) m9 j+ _# _   unsigned char i,j;        $ B* [1 A) n3 z3 U
         for(i=0;i<10;i++)
% |7 _9 I, Z1 \/ p# b; T' ]          for(j=0;j<33;j++)
$ p. H* q% y0 ^3 L: f  ~8 I! P           ;                 % p' Z) H' p$ n+ k
}" p5 i+ N( F# U( o6 d! y
void separateData(unsigned long dat)         // dat为6位数3 ^! u- ]4 r' z) P
{2 B1 E* U! S. D! Q* W
   DS_data[0]=dat%10;! `& L. \9 o( Q2 @1 N2 G6 w; U0 `5 x
   DS_data[1]=dat/10%10;# J& y9 R3 Z+ L/ @
   DS_data[2]=dat/100%10;' `8 T  Y3 u+ G) A, s
   DS_data[3]=dat/1000%10;4 l( x4 N+ f; g) r6 A
   DS_data[4]=dat/10000%10;" u2 j& l( P% R3 r7 v/ ]  g- K
   DS_data[5]=dat/100000%10;$ a) Y( i' C) Z/ c) }: c$ G" w
}
, d; y$ P) P1 X4 Q' yvoid write_164(unsigned char dat)
) V  E; S: d3 i( Z& {) n{9 n, p) y5 z- Y; ?
   unsigned char i;& P- T- h" J' m2 `3 y$ Z. f
   for(i=0;i<8;i++)
' U! G) A3 N5 ~; O* d6 P   {
" Z$ Q! m: Q5 ~6 ?     CLK=0;             % P1 `# V# @3 d! N( @/ z+ p3 `
     if(dat&0x80)  MOSI=1;
+ W7 ~# x7 \6 x* Q" w     else          MOSI=0;5 \( n5 y2 R, H- u1 r6 V, w& q
     CLK=1;               9 K; Q1 i) O8 ?
     dat<<=1;
4 K5 ?- X% p. @  }( l# k5 [6 k+ G  R+ J) a" V! j2 u
}
" C) @* I: S  D! ~
( A' p9 x  Y$ J' D3 `void display()7 R7 s! Y! O% e5 w1 J9 j  d
{) Z+ b) g* O4 y# m: w; m
   unsigned char i;7 p; z% x" d( A4 A3 t
   for(i=0;i<6;i++)
7 ^7 p1 a* F/ x  B. I- c   {+ y. f6 @! W7 J6 A2 H! J8 r
                        write_164(Tab[DS_data]);
5 d. t7 w* O3 j5 S                        P2=0x3f&(~(0x01<<i));     //数码管位 共阴低电平选中seg1对应P2.5 seg6对应P2.00 Y- _& N  h; ]8 O' D1 j0 ]) A
                        delay1ms(); . ]4 X3 c0 x6 U3 p" }& C4 {
                        P2=0xff;        //数码管灭
" g8 i( i% {6 x- l8 @! B   }
& t* I1 P4 u8 T  F  K
/ }! ~' f+ v9 r9 o0 F1 d}
. ?- J% k7 O7 U' o
. H5 ^/ P, o" o0 `! s+ smain()
- c- {9 h" u. O# o4 d6 e. d& R{
# r9 a: Z9 H; A  b   separateData(654321);
6 k- s  p* Y5 _4 B: N/ A5 T   while(1)
$ U3 x6 p& \- s) ~   {
. [) _- |( E2 k     display();8 ]2 }) N2 A) @/ L
   }
2 Y  |% q- u' R  |}
! F1 B% _0 F, K2 i8 i* V
6 r6 c% X, M6 d/ ^, a1 ~/ l2 ]

( c+ \; F0 k( W( H% B7 H下载:
) n. f0 `. _3 t# l
游客,如果您要查看本帖隐藏内容请回复

7 q$ V0 O/ Y/ n0 v' r% B4 V. K

该用户从未签到

2#
发表于 2019-1-31 16:04 | 只看该作者
看看楼主的代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-30 09:05 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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