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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
16x16点阵使用两个74HC595显示图片& y# v) A  {4 D( y
& {& x1 S! M3 K2 g- S3 y+ n

# F3 v" U' Q) v# ^8 B! n6 j+ k9 `/ v( {  h7 ^1 C" l
#include <REG51.H>0 A, \8 m: @# n. p
//--重定义函数变量--//
( n$ k' U* |! o8 `4 `#define uchar unsigned char$ Q' v) \5 p  V4 C
#define uint  unsigned int9 e, @4 t, G& B, l! t) J
#define ulong unsigned long7 [4 P% L  [. l" A! ^2 j9 x4 g2 j
#define  GPIO_KEY P1 9 w' e' s( a! L' f' Q8 l  a
+ U% O2 Y. H1 u. S3 k3 t
//--定义SPI要使用的 IO--//
& N- l; L" @6 [/ j2 ^8 f9 rsbit MOSIO = P3^4;8 B- B  |9 l% ]( D/ [
sbit R_CLK = P3^5;: o; [6 X+ e# J% m2 I0 `3 w
sbit S_CLK = P3^6;1 N: f1 D( j8 _' g  b

( D. D) G# v9 X//---全局变量声明--//
4 M9 }' \2 t+ `ulong column;   //点阵列* b" A( V# l/ c) e# S& {$ k0 x6 r0 j( \
ulong row;      //点阵行
/ N8 a+ Z8 d% c" i# \, |" ^ulong dt;
+ Q+ |+ L. P0 D- {9 a# wvoid Delay10ms(unsigned int c);
8 }) `! q8 _5 ?" d' Wunsigned char Key_Scan();
$ H! C; r' o% h' h
! W( d5 l/ \; ]2 J//--点阵显示数组--//
" R7 Z3 ^# E+ C# k  Sunsigned char code tab0[] = 3 ?2 J7 u# J7 ?3 L) P+ v
{0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08,) s, S, v9 m5 \4 O4 Z# X1 T
0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80,2 O* J5 F2 O( I3 @$ ?& c
0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00,+ C3 X5 b, y9 s3 M/ j' N% T
0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00};
7 W  G8 V4 Y" {2 [: H9 Z+ w" u4 S! k: y
: I& c6 b) H) q% j+ P
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};
' x: O; o$ n8 `$ b. O& c) Tuchar 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}        ;
) r. F6 ~8 L; Z# Ruchar 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};9 c" F; s. J; ?& D: o: o! I
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};
! o. c7 P: n. c2 S2 d- w& Juchar 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};
, i4 L% }9 q% c, m7 d8 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};
! j3 P4 i& h9 A+ J4 J# S/ l6 Quchar 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};3 Y) S, N2 \+ n
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};, c: n0 X6 q4 i6 P

% L  d4 H1 n; O3 j& Y//--全局函数声明--//
4 L9 k6 `; l/ E' F  x" q8 fvoid HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0);
2 ~  w+ t* L) [9 |
  Y4 _. Z5 w8 O9 Y. Z
: @; p6 t0 r6 _  O+ P& m  ]void main(void)3 r" p9 G5 N. J/ [4 x
{8 k6 R& e/ k! b0 b" j
        int k, i, ms;
5 f+ Z- [6 E/ b        i = 40;                                        //显示时间                                                                                                                                                                   : c3 x& M, O7 w" l" v' a
        while(1)
. A- a) J, |$ {# `" P7 p0 P        {
3 ?8 K. k8 G. H/ j$ h  \                //--显示10--//
7 N/ a% n0 E( |1 _& c                for(ms = i; ms > 0; ms--)+ k' k) N2 f6 s: H- V6 b" A+ [, N1 D
                {
5 x9 c+ H+ w  q" c6 r                        for(k = 0; k < 16; k++)                                                                                
* x, D- f8 w: O$ A5 d+ m& f% V                        {         
$ j! q4 }7 H5 S4 z) n% k                        HC595SendData(~tab1[2*k +1],~tab1[2*k],tab0[2*k],tab0[2*k + 1]);5 Q* J; [6 U6 ?9 I( |
                        }                  
: l* r( `( E* \8 j                }% [' _4 b( B& M2 v( X4 d
                HC595SendData(0xff,0xff,0,0);                                                                                                                                             
$ q. h8 Q( R$ S  j% v+ x& C& D3 s2 T4 U; L, k# N; @) J
                //--显示09--//
+ \$ M. J+ U5 x. y* w/ |( J                for(ms = i; ms > 0; ms--)" f$ P- g+ U( W, w/ Z- E2 x
                {
% N; c) [9 E2 Y' T( J                        for(k = 0; k < 16; k++)                                                                                            
6 A( j/ f6 `7 i9 r" o" b: U0 p) N" W                        {         " \' S" V, h+ z' s8 H
                                HC595SendData(~tab2[2*k +1],~tab2[2*k],tab0[2*k],tab0[2*k + 1]);                  ( ~" [! N* h' q! v3 t; v
                        }
' w1 F. I: f; S% i+ w' b                }
/ D0 _2 b- N7 t, }                HC595SendData(0xff,0xff,0,0);                                                                              
+ L7 i  r7 b# Y% ?5 O
# [" P- M1 w. M+ k- j) Y                //--显示08--//
5 {6 b' C3 X) j7 l3 a, X/ ~8 x, a                for(ms = i; ms > 0; ms--)
2 s4 v6 {3 ?3 c& D# s                {$ P+ S7 D1 P( \/ S! w; I9 Z8 P3 _
                        for(k = 0; k < 16; k++)                                                                                                
# B/ ?4 @# R6 J  k3 I                        {         ) V  k2 h* o* |9 s, M3 `9 e
                                HC595SendData(~tab3[2*k +1],~tab3[2*k],tab0[2*k],tab0[2*k + 1]);                  & ]2 Y. S. v1 F& @
                        }
3 g: E8 y* k2 d" P                }        
" g/ P( T; o2 `( [$ l2 a& @; w1 k9 x                HC595SendData(0xff,0xff,0,0);         
, P- E! Z. r9 I# ?, P
+ a" y  D/ Z! x5 M# s; |                //--显示07--//
( ^9 P, ]% P2 b% {. |" a                for(ms = i; ms > 0; ms--)9 o1 s, S/ |6 x1 K/ {
                {
5 T4 A1 H0 t3 l                        for(k = 0; k < 16; k++)                                                
( D7 E% {& _( ?" s. o% o+ i4 S& C                        {         
' [$ _3 x( L- i5 \                                HC595SendData(~tab4[2*k +1],~tab4[2*k],tab0[2*k],tab0[2*k + 1]);                  
; T* v  K: W7 ]0 y) L- @                        }
! w' Z$ H" K& v4 F' r# X. S: `" ?                }        
% Z) I% t4 i! S                HC595SendData(0xff,0xff,0,0);                                                                                       
: h& q6 t: S" Y5 ^0 b) H8 Z0 X0 W' g0 E! n
                //--显示06--//
8 r% g; d5 o5 [                for(ms = i; ms > 0; ms--)( b/ r' y$ g# u. f& W: Q, _. B
                {' Y7 A0 }- N3 O
                        for(k = 0; k < 16; k++)                                                                                                % h6 \5 B& T( `! }
                        {         
0 T9 n( Z2 V8 `' ]0 S) N                                HC595SendData(~tab5[2*k +1],~tab5[2*k],tab0[2*k],tab0[2*k + 1]);                  
- i0 {3 p! |- H) Z8 |                        }
3 H  e, O# V8 x                }        
, t& d* b( u' m                HC595SendData(0xff,0xff,0,0);                                                                                       6 R2 T0 q( L$ R* S

- ^( \) z5 [! X3 r; U0 x            //--显示05--//
% K, f" D8 M# V- l6 g4 x1 ]4 r( l. D                for(ms = i; ms > 0; ms--)1 k( Q, l7 C! A0 q$ y9 W
                {' X/ R; u6 G! B: X
                        for(k = 0; k < 16; k++)                                                                                                //欢2 J% k. a2 _+ o3 ?" A. V
                        {         
% Z$ C0 t( h) F  K. V9 K# W2 g8 G. H8 x                                HC595SendData(~tab6[2*k +1],~tab6[2*k],tab0[2*k],tab0[2*k + 1]);                  
9 N0 Q4 m8 h) L# l& u                        }
6 V" r# d( C" S  @# }0 s2 ]                }        ; M% D- {- ?2 G) ^8 l1 R
                HC595SendData(0xff,0xff,0,0);                                                      ! E$ U0 Z! U  q1 ^3 F

: P# z- W. i' o; Q7 T8 k% u            //--显示04--//7 U' P( a3 {) r5 R: R
                for(ms = i; ms > 0; ms--)
4 O/ [5 k4 i! }% h4 z( c; Z                {; ^1 U5 i; f( D; y, Z) n
                        for(k = 0; k < 16; k++)                                                        9 J5 u. e% J/ y6 K% e3 ]) T
                        {         
& U! T) n% T/ p8 _; c& G. H                                HC595SendData(~tab7[2*k +1],~tab7[2*k],tab0[2*k],tab0[2*k + 1]);                  / _7 B1 R/ {3 h4 G: ]( E
                        }
' [0 Y: K  y8 \$ O2 a6 g- Q                }        " i* @6 K4 T# L+ }, L0 J+ V
                HC595SendData(0xff,0xff,0,0);                                            . W& o0 a# d0 m# B7 k, w
7 B$ W# K' a$ ]: E+ e6 r
                //--显示03--//) y1 G  R& r, a7 l# a! t( K
                for(ms = i; ms > 0; ms--)
8 @% K% [: t* g; G/ y- g& a; c" I! G2 ~                {
% R+ _! ~- k# ?  e; l! Y4 Z4 Y                        for(k = 0; k < 16; k++)                                                        , r9 G& C! y# D* c8 {  b
                        {         ; M7 A) |4 p2 H/ N& K+ U# b
                                HC595SendData(~tab8[2*k +1],~tab8[2*k],tab0[2*k],tab0[2*k + 1]);                  
5 e2 ]: _# |7 b' s2 U* k2 e                        }/ N3 d! P. @. _; @& o) }
                }
: }/ R5 M8 {! y- c                HC595SendData(0xff,0xff,0,0);                                                                                                                                      6 R7 f" |% K# l1 K; {
        }
. l7 g# t) S/ R}4 }# V; ?+ f3 p' [  g8 L5 @" J
' Z2 L- @! R( B- o. L7 T

+ U8 j+ Z' q% v1 ^1 @/ e1 g2 R. c8 p# T# i$ x! P
void HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0)1 V4 I& F2 l" W9 f
{  # T  O2 O% ]" V# j( @
        uchar i;# Q; y" B: t5 a) H" a: r! m
) I$ x8 }) M# {& j( `. t- L& g& i
        //--发送第一个字节--//
9 Y% ~; L' r$ |6 k; h        for(i=0;i<8;i++)
9 `" N& U% r& {4 H/ z5 f        {, `3 X  X( w% y) m( J. m* Z
                MOSIO = BT3 >> 7 ;        //从高位到低位
  j) G" i: T8 g# S8 p                BT3 <<= 1;) t6 L+ J- T( Y0 F
5 [$ ]! ~" w7 V
                S_CLK = 0;
/ ~0 P: Y7 z" v9 i+ T( n                S_CLK = 1;                ; M9 S6 D$ t  v  F1 X8 l
        }
  u/ ^( \# q3 ?* `5 z. f
9 y5 ?) i( L& o7 w9 K9 z        //--发送第一个字节--//0 t! u& I% J3 A7 V- K0 v) Q
        for(i=0;i<8;i++)- z# O! `) ]  |
        {
+ k* [) u0 G' F/ ]                MOSIO = BT2 >>7;                //从高位到低位
" k2 x* Y/ o. H1 O# Q% F                BT2 <<= 1;4 \5 ^6 w! f- O7 F8 c& ^4 {' P
' r+ T. |* r. S8 f8 X
                S_CLK = 0;" d0 t" H4 n0 ]/ Y: f  N7 [( `4 ?. n
                S_CLK = 1;        6 u# {1 L- Y- O8 r: u$ c
        }( I; k0 W; c/ F/ N, c
# S" X* x, H$ ~# g
        //--发送第一个字节--//% T+ h7 S! z! h- c5 O
        for(i=0;i<8;i++)' ~- y! ?' g) `
        {
; W6 f; n6 P8 A& H! l, b; v  L; m                MOSIO = BT1 >> 7;                //从高位到低位# v8 u8 u( B/ B, k' a8 k
                BT1 <<= 1;. g8 I2 J; g, q6 M# D( T  I& j
                S_CLK = 0;8 D" L7 L& U, u0 G- B2 ~
                S_CLK = 1;        
3 j* n* g, G7 W1 s# F% e        }% ]& q+ N1 l4 D
$ i3 [8 W+ x7 ~- h% i6 }4 a3 g
        //--发送第一个字节--//1 B/ B6 T: v$ o
        for(i=0;i<8;i++)
( p# t$ m3 {" D7 V8 [! V6 a        {
, I% J8 j- o# L1 h                MOSIO = BT0 >> 7;                //从高位到低位: J. {- Z0 w$ Y+ X/ o" J
                BT0 <<= 1;/ e4 d( o4 ~2 Z
                S_CLK = 0;
' g5 r  {4 p5 ^" M- o$ b                S_CLK = 1;
6 E/ V  p& ^  T8 Y        }. M+ L. z! {0 a/ Z" Y

. C: |. \* Q1 [$ b        //--输出--//
( B% U- }2 ~; H8 T, m/ ]: K( v) A        R_CLK = 0; //set dataline low
5 Y+ [2 \& k1 I& a- O        R_CLK = 1; //片选) k' S4 r: _7 _, X; `7 f. d* \/ n
        R_CLK = 0; //set dataline low# c" e; ^0 e) \1 Q% x, x
}
& f$ o! c. f$ ~# Q( J) E& A, t5 e4 _1 H, X, F( V
unsigned char Key_Scan()
0 C& f9 V# `* t9 \. U{
  P- W+ j# o5 O        unsigned char keyValue = 0 , i; //????% x& r7 R8 B* O3 D. r# [' ?- @( [# Q

4 |' u- C' u6 D! R8 L9 p) T        //--????1--//
' C  t" H$ w, T, X6 a$ X( R        if (GPIO_KEY != 0xFF)                //????K1????
, m7 U6 @+ X# q, e& K# r# D5 K        {
7 U9 e) Z1 w# c- r                Delay10ms(1);        //????
& L/ b' F5 \  t& a1 K- v
* l! d. O. I/ o+ k: l; K6 V                if (GPIO_KEY != 0xFF)        //??????????/ V7 O+ K  f1 u. ^5 Z( ^: w
                {
8 D8 I$ m4 ]8 O. v" L                        keyValue = GPIO_KEY;
' B0 X6 b3 d1 o                        i = 0;! J8 w( i7 f2 G& a6 [7 [; W
                        while ((i<50) && (GPIO_KEY != 0xFF))         //????????" \4 e* B" F3 `
                        {
0 F4 a& z8 `5 V; r" n# p: f                                Delay10ms(1);" C7 l' N! f5 s6 o3 G9 F$ u
                                i++;' t" f& \' i! p& i7 {6 y4 B* a/ R" O  I
                        }
3 q+ c. F. ]% M! j" w                }
5 [6 \2 A; m" E- s        }
! P; G; `4 q6 ^/ X. L
+ S" b! I0 v" a% L0 [; W7 |4 r" W
…………限于本文篇幅 余下代码请从论坛下载附件…………
5 n1 A2 [4 ^& A6 D# B
游客,如果您要查看本帖隐藏内容请回复
8 D* _3 g6 }( V7 N! Q; C

; v' q9 C) t4 L$ f5 G! c

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-20 06:44 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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