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

关于LED点阵显示汉字的问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
关于LED点阵显示汉字的问题4 ~& k7 t* m4 w( E
, `0 \6 Y' c2 w6 M# H
& |" ?# ~  r% N8 z& S
本人使用16x16点阵操作,使其显示汉字“普”,接下来我将会发段完整的程序,这两段完整的程序区别只在于主函数有无while(1)循环,我发现两个程序结果一样。
4 i# p, D" B3 N9 n' C5 E. d3 `但是,本人认为第二段程序由于没有while(1)循环,结果应该是在LED显示屏上只有“普”字闪一下,而非一直亮着灯,求解!!!
+ R- P' ~1 T/ D" g; k
6 s; c: B( Z+ i. y3 s1 Z. Q程序一:
7 R; w: o8 P2 M, v3 s9 T0 b7 H( F. {- B! `
#include<reg51.h>, g; J1 B, l, q6 v, T
#include <intrins.h>
3 v7 C- V9 k& hvoid delay(int i)
# I7 B0 `! u9 p$ S8 L{; m9 J- v# p' K
while(i--);
; k# ?4 d* e2 m}% ~( p. W" P8 C. w% b; r
sbit SRCLK=P3^6;( u& D  y1 J$ E; ^
sbit RCLK=P3^5;$ f4 m% o) F2 `) x
sbit SER=P3^4;
+ T: l5 v+ ]$ B1 v  B8 Y( M$ sunsigned char ledwei[]={
! a8 A; N& [/ V, c2 i6 P0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ E( F) I8 \4 V5 P& w  k0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
( c" u5 r. y& l& s1 f8 y( Zunsigned char code ledduan1[]={
" X3 o& D, \( ~0x40,0x44,0x54,0x64,0x45,0x7E,0x44,0x44,0x44,0x7E,0x45,0x64,0x54,0x44,0x40,0x00,5 R; L5 ?7 j% P9 t
0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00,};
. j, s  B3 ~2 D5 ^1 i$ {
6 S/ T  u$ v) D* f9 J1 `* S. dvoid Hc595SendByte(char dat1,char dat2,char dat3,char dat4)) L/ q9 G$ z, ?3 l) A
{7 T# D! z% w' O, p" Q( X: u
int i;
) Q& \' x. |5 Lfor(i=0;i<8;++i)
9 i& w! R) _& D{
0 S# ?3 B5 U4 G1 j! p  SER=dat1>>7;
" F: [: h# C' W; R1 }) X; t  dat1=dat1<<1;- \$ o) g* F+ _- M# I6 |* q; R& L% U
  SRCLK=0;
7 k9 \- C$ F; c( {7 I) {4 x% \( O( v  _nop_();
, O& `( P; k. N; V  _nop_();& R& S  c( h5 Z  p6 k% n7 _
  SRCLK=1;2 I% d; u5 H% l3 M( B. s8 r" O. n
}+ @5 U8 [( G1 w, R$ D5 H! h- A
for(i=0;i<8;++i)" y6 V) B. Z4 |) u
{0 i( i8 R% m# e
  SER=dat2>>7;
% z4 f: i( ?& h! n/ l  dat2=dat2<<1;
# I6 Q5 c; u2 A( F3 L6 J  SRCLK=0;0 U* T) ?5 \' q2 {
  _nop_();) T# l/ q/ D3 ^! c2 O' C
  _nop_();4 d( u/ R0 `- u7 H1 Q- F
  SRCLK=1;2 C' t4 b  ?  v- m) n6 k3 f
}9 p" y6 ?% N# E7 f
for(i=0;i<8;++i)
0 ^( h0 T! [9 E* ~{
: R+ E1 c7 j& q. u; j+ T  SER=dat3>>7;( E' [2 }" ]( m" j( ~# R/ i
  dat3=dat3<<1;
0 t  n# B: J7 s" g' Q' D8 e  SRCLK=0;
% [4 F2 Q" v  L" d4 k  _nop_();
) ~$ r& O( n- ~2 |# `% e7 u% ?! h  _nop_();4 v5 g1 q3 Y- ?- A+ s
  SRCLK=1;9 ~0 A; J% c* T. P( o9 @% R
}  C- y* T) ?, I, T
for(i=0;i<8;++i)% z' w6 D1 j" u, T4 v5 R
{    5 N' b" X- i2 u$ m/ m" x
  SER=dat4>>7;
+ g7 X  f) d5 A' v: R! F  E  dat4=dat4<<1;
. L) k6 a1 t3 S7 Y  SRCLK=0;! g: f" i; T+ P  X* y
  _nop_();/ m# a: x7 L" e" e2 B5 A  `4 M+ T
  _nop_();
( `, p; c1 l, h+ v5 \  SRCLK=1;
9 [2 X5 U9 F$ x$ p$ I4 \$ l}
1 T2 s# }6 V4 M* L" ^3 b) MRCLK=0;; G: K6 |( z' [" ]
_nop_();
# r) [% |8 v+ z& ^+ B_nop_();
# x* c: Y' o$ K; s% w/ ]+ M8 ^RCLK=1;
. C+ X/ w7 d7 o9 D: `% ?! c* m7 N  O" ~8 w* A# N( j
}5 v0 Z! {! u9 A+ ]9 Y7 Z$ t
void main()
5 G; I- Y# L* t; ^9 x{
, ^' K% ^* k) n* t1 ~int i;7 ^0 r7 j; O. O+ K8 I+ B& C3 Y
while(1)+ [0 x% j9 R7 m0 l
{3 R/ b# O% d5 _! c
  for(i=0;i<16;i++)
+ F4 P/ |3 e) s0 j4 I/ x' U2 s  {0 L) `1 ^+ A! H  W( u1 S
    Hc595SendByte(~ledwei[i+16],~ledwei,ledduan1[i+16],ledduan1);7 J. {3 F  u2 @: r) M1 m
    delay(10);; t) k) B0 L1 Y9 n
  }
) B+ j: H8 I6 Z, M7 Z' ^. ?}   
  k0 W. ?+ J& a3 Z- Y  ^! T+ Q9 M}
3 o& @. J6 M: g1 T7 R3 P
& h- A+ Z! c, J2 M$ m5 ~9 V! I( V( l0 G
程序二:
5 K+ K3 [2 Q8 @, z" ~( g2 ~
1 D6 N& z% Q8 [( ]  s3 D: d6 S- J#include<reg51.h>" I' [8 V# N& t- B. I$ j0 B
#include <intrins.h>
+ U6 F0 j6 V7 ^7 [$ Nvoid delay(int i)9 \: k, U4 ?% l
{, s, G7 C$ y: s+ m1 q
while(i--);
) c) R) N: S( u- ^6 l7 t}7 j8 S; u' Z( p
sbit SRCLK=P3^6;
- P, S! W4 `  A: p2 l$ ?sbit RCLK=P3^5;
. C3 W/ h" V/ k7 ?sbit SER=P3^4;; {( B8 _2 x+ q2 m
unsigned char ledwei[]={
& Q4 ?  Q0 q( |0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1 {, x1 `. D- w2 x" t0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
; X/ {. @$ r3 j# o+ j% p" h  s3 }unsigned char code ledduan1[]={ : Y: }( e- Q2 F2 f
0x40,0x44,0x54,0x64,0x45,0x7E,0x44,0x44,0x44,0x7E,0x45,0x64,0x54,0x44,0x40,0x00,
( I" N4 N  Z7 W" X0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00,};
% ?) i- \6 ]7 C0 s
7 @) x# `; B. m" ~' Z: w7 G3 Zvoid Hc595SendByte(char dat1,char dat2,char dat3,char dat4)6 s# |1 Q2 g. d- z* |* b" ~
{
  ~3 p6 D" p8 W# hint i;
/ m8 I- L0 A$ ifor(i=0;i<8;++i)4 t  e) s9 A  {  O* }5 V, N
{% |& d8 n- r1 P
  SER=dat1>>7;: l3 G4 m" C! H/ [& p+ Z* S
  dat1=dat1<<1;, [, T, t: _7 O  R: x3 _3 K, D* k
  SRCLK=0;
9 u2 J/ ?* c" s5 T6 \# B  _nop_();
* _0 h* p. C# U$ Q; m5 L4 s  _nop_();
* \3 c; o: a6 J  SRCLK=1;
3 u( L2 m0 e6 u2 ^, V; {  ~5 `}
& j% @" W/ S8 f) ]5 c& gfor(i=0;i<8;++i)* g+ O3 k, q9 c! i: z4 s
{% w' x. E+ C4 w4 ~  [" r: N$ c
  SER=dat2>>7;; V+ @0 [' c) _5 f
  dat2=dat2<<1;
! `$ ^' Z& c: B% c( }& I4 n  SRCLK=0;, z8 {6 v: ?. A. a- l  ?2 D
  _nop_();7 z, b* g# W4 ~6 H: X. @; J3 J. H
  _nop_();$ Z) w- `, `3 n; B5 d) n+ y
  SRCLK=1;; _% r. i1 X- }. K
}
" _: B' `, f6 d3 l, N. dfor(i=0;i<8;++i)) D5 r' \9 z# U  }6 k2 `
{
5 Q4 X! y/ ~0 z* G  SER=dat3>>7;
  r, _! }: n, {; O  dat3=dat3<<1;2 H/ `# R3 u" m0 L7 x4 i$ c
  SRCLK=0;0 c% a9 J- r. b
  _nop_();) U- d1 n: Q8 a3 j
  _nop_();
% p4 {! S0 L8 H3 X- ^  SRCLK=1;; Y& O4 J9 D8 S# d0 \
}
3 _, r" n: R- ?, A6 }for(i=0;i<8;++i)6 a! `) X) X6 j: E' U7 {' p4 u1 [. ~
{    : j4 y& J6 ^' o; P0 [, F+ u; P: s
  SER=dat4>>7;
; Y: D4 a: D3 S0 [9 \  dat4=dat4<<1;
% g" [4 Q" Q3 }( A5 ?8 c. f! [3 i: n  SRCLK=0;
5 [' ?3 w1 l, I- D6 K" n  _nop_();8 g7 V8 e" @7 V9 K* H7 T
  _nop_();
7 [3 B: N; j- m4 s+ \$ Q  SRCLK=1;1 E8 w9 |9 v: l/ p! }" e
}% l1 }  F$ A* n7 V# Z! y3 B  q
RCLK=0;; F/ `9 p* t/ y/ a$ U
_nop_();; d# _' V2 U! V; Z9 b. l. _
_nop_();
8 y8 a' A- F- ?3 Q- H) XRCLK=1;0 I/ s) e* g$ i0 P: Y$ ]8 G

: }, ^9 I- n! m) S& J& p; H" G$ A}1 ]. u6 X2 b( b" p$ B. l9 R
void main()1 H: c! ?+ r( R" u" S1 l2 G* j
{6 k9 `) a  h. [$ t( O
int i;5 C( |7 `" F# Y1 k4 n
for(i=0;i<16;i++)% O. R& G( T% D8 Y! z4 E
{9 ^$ W) I: @: L+ |9 N+ I
  Hc595SendByte(~ledwei[i+16],~ledwei,ledduan1[i+16],ledduan1);
: R3 `  I9 C7 ?/ @, ]( Q  delay(10);
  Q# m6 n' [3 k9 C' @7 j} / e. i; }* X9 S# N' K6 I& {
   
. u! B& z$ K# D2 P8 b2 _1 r( g" v* {# H  ]/ b* p& Z
}
" A  V8 G. A. q4 d

该用户从未签到

2#
 楼主| 发表于 2019-3-25 10:10 | 只看该作者
我觉得我应该介绍一下这个程序
, u3 Z5 ?6 s3 r4 N: h通过四个74HC595芯片来控制16x16点阵的四个管脚
' J$ S8 A3 n, F: W9 S/ ?6 m& A; |. _. J函数Hc595SendByte()里面的程序没有问题,该函数的作用是运用串转并的原理将四个十六进制数导入到16x16点阵的四个端口。
4 Y8 G' x* c: @8 a5 c0 [数组ledwei充当位选的作用

点评

你这16X16的点阵是什么样的接口啊?最好贴出原理图 粗看你感觉你这16X16点阵就是横着16个接口竖着16个接口,难道是串行转并行之后没有锁存,所以第一个才只闪一下?  详情 回复 发表于 2019-3-25 10:23

该用户从未签到

3#
发表于 2019-3-25 10:23 | 只看该作者
十一月 发表于 2019-3-25 10:10
" G. ]3 W  f3 L5 x8 K. z* K我觉得我应该介绍一下这个程序
5 L5 [7 T0 h) ]5 \7 H& X* j6 \通过四个74HC595芯片来控制16x16点阵的四个管脚
0 w' l1 r- j: `* m) P, D9 Y2 p/ E函数Hc595SendByte()里面 ...
" N# R$ B6 ]; h6 e
你这16X16的点阵是什么样的接口啊?最好贴出原理图
  u' B* Y4 R6 |* l, C粗看你感觉你这16X16点阵就是横着16个接口竖着16个接口,难道是串行转并行之后没有锁存,所以第一个才只闪一下?
5 \) j% ]% V' U' N, }

点评

谢谢楼上的意见,原理图已贴,确实是横着16个接口竖着16个接口 [attachimg]177009[/attachimg] 可能我没有表达清楚 我预测的效果是程序一一直亮着,程序二只闪一下 but 实际上是两个程序的效果一样  详情 回复 发表于 2019-3-25 11:14

该用户从未签到

4#
 楼主| 发表于 2019-3-25 11:14 | 只看该作者
helendcany 发表于 2019-3-25 10:23
6 q8 g) P, O1 a9 n- I, B" O你这16X16的点阵是什么样的接口啊?最好贴出原理图* _* L, h1 z* h% b) m/ Y+ s) _
粗看你感觉你这16X16点阵就是横着16个接口竖着16个接 ...

5 E1 j% n7 g3 e4 j  ?谢谢楼上的意见,原理图已贴,确实是横着16个接口竖着16个接口, M* @1 k* d) a$ b5 |% Y+ x5 E

& _9 z! r6 d" @& L
' O6 x6 \+ D3 ~1 ^) g+ _8 K

/ p/ ^: f. W; C9 o9 p
- w9 Q& D) c( }4 S% ?
) T2 R/ C, a- [
可能我没有表达清楚
6 J* V8 u8 i3 _0 |3 u7 t我预测的效果是程序一一直亮着,程序二只闪一下0 u. C$ }0 Z! V6 {$ q' N
but  实际上是两个程序的效果一样
+ I) I! B! ^3 _. }. L: W
/ V- E$ j+ D$ P% R5 {9 b. E/ P

点评

跟我想的差不多 不过你有注意到74HC595的12脚是锁存脚吗? 这个脚你不用是不会锁存数据的,所以只是闪一下  详情 回复 发表于 2019-3-25 11:23

该用户从未签到

5#
发表于 2019-3-25 11:23 | 只看该作者
十一月 发表于 2019-3-25 11:146 |; w% W1 S! Q/ Q( h- m0 X
谢谢楼上的意见,原理图已贴,确实是横着16个接口竖着16个接口

; e( l, K; u3 D; @2 ^& D! {/ i跟我想的差不多1 \9 d* S) {" W; {
不过你有注意到74HC595的12脚是锁存脚吗?
) C/ b2 c1 l# a- b* p7 N; v这个脚你不用是不会锁存数据的,所以只是闪一下
* R! Y) ?6 D1 s8 _  R& k

点评

不不不。。。两个程序都是一直亮着 我是说我预测中程序二的效果是闪一下,实际上程序二的效果是一直亮着  详情 回复 发表于 2019-3-25 13:24

该用户从未签到

6#
发表于 2019-3-25 13:19 | 只看该作者
图示是ON公司74HC595的框架结构,左边一列是移位输出,中间一列D触发器是锁存,12脚的锁存管教应该有个时序的变化(刚看了一下,应该是在串行输出结束之后从低电平变高电平)
" [3 I0 I3 c( J8 U( h' a/ i如此串行转并行之后的数据就能锁住不变,而不是一闪而逝
' c# ]0 c9 ~& h7 q% }4 T/ n! x0 B+ c4 M$ G8 w) e* {4 Y+ |1 X- p, ?
要改程序的话,你试下在你每个for(1-8)的大括号之后都加上下面代码
0 e: I$ ~8 h4 M& x, @  RCLK=0;* J7 D/ P0 U6 k! \
  _nop_();9 ^, x+ B+ w- f! k. S5 o0 i
  _nop_();
  K( B4 r* u; k8 ~3 V: H  RCLK=1;
" l/ m9 f: ^5 u  \" [9 Y- j ! h: @3 w- F. G: w% a- r

点评

如果每个for(1~8)后面都加上那几个代码,点阵每个LED灯都亮了  详情 回复 发表于 2019-3-25 13:24

该用户从未签到

7#
 楼主| 发表于 2019-3-25 13:24 | 只看该作者
helendcany 发表于 2019-3-25 13:196 B9 n3 V9 S. d! g6 f4 R
图示是ON公司74HC595的框架结构,左边一列是移位输出,中间一列D触发器是锁存,12脚的锁存管教应该有个时序 ...
  ^5 Q3 S( m3 @& n
如果每个for(1~8)后面都加上那几个代码,点阵每个LED灯都亮了- X9 U' U; J4 q& Z' E9 I

该用户从未签到

8#
 楼主| 发表于 2019-3-25 13:24 | 只看该作者
helendcany 发表于 2019-3-25 11:23' G- E9 d0 O) Y2 x& Q4 X* [
跟我想的差不多$ e% V# V) Z: M0 d
不过你有注意到74HC595的12脚是锁存脚吗?' u# g. \) z. n  v9 ?# R
这个脚你不用是不会锁存数据的,所以只是闪 ...

, t) U! @: W3 B  e不不不。。。两个程序都是一直亮着: n/ D4 o: Q9 r9 r6 v
我是说我预测中程序二的效果是闪一下,实际上程序二的效果是一直亮着
( ~" ~& S- B! K: e1 f

点评

是我看漏了,不好意思。原来你每个程序在Hc595sendByte()函数最后 都进行了锁存操作。 既然锁存了,就算不进行while(1)循环,也是一直亮着的。 在程序2中,就算只有1遍串行输入,输出也被锁存固定,不会变了,所  详情 回复 发表于 2019-3-25 13:29

该用户从未签到

9#
发表于 2019-3-25 13:29 | 只看该作者
十一月 发表于 2019-3-25 13:24
1 U/ a6 E9 x) P) a# T不不不。。。两个程序都是一直亮着  l  E! v' }) H3 c1 A- B9 A
我是说我预测中程序二的效果是闪一下,实际上程序二的效果是一直亮着 ...

& b: ~8 ?: p" a2 L1 H是我看漏了,不好意思。原来你每个程序在Hc595sendByte()函数最后 都进行了锁存操作。1 @; n" ?1 ?8 w: Q
既然锁存了,就算不进行while(1)循环,也是一直亮着的。/ K; f- O! ?# O- K: e
在程序2中,就算只有1遍串行输入,输出也被锁存固定,不会变了,所以才一直亮。
! Q+ D6 G( |& f' X: a5 @

点评

嗯嗯 谢谢你啊  详情 回复 发表于 2019-3-25 13:36

该用户从未签到

10#
 楼主| 发表于 2019-3-25 13:36 | 只看该作者
helendcany 发表于 2019-3-25 13:29  j$ F$ }# P0 z& ?  i# Q
是我看漏了,不好意思。原来你每个程序在Hc595sendByte()函数最后 都进行了锁存操作。
/ e; d4 M4 u& J' c( a4 C7 i既然锁存了,就算 ...

% V& h/ `$ e. q) ]4 R7 n嗯嗯 谢谢你啊6 p' o4 \# j, F
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-25 04:30 , Processed in 0.109375 second(s), 27 queries , Gzip On.

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

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

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