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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
16x16点阵使用两个74HC595显示图片& S; G! n- W: r( M; ~

3 n$ {0 d! I, g* ^. b/ N
0 k6 {4 f6 l; v/ i! E

, |$ X1 M( l! S# D" n#include <REG51.H>* o% N9 r( ^' r" ^0 h+ J# z0 h* [
//--重定义函数变量--//% y: j* O: J0 G4 {
#define uchar unsigned char
1 |' a; M9 p1 f% v% ?#define uint  unsigned int# T8 j, u& A. i; G4 m% W
#define ulong unsigned long" E3 _2 A) o% F7 _
#define  GPIO_KEY P1 5 ~, F3 S3 N7 c, n# o+ v  Z! ~+ z

/ X7 S% f5 J* m! s7 l//--定义SPI要使用的 IO--//
) _& u7 W: k0 C. Q8 g* g0 Wsbit MOSIO = P3^4;
+ [' `) H4 d, O% S% H  @sbit R_CLK = P3^5;0 U& H' Q* ~) E* X
sbit S_CLK = P3^6;: d1 ?7 E0 u- |; E* {: B0 k
* i$ ^/ G! x1 a1 a9 j5 H
//---全局变量声明--//
& `4 d& Y: n* xulong column;   //点阵列
, W1 D" B$ g9 A0 A3 ?ulong row;      //点阵行
. }( T+ y5 h6 A! I0 sulong dt;
" u* Q2 d4 `$ D. V% U6 r, Avoid Delay10ms(unsigned int c);
% u8 g+ R9 E* U! ~9 L9 vunsigned char Key_Scan();8 i( k% b0 \9 K5 c5 P
  i8 G4 u. s% V, Z3 K! [
//--点阵显示数组--//( b' e+ Y0 y& t! M1 }
unsigned char code tab0[] =
8 ^, y2 j( L3 \' m$ o{0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08,. v& b" p6 J5 C# Q
0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80,
2 Q1 t* W) _, w6 ^ 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00,
1 ~# G6 g* j# ~9 \- W1 d 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00}; ( _* ]+ }1 g7 U& E& [

  h+ M+ l5 M( ~6 X
6 M- u( O. U8 ?" xuchar 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};7 S* j" U5 d& w, S# i6 V; a* ]: {& v- ]
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}        ;4 ^/ j! _0 {$ F: 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};7 G1 V' C) O5 H; D) N" `( t7 u  ^
uchar 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};
( [! W9 A: o+ m% x4 C  x$ k5 N" Puchar 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};
7 a3 U  F+ g* ?. u4 l$ A1 X% ~% euchar 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};$ w5 g  ^) \8 C2 k9 t
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};7 B) v/ z/ U1 i2 K- @
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};
6 i9 d* g* Y0 y. m1 C' r
0 r% ^- g2 P  `8 c//--全局函数声明--//0 I: H  D% d% D: q, u% C# D/ J
void HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0);
3 A/ o/ ^( b6 u% X+ o9 @
( V: e; Z6 S. V8 U% T$ a" ^2 ~' Y; Q5 v$ M0 h
void main(void)8 C1 H' s3 m  F7 X: v
{+ B$ n2 U" _/ b$ y( W3 l8 o
        int k, i, ms;
) i+ q- ~% w$ \$ Q7 Y1 Q% t        i = 40;                                        //显示时间                                                                                                                                                                  
3 S& [3 J: Z! y- O        while(1)5 s" s& \1 d5 ?: @$ t9 }% O: n
        {/ t" |# |2 u1 N8 f6 b0 A' W
                //--显示10--//
: Q" d3 f3 h7 g7 a2 F: G! e                for(ms = i; ms > 0; ms--)! Q2 G5 ~% B9 f' D& P$ p
                {
* Q8 q3 N7 |( X$ H* Y  w                        for(k = 0; k < 16; k++)                                                                                
/ ^1 F: {$ T4 c5 n                        {         3 B; |; E) P1 ^' i  q  M  S5 |0 H3 l
                        HC595SendData(~tab1[2*k +1],~tab1[2*k],tab0[2*k],tab0[2*k + 1]);
7 u3 ^% N6 u" c$ m2 L9 Y9 ]                        }                  ) K/ V/ d4 i' G
                }
; r4 R6 i3 s# h. b1 G* @% V4 B                HC595SendData(0xff,0xff,0,0);                                                                                                                                             
/ J2 X8 W# i  s/ N
+ H! x$ G4 v" ^& |  t0 j; `                //--显示09--//
2 c4 H, O# }% N  |  U9 D                for(ms = i; ms > 0; ms--). d& _5 b5 C) E5 `6 A/ {3 T7 D2 y9 F
                {
# ^* W. ^: w# z1 `7 K$ S                        for(k = 0; k < 16; k++)                                                                                            - ^1 c4 \0 H6 ?5 V1 ~! r& ], H
                        {         2 p% ~! v  f$ m- C2 y/ W2 i
                                HC595SendData(~tab2[2*k +1],~tab2[2*k],tab0[2*k],tab0[2*k + 1]);                  % t0 Z. g& \" X" _0 L
                        }6 n- O, x7 a4 \( e
                }
9 M' x2 [: V" k7 E1 o3 _) a                HC595SendData(0xff,0xff,0,0);                                                                              
5 U# A: P2 W+ y5 n+ `& w9 ]
( M" y' ~4 J8 a                //--显示08--//
+ K0 X4 B+ F% z0 X4 l  E5 j                for(ms = i; ms > 0; ms--)
+ Y, D! }+ ?) }5 `2 s                {
6 L$ f0 L$ C6 k- d                        for(k = 0; k < 16; k++)                                                                                                
. G% R% ?4 S4 g  p* A; A                        {         
0 R# P' L" `; E4 B$ }3 c: u8 I/ ~9 @                                HC595SendData(~tab3[2*k +1],~tab3[2*k],tab0[2*k],tab0[2*k + 1]);                  7 P% K( i/ ~3 T6 o" i
                        }
1 T4 N& G1 u# x6 e0 I                }        + }2 t8 n7 ~% s: U
                HC595SendData(0xff,0xff,0,0);         2 Q! K8 z9 B$ f2 h" \
1 a/ U* t9 u" s3 A
                //--显示07--//
. p$ r: h4 s. {                for(ms = i; ms > 0; ms--)
2 ^/ d8 C: P* {: M# I0 W                {
$ F: R) \! q8 L) G0 N                        for(k = 0; k < 16; k++)                                                3 [( O. u5 v: L! D6 Q" T; V* G# Y
                        {         $ K. K! ^7 Y3 a' C
                                HC595SendData(~tab4[2*k +1],~tab4[2*k],tab0[2*k],tab0[2*k + 1]);                  . W4 l7 r- f, A; b
                        }
1 {  [! ?+ w2 r8 I                }        ; d# N! U6 P( F. y/ e
                HC595SendData(0xff,0xff,0,0);                                                                                       
/ h, p! a% H! M; C' Y( I
4 e* t; T# ], P5 O" V7 R                //--显示06--//2 x* A# \% h2 [
                for(ms = i; ms > 0; ms--)$ p) R: V1 p8 e# {
                {
8 q8 Z. i& D& M1 |7 r% q                        for(k = 0; k < 16; k++)                                                                                                
, Z/ O* ]. [% n$ ?( }! ?' X                        {         & J. u9 k! h  ?+ l
                                HC595SendData(~tab5[2*k +1],~tab5[2*k],tab0[2*k],tab0[2*k + 1]);                  4 A9 Q  \  f7 h
                        }
, }0 r/ {8 S+ J9 x7 [+ F0 |- T: r. \                }        
/ F! }- V0 ^4 }* a/ L7 ]" L! t                HC595SendData(0xff,0xff,0,0);                                                                                       4 ^9 N% J* \4 ~5 }' @
: b% E% P4 T) H/ C7 T
            //--显示05--//
, ]; M0 }2 V% H! `" T  Y0 C$ A                for(ms = i; ms > 0; ms--)
% g& O% W+ b0 e) B  i/ J1 E$ Z                {/ P3 i2 f) P7 j& m7 Y% W
                        for(k = 0; k < 16; k++)                                                                                                //欢
  ?  N7 ]' k/ [' U                        {         
" n5 x4 z7 _( D1 }( O, x                                HC595SendData(~tab6[2*k +1],~tab6[2*k],tab0[2*k],tab0[2*k + 1]);                  
. F! k* B3 _  c4 i5 K3 ]% f                        }
3 [  W5 R, M% e8 }1 W+ \3 h3 d! N                }        ( {& v. s. ~' M% y. Q
                HC595SendData(0xff,0xff,0,0);                                                      9 O1 v2 c0 I# D- e* @
6 v7 X/ d: D& y- ?4 y, C, C6 A& k
            //--显示04--//
' s0 j6 S! x: z4 D  z6 Y8 o                for(ms = i; ms > 0; ms--)  W6 E! D, V. [' k( q
                {9 ^) C6 h+ `8 H% `/ s$ @
                        for(k = 0; k < 16; k++)                                                        
9 R3 R6 T* s& @* P, l                        {         # {0 R7 R8 k" X7 ?$ y+ H' l7 y* D9 X
                                HC595SendData(~tab7[2*k +1],~tab7[2*k],tab0[2*k],tab0[2*k + 1]);                  
% u: Z- @6 x+ i                        }% p6 {0 l5 z8 o2 I. n* r
                }        
% i( u4 y& j( J. c  C  b+ o                HC595SendData(0xff,0xff,0,0);                                            
6 }) `9 d' K$ K. K  O
; E% }2 l- H4 B0 N                //--显示03--//0 W, I0 }+ ^0 m4 B
                for(ms = i; ms > 0; ms--)
; P6 F2 h3 x8 P                {: U- T& {' S6 y1 M
                        for(k = 0; k < 16; k++)                                                        
9 A0 i  p! [: G' J- d' W- P                        {         : d0 u4 W3 m: ^( C& k5 G$ e
                                HC595SendData(~tab8[2*k +1],~tab8[2*k],tab0[2*k],tab0[2*k + 1]);                  ' z7 N) y' q( b8 ~, Y" k( Q" n
                        }
) N! ]9 M5 \4 w1 K7 Y+ d                }1 M5 G1 I" r( S( E2 w& p4 V
                HC595SendData(0xff,0xff,0,0);                                                                                                                                      & a  n5 b; s* ^. J: K9 K& ?" K& K
        }6 [( ^2 f; X8 a6 s6 c7 }' E2 d
}
, h2 ~4 x5 W. `8 \
8 R; |+ E. z& H4 z; F. U% ^1 S
) c. \* l* J. X$ @! L- M7 i1 {8 f
( e+ Y; J# l) r& @9 T! [4 lvoid HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0)  Q- P) l& D3 e# A3 z7 J
{  
) e. @# ?1 ^! |( t/ K7 Z        uchar i;* W" H) A5 I$ x9 L
1 n+ J6 B- m2 T# i! {- s, L7 K
        //--发送第一个字节--//
& i7 }1 c& s) d& p- O" W# ?" j6 G        for(i=0;i<8;i++)( Q$ s& N7 Y+ S( S- e
        {5 O7 Y# S. Z, K9 I1 |9 r; Q& d, M. Z
                MOSIO = BT3 >> 7 ;        //从高位到低位
& F) n" l+ {% K3 z8 b. f, A4 ?                BT3 <<= 1;/ I: c3 W/ {; X2 G& m' B# r) x

  c' r2 b' T4 U" i* u. X( C: i( Y                S_CLK = 0;
8 y- @7 `2 r, E3 L! L) T% o                S_CLK = 1;                , \; i4 {* ]0 W" |- \; |, o
        }
' }  P6 G6 R; O  P" B4 _
# H0 K% H4 W8 R+ L4 _0 p$ P" b        //--发送第一个字节--//% s- |- s$ q7 |* G$ |4 B% h. P
        for(i=0;i<8;i++)* ~# C5 h/ U" \. u
        {6 x! r( r2 {9 i  w) I
                MOSIO = BT2 >>7;                //从高位到低位# D' \5 a1 @5 Q8 w7 i
                BT2 <<= 1;
; G2 [# t) n: U$ A1 J
# r' H5 ^2 \. Q0 A0 I- q; m7 X' |                S_CLK = 0;2 t7 X" U  o6 ?5 P
                S_CLK = 1;        
$ A6 a6 D2 A2 L6 }        }
/ o7 o8 L: M# V5 Y& q
7 z+ [+ I# `! R2 N: H        //--发送第一个字节--//
9 D4 ^* t* \! h9 c5 i) \        for(i=0;i<8;i++)
* Q7 g) X0 U( R; ?- B3 Y        {
7 h8 w: m. S/ e                MOSIO = BT1 >> 7;                //从高位到低位. M3 u0 L& F( I& ~" Z- [
                BT1 <<= 1;: ]' j$ e, L+ q6 r
                S_CLK = 0;( m& ?1 l4 G& H: S+ Z
                S_CLK = 1;        3 |) c' |1 b6 M. b4 [
        }
4 ?  F$ h+ A1 J0 a. ^" i
6 D2 O( Y" r8 {; H: O1 h: V        //--发送第一个字节--//
$ O; k1 p% C- M1 \( d2 V        for(i=0;i<8;i++)
3 d! f$ v+ z0 C8 U( H, ]        {2 u+ E5 Z$ H# }4 Q. S6 s. N" `
                MOSIO = BT0 >> 7;                //从高位到低位8 i5 w. o9 d% J$ G2 r9 F* q& g
                BT0 <<= 1;
% z, _/ V0 O  ]$ r+ E                S_CLK = 0;2 `; r9 j( m1 \5 {; `6 t' M/ V
                S_CLK = 1;3 Z& w7 S, B2 c, n- H
        }
4 M& h0 C3 X  R" @  q
  J" K7 K- e: s; |        //--输出--//" j3 k, \! X) H' d( h
        R_CLK = 0; //set dataline low5 Z# Y0 t/ W9 m9 Y2 s8 r' V
        R_CLK = 1; //片选
8 y3 `1 ?- R2 s3 _. [        R_CLK = 0; //set dataline low
& H; n) b% r8 |  m" R9 z3 a}% O, A7 f/ v$ p

- R/ `$ ]7 \% s. b7 d9 y! o. q# J+ Runsigned char Key_Scan()
1 o* \/ R" b# v{
2 T5 X- o! L' |4 \* t+ x        unsigned char keyValue = 0 , i; //????
+ w- n. ^. p* j0 N+ S. F8 E% i0 O* c1 ^; L& a
        //--????1--//
2 _+ G, L7 w8 F8 B        if (GPIO_KEY != 0xFF)                //????K1????
5 m- Y: P5 ^% K        {0 Y- J0 |2 q$ ?" N! M, H7 q
                Delay10ms(1);        //????
! @0 z* \& o- }% p3 n/ D! y
3 P+ B# r! I* m: R; v                if (GPIO_KEY != 0xFF)        //??????????
$ e% I9 b$ l, z2 ^7 H6 i1 t                {
- T  f0 K  y9 i1 i3 ^) i  B: ~                        keyValue = GPIO_KEY;
+ m( \" @- c4 s$ j* r$ I. }                        i = 0;2 a$ ^8 ?7 K( @6 X4 k4 k8 Y
                        while ((i<50) && (GPIO_KEY != 0xFF))         //????????' ^, D# g% u' `' Y
                        {
2 b& `' D: _# R                                Delay10ms(1);
5 G, v2 ~4 t  ^& v) Y- c                                i++;# }5 E% B/ D9 r; K1 \
                        }
, v- K3 _+ |4 `' Q" x4 R* `                }3 l4 y& w2 `) Y2 Q$ F" c
        }
$ n" a9 }  a3 m- W/ f
: I8 S) E( N( K- P" w+ v
, f0 j$ T2 Q! B7 M) {…………限于本文篇幅 余下代码请从论坛下载附件…………' a9 F8 u" i" n# @2 v
游客,如果您要查看本帖隐藏内容请回复
) b5 A/ `7 ^, m- R: ^

  T3 c4 T2 f' v

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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