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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
16x16点阵使用两个74HC595显示图片
% ]) s- Z0 j! v7 {  K; X
6 V& q* x  _0 z' K0 ?/ T& U

1 H9 U+ D3 \' l+ j8 ~0 Q9 Z$ n( n6 H4 i2 H8 o: W! j1 T8 Y
#include <REG51.H>) o' k0 ~# c# y, J8 ^
//--重定义函数变量--//
: L2 Y# [8 }8 ]8 T- ]9 ?2 R#define uchar unsigned char
9 b% F$ L( E% b0 Y, C+ z5 i/ D0 X#define uint  unsigned int
$ t  w0 d# j2 @* w: `) D#define ulong unsigned long1 z: X) c' m, a) t# E# h
#define  GPIO_KEY P1
, g% k6 ~/ `) E" Y! e7 Q: m, r" v  w# `- b* v
//--定义SPI要使用的 IO--//
. r# \# \4 [8 A# wsbit MOSIO = P3^4;3 o# E4 I  S8 g% ]& h- Y1 \5 V! [+ }
sbit R_CLK = P3^5;
, e" B! }8 S- _/ Ksbit S_CLK = P3^6;
$ u' J6 t/ l, h8 x
' B4 D( _/ {) x' O: W$ \//---全局变量声明--//
; p( R' c7 U  o3 f$ culong column;   //点阵列. K" ~( Z# n* W3 M1 P+ w
ulong row;      //点阵行( w4 a0 W9 i5 g8 {- e1 C
ulong dt;2 A) d6 u6 S2 |1 ~
void Delay10ms(unsigned int c); " W$ X7 g; W: T: G; w+ l% ?+ r0 E0 Z
unsigned char Key_Scan();: J: K  n+ z4 m% [! P) _/ u
* G& u3 Y/ j8 V( E
//--点阵显示数组--//# `! \1 C# j  f. x' H. N
unsigned char code tab0[] = ; r$ v1 r7 I$ J9 e' W8 b9 c) F
{0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08,
+ P% h. J$ E: ^1 N 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80,
; r! t  N5 P2 o7 |9 V, g, r4 j 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00,/ k$ H/ R6 m+ @+ e: w$ L3 ]
0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00};
- w! u; b& v& [
3 _. g+ v% H& n# P$ H0 G+ {  T* G" y1 P. u2 q
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};
/ q5 j2 j0 j( ~uchar 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}        ;& ]8 _8 S; u' T% a) T6 M
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};
! m9 W" j7 M7 m1 E: @3 Yuchar 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};9 `6 |7 H0 O: T1 r
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};
' Y& `% m; c, `/ \; H$ juchar 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};: q: X7 Y- _& B8 r$ E" u( I( H
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};
  d; C0 U# \; f- ~* O# Buchar 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};7 [* Z2 ~; h: x1 X
. ~6 s2 k9 i$ K  \
//--全局函数声明--//' u. @# r$ e- O$ r
void HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0);8 `  }1 V9 {* ?7 y

# M6 f, ?1 B! I3 n2 f5 |9 g
2 g! R+ r. }; o) ?void main(void)
3 y% J& M4 e4 T7 J{
" [  o1 ~, A5 F" X0 b8 J        int k, i, ms;
5 [0 a$ q% G/ s# V$ m        i = 40;                                        //显示时间                                                                                                                                                                  
; z5 d. a6 z* F) \        while(1): ]' p2 O0 ^' P4 U2 e# w' u
        {6 t3 E2 N$ M4 Z  Q  I: ~% T
                //--显示10--//  t) D4 G& ^" Y0 z, _
                for(ms = i; ms > 0; ms--)
# R3 T3 g: I7 K1 b. z                {
8 o  R, W4 w5 F. n* {                        for(k = 0; k < 16; k++)                                                                                8 h0 @6 S) _, {0 M7 T$ X/ l
                        {         * U1 c2 |; |( g6 }- h; {, T) u! T
                        HC595SendData(~tab1[2*k +1],~tab1[2*k],tab0[2*k],tab0[2*k + 1]);
% U* D% q) w* K: ?  L' K                        }                  - [, o% l# T+ ]# Z, |2 X
                }
5 v: ]6 d$ F/ t  U                HC595SendData(0xff,0xff,0,0);                                                                                                                                              ( c- U7 B* c, e# N0 `) E2 b4 t

2 O$ s4 v6 \! V* x, \& ]                //--显示09--//
- j! a: u5 A; q                for(ms = i; ms > 0; ms--)0 J' n: E% N* f6 l, ^
                {5 J* Y9 D6 A  [7 i8 {7 G
                        for(k = 0; k < 16; k++)                                                                                            
8 H, f/ i, e7 j# v: t! b0 F                        {         ) K; |+ V% g4 K
                                HC595SendData(~tab2[2*k +1],~tab2[2*k],tab0[2*k],tab0[2*k + 1]);                  8 U. \' G$ H, L( Z( L
                        }
# v5 n  l8 K' A                }
. L1 H2 v! ~  i. {- s                HC595SendData(0xff,0xff,0,0);                                                                              # S" A& J0 K6 r, q& w5 o
  n# g' u* h. l: g; V0 e
                //--显示08--//: o8 w. p2 P: w  d
                for(ms = i; ms > 0; ms--)
8 Y5 E8 \( |, L                {9 d4 `( ~! c# i& s
                        for(k = 0; k < 16; k++)                                                                                                
) B1 R6 ]7 i0 B, E! ^3 ^                        {         9 W1 X" x6 P9 N
                                HC595SendData(~tab3[2*k +1],~tab3[2*k],tab0[2*k],tab0[2*k + 1]);                    S2 `' K) C9 }8 R3 P! @8 H
                        }& H3 W4 N- @: I( S6 S# i8 s
                }        
" r2 U# @3 ^  p0 r                HC595SendData(0xff,0xff,0,0);         1 {5 s9 i: R1 F* f0 }% I: l

, V) ^$ [/ }5 h/ F( u( P                //--显示07--//, q" ~7 E$ B, \" s5 Z6 {
                for(ms = i; ms > 0; ms--)( N' a# b: o4 u5 x! S; i
                {
( W- n- c+ c+ }! @+ A                        for(k = 0; k < 16; k++)                                                
6 x% K6 ]4 c' Z; k                        {         
1 a8 }. o' M4 {0 t( }5 K' f                                HC595SendData(~tab4[2*k +1],~tab4[2*k],tab0[2*k],tab0[2*k + 1]);                  ; r" i7 N* T$ F" d& ]5 W. E2 G
                        }" _9 m+ m4 {) h; s
                }        - k& D9 ^; F2 \
                HC595SendData(0xff,0xff,0,0);                                                                                        ; L( q* E! Z' D8 R- {

( u$ j; _, n! h) K; A* C* E$ K                //--显示06--//* T8 e- p6 c6 D! I' Y+ _* K9 B
                for(ms = i; ms > 0; ms--)0 I+ Z- p* R5 {$ F, N
                {
* d% Y2 E: a1 j" ~& E8 b3 N9 v                        for(k = 0; k < 16; k++)                                                                                                7 [; S/ X, l) G( `: m" r
                        {         
$ |+ e: ?; S# h3 u+ Z) g                                HC595SendData(~tab5[2*k +1],~tab5[2*k],tab0[2*k],tab0[2*k + 1]);                  
# O! `( I6 O, c+ s6 s/ Z' v- `/ [                        }
$ M# N! `1 u2 d6 ^; a                }        8 F9 `4 L, O! f, h
                HC595SendData(0xff,0xff,0,0);                                                                                       
$ d) L0 M( C6 ~' K8 X# q& @/ @* R# U! q% a) P+ y7 h
            //--显示05--//- w9 U& ^5 d# k. n
                for(ms = i; ms > 0; ms--)
6 i9 [9 A: K" S6 ^2 ~- {$ s                {3 f5 L2 J% M4 R: @
                        for(k = 0; k < 16; k++)                                                                                                //欢
0 Q7 w2 Q" J7 y3 |) D! _: A- A                        {         2 H/ {  w% j" H- ?, E  \
                                HC595SendData(~tab6[2*k +1],~tab6[2*k],tab0[2*k],tab0[2*k + 1]);                  
1 k; b. p( u- D# u* d, f3 b                        }
( `; V; c! Y; H1 K                }        
! C& D$ {; G% U2 B1 B8 P8 V: ^1 d                HC595SendData(0xff,0xff,0,0);                                                      - f5 ^* _% `% I- _& g
) ~* Q- Z$ @6 ?4 m0 f, Q
            //--显示04--//
' f: \! L4 R! n- ~$ `                for(ms = i; ms > 0; ms--)  T: T/ ~9 J3 M: S  q4 Y* j$ v
                {4 B5 Q8 Y: ^! E
                        for(k = 0; k < 16; k++)                                                        . l* ~0 n* Z6 F4 w$ Y
                        {         0 g0 z% `, T4 ~# s9 i% z1 Q
                                HC595SendData(~tab7[2*k +1],~tab7[2*k],tab0[2*k],tab0[2*k + 1]);                  7 H' r5 G( T' R; H6 ?( t4 b3 Z) ]
                        }
6 y9 N( S' M) a* C! i                }        ' s  }: e/ h4 ~7 K! {2 i
                HC595SendData(0xff,0xff,0,0);                                            7 [6 a* I, W% D, _
5 h5 h( x% c, G5 e' H
                //--显示03--//# `2 o3 w( o7 ^# q9 d/ S* I
                for(ms = i; ms > 0; ms--)$ [! e( n2 o# h" q( Y# G
                {- [* U" Z7 y* p6 z2 A; @% Q
                        for(k = 0; k < 16; k++)                                                        
- ~1 H7 s4 k6 |( v* m                        {         3 W, X; n2 n8 Z( V- V& J6 D
                                HC595SendData(~tab8[2*k +1],~tab8[2*k],tab0[2*k],tab0[2*k + 1]);                  
" }. C) x( n& j                        }3 I7 T$ M4 A  c' w
                }1 o- }! I6 O. H2 B" x
                HC595SendData(0xff,0xff,0,0);                                                                                                                                      ! ~* v7 k- i# b% C7 B4 W, M
        }! d! t  n4 ]! C- b3 V2 r& U
}1 O' P  L6 o2 n) w2 c2 g
$ Z3 p3 O5 F) k1 f% j* c$ x
2 c6 J( F; T" @! D0 B

$ ?, o2 C( S  z7 h% Y* {; Avoid HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0)
  t9 s$ @1 }1 i{  " S9 D0 p; X6 R2 ]8 K3 c
        uchar i;1 T' |! r8 }& k
. O0 A% H: g8 B5 r6 d4 z
        //--发送第一个字节--//0 v$ G: e+ P* v+ \5 D6 Y: r) ^
        for(i=0;i<8;i++)& [' ^  ^+ u1 b* o4 ~
        {
) Y7 s$ @. D6 N2 T) n0 p8 N3 k4 S                MOSIO = BT3 >> 7 ;        //从高位到低位; w3 z0 M' E4 L5 {/ p
                BT3 <<= 1;/ m! ]. i0 Z+ e. w
3 r) y# N- E; D: z
                S_CLK = 0;5 e6 U  [  S$ }8 A
                S_CLK = 1;                ( R  P& g7 ^3 G' O
        }2 A; t9 Q1 d$ O0 s1 F. ~# a
: P( g% A. X7 F: {+ O8 ]1 h4 a8 F
        //--发送第一个字节--//3 ^. T; x7 N! R6 s, \
        for(i=0;i<8;i++): c6 ?$ L5 ^5 h: x5 \1 H
        {
" Q/ k$ I' K0 J4 d: b1 C" K; p                MOSIO = BT2 >>7;                //从高位到低位/ _3 K! J/ F* p$ p, ]3 r
                BT2 <<= 1;# s( f  H; e, @7 g

5 ~# m) g% H7 `" V                S_CLK = 0;: ~( r5 p3 [$ H# B# b
                S_CLK = 1;        4 A+ b$ ~! w! ]8 Z$ J! S# B
        }
7 W- B0 T$ z* D) H8 S1 e6 ~
; I2 ]- [6 C) |) a8 e        //--发送第一个字节--//: b0 \* }9 O0 Y( S
        for(i=0;i<8;i++)
& v* g5 f" w: }4 B        {: \: A5 U9 R: W) h
                MOSIO = BT1 >> 7;                //从高位到低位, Z; g  ^3 Y8 [
                BT1 <<= 1;
% \3 T, k6 y8 g  b7 O  X* A" @- N/ l                S_CLK = 0;8 t/ u, F* k7 g4 ]: V$ C
                S_CLK = 1;        
! A  ]) U) M2 \$ K9 O' V        }1 X9 h2 N7 P8 H4 J% {4 @

/ m+ o' j' w* G+ f/ W        //--发送第一个字节--//
; v5 t4 W. `6 _/ ?  b( |0 Z! B        for(i=0;i<8;i++)" M% p1 Z1 k" t1 |. p3 d9 \) S
        {- T$ }$ m/ N$ u
                MOSIO = BT0 >> 7;                //从高位到低位% W; P+ a5 ^5 E9 U+ r
                BT0 <<= 1;
0 U2 R/ |+ r0 [& K$ P$ c                S_CLK = 0;
. L0 u# I5 `, T" x                S_CLK = 1;
. Q/ {- h& C* r        }8 n6 U) b) F4 |/ R

" _5 J3 k% ^. ?        //--输出--//
, B: a; d. L2 i) N        R_CLK = 0; //set dataline low
/ h7 t$ r3 N+ z$ K" B1 ]        R_CLK = 1; //片选
1 A. j) D) d9 P; r$ ^        R_CLK = 0; //set dataline low
2 s4 e# e( p$ |}3 b) P' }- Z# J9 d( l  q
) u" c; s7 N) N" t7 M$ L
unsigned char Key_Scan()
( Y) f. F( ^7 C& {{* e4 M8 ~6 r+ j7 u4 {
        unsigned char keyValue = 0 , i; //????
5 z0 A# Q! `  z
6 A0 b, l9 k+ N; B2 S) f/ ?        //--????1--//+ E& S: m# A: Y# N  ^
        if (GPIO_KEY != 0xFF)                //????K1????- [) U, h) H* M8 m
        {# {1 M( j/ Y: v! w3 w' X6 S
                Delay10ms(1);        //????$ F" @1 K3 G: y/ [
* I, h4 q2 M5 y9 D5 d: Z* ]
                if (GPIO_KEY != 0xFF)        //??????????# V. z  T8 A) |
                {
3 ~: c4 f" P" A% Z                        keyValue = GPIO_KEY;
! h( t7 ~$ p" N$ z1 h6 m: c                        i = 0;2 k) O  O" j2 }3 N: N
                        while ((i<50) && (GPIO_KEY != 0xFF))         //????????
4 m1 w6 H% A& {% J0 {5 i3 t                        {
4 l# l  W0 w$ Z+ d                                Delay10ms(1);
) }/ m! }3 B) G                                i++;
2 i0 a) i  j" C/ n7 A, f4 E' V  |                        }; J5 k1 \1 [# l  u. W6 x. _5 G, L7 G
                }
, T- t" V5 t! i# A7 O        }
" x( P1 L" V  X" p9 u2 c* p* ?* k' X

, y6 B* y$ |  r…………限于本文篇幅 余下代码请从论坛下载附件…………
! G2 b& |& u" q0 w8 Z5 z* j4 a
游客,如果您要查看本帖隐藏内容请回复

. N, a$ `( O/ m/ l/ L! o# U  S

) e3 K" K- k. p

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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