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

16x16点阵使用两个74HC595显示图片

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-11-26 09:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
16x16点阵使用两个74HC595显示图片# c' n7 ~" N) k$ N
; i. H: p7 t6 H) L3 e2 i

% n' U4 z4 k& I$ x) s- q
7 v/ k4 H- t9 v: q( g1 G* P8 B. w#include <REG51.H>; K' r1 ^  B, E
//--重定义函数变量--//* k; t$ s3 ~8 x& I
#define uchar unsigned char- C, S7 J. Z6 z! e
#define uint  unsigned int
& r& H8 y: [2 i#define ulong unsigned long/ o5 h! ~: d- @7 G
#define  GPIO_KEY P1
7 A" q/ v3 N9 [; [8 V) k  B
6 I4 j8 P; @0 a7 {, w. \& ?& m//--定义SPI要使用的 IO--//
) l  N7 c  A& H$ Xsbit MOSIO = P3^4;  ^% Q; t; J* w3 _
sbit R_CLK = P3^5;1 W  v: }, M" }3 E3 k
sbit S_CLK = P3^6;1 A. p9 F. J' l; q2 m( G, q
9 a- P1 G6 m  v' ^+ {
//---全局变量声明--//
: k) w. ~( u0 Z+ J" l% z$ H  @ulong column;   //点阵列
$ ^. |4 n1 n4 h: eulong row;      //点阵行
* w5 e1 j7 F( N1 ?. hulong dt;
0 r4 Z3 ~) x" K* D+ evoid Delay10ms(unsigned int c);
5 Q( w3 |1 k' h+ d# M* n& ^unsigned char Key_Scan();
* C3 W% O+ |) y/ E5 W$ z  I8 R& g  C- G
//--点阵显示数组--//4 M1 I: n* O; \0 L" L
unsigned char code tab0[] =
4 _8 r. i. z7 ]" i+ j{0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08,1 h6 v5 y5 A6 J- i' K; s  W9 l
0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80,& E# `: E) Z, X) X4 B
0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00,
0 b( ]3 K3 x2 K( x+ o. q 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00};
' k- O3 i& w6 R; o6 }5 k0 O7 |/ U
4 g. h1 S) y( }- m7 ?! K: F! |6 G% \) Y7 b* M& K  o
uchar code tab1[] ={255,255,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,1,128,255,255};
# B1 k  f" X( r. {5 vuchar code tab2[] ={255,255,1,128,253,191,5,160,5,160,5,160,5,160,5,160,5,160,5,160,5,160,5,160,5,160,253,191,1,128,255,255}        ;1 ?0 w; Z5 R6 d) E7 a$ \2 a7 v
uchar code tab3[] = {255,255,1,128,253,191,5,160,245,175,21,168,21,168,21,168,21,168,21,168,21,168,245,175,5,160,253,191,1,128,255,255};
! x# o" x( ?% v7 v) S3 Tuchar code tab4[] ={255,255,1,128,253,191,5,160,245,175,21,168,213,171,85,170,85,170,213,171,21,168,245,175,5,160,253,191,1,128,255,255};) B$ u5 |; e! U0 o# o
uchar code tab5[] ={0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,1,128,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
# U1 ], R) X, Y7 D: U3 p" [) Uuchar code tab6[] = {0,0,0,0,0,0,0,0,0,0,224,7,32,4,160,5,160,5,32,4,224,7,0,0,0,0,0,0,0,0,0,0};, l! U# F0 I# |7 P% V
uchar code tab7[] = {0,0,0,0,0,0,248,31,8,16,232,23,40,20,168,21,168,21,40,20,232,23,8,16,248,31,0,0,0,0,0,0};
; \' N. q( p# \uchar code tab8[] = {0,0,254,127,2,64,250,95,10,80,234,87,42,84,170,85,170,85,42,84,234,87,10,80,250,95,2,64,254,127,0,0};3 f9 E2 r/ h" ?; Y
3 |9 {1 v2 `9 |9 B1 ^9 n
//--全局函数声明--//% v- a- o! `# X  U
void HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0);5 ]8 K3 G8 d1 E/ |& ?
6 r, x( F0 c& I3 B  X. `" U

/ ~2 h+ I8 M1 h4 q$ wvoid main(void)0 l! e7 d  Y% k$ Q9 k0 S, ^
{
" j9 B! ~' ]6 k; \        int k, i, ms;1 w; a3 h$ s% J$ X+ S3 ?
        i = 40;                                        //显示时间                                                                                                                                                                  
" c) I5 V' M  v+ h9 b        while(1)
  x- c# k$ D5 U9 a  Y# g$ I        {: K. o& E4 y$ g: C0 U9 A! i
                //--显示10--//
& I: K7 @9 ~$ ^% F- T% X                for(ms = i; ms > 0; ms--)
. K* C9 K1 Y6 R                {
5 ]( b+ `. d. ?) f& L                        for(k = 0; k < 16; k++)                                                                                
5 i2 ]/ M/ O, i. l5 F) h                        {           h; b2 `6 @2 G+ R3 k: ?
                        HC595SendData(~tab1[2*k +1],~tab1[2*k],tab0[2*k],tab0[2*k + 1]);
! d' [1 ~' m0 o7 V                        }                  3 z3 J6 J; A. b6 W
                }
9 m2 ?, a* E. d0 H                HC595SendData(0xff,0xff,0,0);                                                                                                                                             
2 s" e% o$ h! \; w  H: P
6 |- [% @" k6 [# r- q3 |                //--显示09--//$ h$ L# |* b6 S: r
                for(ms = i; ms > 0; ms--), e& k# B- S% K# ~; S$ O" `
                {) ^4 l( X& i6 ]% Q) i: a# v
                        for(k = 0; k < 16; k++)                                                                                            ) K0 w0 \3 \9 C6 {- j
                        {         
! Y8 c* r1 _9 L                                HC595SendData(~tab2[2*k +1],~tab2[2*k],tab0[2*k],tab0[2*k + 1]);                  . B2 n4 X6 K- J9 k0 J$ y
                        }: C8 C4 i* V; Q+ x# {- O/ W! j0 A
                }. Z- G4 l! d5 u2 c' O
                HC595SendData(0xff,0xff,0,0);                                                                              
; z, Y- i8 O) |, a& d
+ I8 i" N: M* \                //--显示08--//
. w0 g- C3 B1 \9 M/ P% Y                for(ms = i; ms > 0; ms--)( d' c9 c* Q6 i% T1 l
                {( W/ c) b4 D/ Q& s1 x# g
                        for(k = 0; k < 16; k++)                                                                                                % @/ t0 `& V/ a  s" y3 S
                        {         
% V: ^5 ~: M. ?7 n4 n" f                                HC595SendData(~tab3[2*k +1],~tab3[2*k],tab0[2*k],tab0[2*k + 1]);                  
& Q+ e' i( b- `/ ]5 k- h  {" S: Y                        }
; N) C  E5 p; H  W6 i                }        % ~( q! \* l6 ~2 b; u% H
                HC595SendData(0xff,0xff,0,0);         
: b/ B$ M! [3 W( {4 [0 R4 n! _/ X
% m" S" u1 N' _# R; n                //--显示07--//
5 }- \/ I7 W- T6 `                for(ms = i; ms > 0; ms--)
) W& z, @5 s0 i& _# o1 J' f                {
+ P# k' t. M) R; b: v                        for(k = 0; k < 16; k++)                                                2 G, S, `: i7 E1 I1 {  S
                        {         
' z* Y6 u$ a" h+ q& N1 {) h                                HC595SendData(~tab4[2*k +1],~tab4[2*k],tab0[2*k],tab0[2*k + 1]);                  4 O& N  }8 z% I4 p$ P' c
                        }) Y2 O; g: A4 G! ~4 {8 C& L
                }        
0 D# _! L; q5 Z                HC595SendData(0xff,0xff,0,0);                                                                                        1 K6 m$ z0 i% Z5 N# ]  d  b
5 L' {) e( v1 f/ N2 I/ e
                //--显示06--/// m6 D+ `& ]6 B
                for(ms = i; ms > 0; ms--)
, a  W0 S: R3 ^, }. \                {
+ p) H- k6 j( D" `+ z                        for(k = 0; k < 16; k++)                                                                                                ) ]5 Z1 ]* r$ L5 h! P/ ]1 o: W
                        {         % d: C. U, W( f
                                HC595SendData(~tab5[2*k +1],~tab5[2*k],tab0[2*k],tab0[2*k + 1]);                  
- [% {' Q$ S4 U                        }
/ K7 k0 Y! }* a- [& Z                }        ( p( x) h/ V8 q; I' N( s
                HC595SendData(0xff,0xff,0,0);                                                                                       
- A. W, g" W2 l, ?
- r4 E# b! M% K" h) ]. F            //--显示05--//' B- ]8 s8 L' {! J" Z
                for(ms = i; ms > 0; ms--)
, Y$ C7 ~/ b8 F! x2 ]                {
: x/ f% |9 ~3 F/ L8 C                        for(k = 0; k < 16; k++)                                                                                                //欢
7 K' E) E3 ^+ A# V                        {         / H3 h% e& i+ L' J4 s5 o
                                HC595SendData(~tab6[2*k +1],~tab6[2*k],tab0[2*k],tab0[2*k + 1]);                  ! q6 m5 ^. @+ `: V( ]
                        }+ @! t2 R; q  g2 z0 Y
                }        
, o* x/ a- a0 \- D3 r2 C5 U                HC595SendData(0xff,0xff,0,0);                                                        {& h6 k& R1 S7 }! A' d
: ^7 A5 d2 [- m- S# K
            //--显示04--//
7 |. E& l) Y8 M' @3 o2 H                for(ms = i; ms > 0; ms--)& ^7 Q& O* i/ u% s& k' o2 W
                {
- b0 A; q0 \2 x. j  I; V                        for(k = 0; k < 16; k++)                                                        * J7 E% O* A! k# Z) d
                        {         * E+ O0 s0 D/ {) a+ g
                                HC595SendData(~tab7[2*k +1],~tab7[2*k],tab0[2*k],tab0[2*k + 1]);                  2 P) A, `& a2 S! W* n
                        }
8 w* k' d$ D( R; u0 \7 x                }        
$ a; f  N& T, T  D/ y( i" e                HC595SendData(0xff,0xff,0,0);                                            
$ q3 K: g3 S" e! [' O, y# a* T3 z# \$ |4 }  m5 Y8 _
                //--显示03--//1 W: s5 e9 o. Q+ ]: B1 w+ j
                for(ms = i; ms > 0; ms--)
; }8 f7 x" d( S+ y, J$ c; x                {
: O! F" d& ^; h- h                        for(k = 0; k < 16; k++)                                                        + p+ Z( E  @4 V. ?9 \+ G2 U
                        {         , R. H) j5 V- i4 r
                                HC595SendData(~tab8[2*k +1],~tab8[2*k],tab0[2*k],tab0[2*k + 1]);                  ' ?$ O' s# t' q3 S
                        }
/ c1 l+ u# Y& @. x- y. g& O                }# h- F  ~5 U1 H/ k- J8 V
                HC595SendData(0xff,0xff,0,0);                                                                                                                                      6 i4 k& t' S& F1 i5 @4 J4 x
        }
  w0 B5 p: X) J' b- a  J}
0 i4 s* p! B8 E
/ p# [- O3 }, b) r2 v+ n7 h! p0 F( [
- v2 u# R# Y( m. W
void HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0)
& z; b( ^: @  Z* ^) i' x$ D{  % F2 M) P! D% ^5 O7 {- ]! F
        uchar i;- I' z# j* d' l) |4 u: G8 |

$ s0 x- j( D' K. h# h+ A0 \        //--发送第一个字节--//
9 a- [( V& Y5 I- d4 N( O        for(i=0;i<8;i++)
  W' l( s! Q$ R+ M7 e4 p8 z/ E        {( q" ~9 |, P) p$ i; w6 h' U
                MOSIO = BT3 >> 7 ;        //从高位到低位
# G5 t* m7 m; @6 A4 i$ d                BT3 <<= 1;
: h" o  j9 J! t3 w, ]5 _
" Q+ O* m* i: ?. h! |                S_CLK = 0;
/ |; R6 w# Q: y, b% l) ~                S_CLK = 1;                . h, A/ a6 o, Q4 p( T3 ?
        }
  a5 ~) t7 {7 t# C) O0 I; ]2 z# ?( k7 G  b
        //--发送第一个字节--//
& Y7 S" Z9 d7 l! E1 @" t. d( `        for(i=0;i<8;i++)( y3 [1 w" j" H7 l( s% ~7 ^
        {: N6 c" X2 q2 j! z: n2 O% U7 Q
                MOSIO = BT2 >>7;                //从高位到低位
5 s3 Z7 E/ Q* X* N# B- D                BT2 <<= 1;+ [2 ?# N8 F, {9 c% C3 B* |7 n  b

" q8 Y/ d+ l6 d+ N                S_CLK = 0;5 I8 n+ y. k4 d. W7 K6 X
                S_CLK = 1;        1 m  W% I8 r, M# o: Y5 b
        }
: P& S5 h6 O) m5 R8 P5 K: e+ U6 [) O/ ^" V; ~! U
        //--发送第一个字节--//% Y# S7 M7 u: E4 {4 c" s( l" D
        for(i=0;i<8;i++)( \9 q+ M' C; t  @$ s# {
        {0 s5 X: F5 ]# P# X/ a
                MOSIO = BT1 >> 7;                //从高位到低位5 D* i; X0 H* m
                BT1 <<= 1;
( b/ y5 X( `. ~9 L7 v* t5 }                S_CLK = 0;
/ b2 m9 r3 Y8 F6 X' y                S_CLK = 1;        
$ o. s0 O+ W! D        }
1 H/ u2 u& d% m$ s0 Y( n
# N8 y( \% r, D2 F2 w        //--发送第一个字节--//% h9 y  N/ ]3 O4 x
        for(i=0;i<8;i++)
; e- t6 G' s4 g0 K( A3 m        {
' A( _/ `  l' `' p. t8 o                MOSIO = BT0 >> 7;                //从高位到低位; I' f+ B, R- G& U
                BT0 <<= 1;
: g, C0 X- L; a1 L* o                S_CLK = 0;
$ P/ N% Z# |9 x( m. N                S_CLK = 1;/ H" J# ]. B8 J9 f
        }" `. v7 F2 B+ G

2 \( H" x: s  ^0 [& s7 I        //--输出--//
% U% W/ x7 T+ A6 F0 U3 ^/ Q& J- H        R_CLK = 0; //set dataline low
( v) Q; E% D$ p4 d+ {1 U8 C        R_CLK = 1; //片选
5 k3 I+ T% w( J' D        R_CLK = 0; //set dataline low
, |0 g/ K& I8 l; \0 O/ I}. E' J0 C6 e: B% Y+ v$ V

5 i. A& P! E0 l& wunsigned char Key_Scan()
9 x* J7 ]$ z2 Q7 @* Z% u; L8 J{+ s' F+ I( }0 q* }
        unsigned char keyValue = 0 , i; //????5 B. x8 Y, j, Q9 L) [
+ k$ j& m; D3 E& I2 z
        //--????1--//4 ?% V$ _& l" x) s/ Q
        if (GPIO_KEY != 0xFF)                //????K1????
/ E/ M3 O1 [. e0 n6 N  k# d5 R' X        {
- v: V/ _' k. d) m- Q# Z                Delay10ms(1);        //????% O1 W5 r. y. b" Q% X

3 J9 F1 S2 r7 a                if (GPIO_KEY != 0xFF)        //??????????$ U( q% e! k& m' p
                {
1 g! q! X/ F' t9 d                        keyValue = GPIO_KEY;! H9 s- Q. ~' i' r8 t9 \- a
                        i = 0;
6 x& C+ v9 d6 |4 ?                        while ((i<50) && (GPIO_KEY != 0xFF))         //????????
4 a5 I$ H/ U$ G4 `# `& I                        {
5 E& c6 l4 X, u7 l                                Delay10ms(1);; f5 @# h+ m  `9 D9 A( }8 g
                                i++;
, V1 M* h: Y; y) b8 `6 u) s" e9 h7 A                        }! {- Y9 H5 y0 E2 \
                }- x8 z( u- O, ^+ X% W' i# l
        }
' M( n8 B' \( i- Q; C& V3 w& _) a; A5 P! c7 G: H0 Y7 ^

3 }% N2 t2 R& A1 S& v…………限于本文篇幅 余下代码请从论坛下载附件…………) U% I2 X8 z, g9 @7 O
游客,如果您要查看本帖隐藏内容请回复
' V9 m: f3 {  V; N' W  x

* ]1 W7 A. K0 d; Z

该用户从未签到

2#
发表于 2018-11-26 10:28 | 只看该作者
学习了 谢谢楼主
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-9 06:18 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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