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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
关于LED点阵显示汉字的问题
+ W# _. V6 z2 l$ J  O. g% N
! D2 i/ o  q% O/ N, U( [/ n

' r' Y; n! k2 J$ G1 b0 i本人使用16x16点阵操作,使其显示汉字“普”,接下来我将会发段完整的程序,这两段完整的程序区别只在于主函数有无while(1)循环,我发现两个程序结果一样。4 ~: B, s/ H% x2 O) o) Q
但是,本人认为第二段程序由于没有while(1)循环,结果应该是在LED显示屏上只有“普”字闪一下,而非一直亮着灯,求解!!!) P' r: `: z* {$ L9 W1 n3 f- ?- J
: e  ]/ ?" b4 c& t" {
程序一:
. H6 e+ W5 ~$ ^) x* U. l
. I' U# G. V& o4 V; Q' L#include<reg51.h>
" r5 N+ k& S9 M  C: f2 w#include <intrins.h>0 I: Q% j; Q+ v' a& M
void delay(int i)" [. H% ]( ?: y9 _3 i/ p2 j4 J& R( R
{
; M7 A, w" m6 swhile(i--);
* O( o- h- E7 c. p}( V* B: q- B" o
sbit SRCLK=P3^6;
  @! F" r9 \. H* ^. P! r  ksbit RCLK=P3^5;
1 K6 m$ q. K7 a+ a5 esbit SER=P3^4;  s/ z  J5 l- v' F) c6 o! k2 l0 S" T
unsigned char ledwei[]={
9 ~3 Y; \8 e- q. B$ H' R8 d1 w0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
# |3 L3 t* Y) R! u, V, z0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};& ~0 a) f, G" d" C" u0 @. O) R
unsigned char code ledduan1[]={ " n* L$ G, ]+ V. S* l
0x40,0x44,0x54,0x64,0x45,0x7E,0x44,0x44,0x44,0x7E,0x45,0x64,0x54,0x44,0x40,0x00,
$ w* F+ p: r* s( S8 K% D0 L0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00,};
' I! D# `0 W4 x6 R* M
( v, s% d" O+ d2 h& Z, j8 \void Hc595SendByte(char dat1,char dat2,char dat3,char dat4)
6 a+ D  `* T' L{; R/ K% _7 }, W. Q+ Y9 x4 ~9 ~
int i;
) Q1 _  \5 t% ^& C2 t3 x0 efor(i=0;i<8;++i)4 u. O% s( D+ @5 P
{  n8 F% h- k% m
  SER=dat1>>7;
% H* D. o2 o/ C6 U  dat1=dat1<<1;" T2 V& o* E; e
  SRCLK=0;
  l9 J6 ?1 F& B5 [  _nop_();
) w$ h( ]4 W0 [$ Q- o6 ~2 U  _nop_();! ^% F& H1 _* P/ W1 G; C9 T
  SRCLK=1;) K- G' j9 o( `8 s% T/ r. l( h# Q
}
5 z* U, P, n  v$ kfor(i=0;i<8;++i)
/ z  _  E) i5 l1 W& v; N/ M& B; q{
+ c* p1 {) @7 {5 [# H6 E  SER=dat2>>7;
1 D) x4 x) q+ [! a8 t  dat2=dat2<<1;
" ~4 B: }+ x7 V0 s: m" {$ @" O  SRCLK=0;
6 Z6 I- v$ s- p. x  _nop_();+ k4 z5 F# M/ I( ~' f
  _nop_();
( y; u6 k& `" Y, ]  SRCLK=1;% W% n& L$ M- b2 r# Z7 q0 |
}, |$ z! z5 T% j: U, g6 ~) w
for(i=0;i<8;++i)
# U$ z7 F% `7 L" W  A{
& W/ G1 g' T, f' c5 ~  SER=dat3>>7;7 e9 Z) a+ D' L" ?4 G6 a0 [6 \
  dat3=dat3<<1;
  W9 S8 b3 z- m+ T% z. h- G% `3 k  SRCLK=0;
, G7 r1 B; b* m: X. c) N  _nop_();! S$ t& f/ V7 B) L( _1 N
  _nop_();
' P" ]2 O  [8 R/ a( M( D; ~0 e( r- R  SRCLK=1;5 h" @+ f& ^$ g) u
}+ `( n$ {* ^$ E, a/ b8 w4 m9 }
for(i=0;i<8;++i)
. h. j- Z$ t9 S% X) e: w! |{   
% ?4 d& F" S$ o2 s! C6 L  SER=dat4>>7;
( v. A4 Y; e1 A  Q  dat4=dat4<<1;% K, E! w+ d3 Z: F+ q- b) P
  SRCLK=0;
5 i) ^2 d/ T3 g0 m7 F  _nop_();9 O1 C0 c/ O) @& x: Y
  _nop_();
0 E! w7 V3 f; z7 I" m  SRCLK=1;
3 t. f+ h  a6 R}
7 x+ M& R" {% t+ z  ^RCLK=0;
4 I6 w0 l+ R1 f. h5 i_nop_();
  ]. w! z3 \9 j- N/ a6 F_nop_();
0 p7 G- j3 s. U) z- iRCLK=1;% f3 B& Q5 K& H% c& z

1 z1 m0 E4 C9 H$ C}( d/ y' C' q* C
void main()# a8 n9 N) c6 i$ k& u1 W) H1 M6 j, a4 j
{8 L0 Q2 U6 T$ O8 z& x) J  c  e
int i;3 M2 G% k4 u$ R
while(1)
3 o; Z7 l1 W5 E3 U- i- `( z{
' ^# S! F4 {" u2 D1 D# F  for(i=0;i<16;i++)7 X7 A9 ~7 r/ A$ F& U
  {/ W. z1 o; I  y/ B
    Hc595SendByte(~ledwei[i+16],~ledwei,ledduan1[i+16],ledduan1);( u( M: t# r$ B$ k& X2 p, Z* [! V
    delay(10);4 B. F& ?/ {# c0 I1 ?
  } " V# Z$ |9 G, E$ J
}   
% ]5 j& J# S/ _! X} 2 T% H% `9 s  J+ b
0 n, l2 K( r( o& V7 X' B

2 ]$ c$ s, ?8 V# ^程序二:4 J1 R$ ^0 v* H! w1 G

7 R& H/ R5 v: i' @  k#include<reg51.h>
! C" Y. J. G# F$ E- ~#include <intrins.h>1 u3 \  R% a2 `( ]- H
void delay(int i); e% t+ A* H, |% \6 O
{8 G' |0 ]* ]5 b7 J7 k
while(i--);/ g' F$ ~4 d$ z6 m6 A
}
3 }: `7 {( K- J3 M' vsbit SRCLK=P3^6;( d4 _" ~/ S; Y/ l1 F! F
sbit RCLK=P3^5;
( O6 c7 r/ x3 \0 _8 U+ C3 zsbit SER=P3^4;2 F+ D% _/ E$ J  o$ |4 [5 w
unsigned char ledwei[]={% t! }/ ~* y& }1 J: @
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1 b3 G+ t8 _- X/ e+ A3 C3 n. P* @0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};+ y$ q' Z# m6 h8 ]# h
unsigned char code ledduan1[]={
2 I1 o; t5 T/ J+ j4 L0x40,0x44,0x54,0x64,0x45,0x7E,0x44,0x44,0x44,0x7E,0x45,0x64,0x54,0x44,0x40,0x00,
$ Q* N- w  U( l- @0 R0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00,};
4 O1 ]% ~, ?, k/ U! D
% g0 u& F) i5 p/ y6 ^+ o& R0 bvoid Hc595SendByte(char dat1,char dat2,char dat3,char dat4)
0 ]1 D: w9 O' Q7 ?{  S( S% s: ?" u0 u! P. l( s3 z
int i;
' u9 X) ?0 e8 L( bfor(i=0;i<8;++i)! P5 t# G( w( N4 E; V
{
, h1 ^1 [2 @% C) X) c2 c. \  SER=dat1>>7;: T/ c3 P) s* h5 W3 `0 ?: q
  dat1=dat1<<1;9 n  n% f1 l: h1 Z$ H
  SRCLK=0;6 ]$ |9 x. A; v1 [
  _nop_();. s! h  s% i8 V$ G
  _nop_();
- ^8 S6 z# n. E; g  G& B. T  SRCLK=1;5 `) f, r  @7 b2 ]/ X5 P' Z
}
8 M& l+ m+ t9 j6 D/ x& v6 cfor(i=0;i<8;++i)+ I! {/ `; w  |: r- m1 i
{
' [- y2 l7 u* Q% P$ ?  @  SER=dat2>>7;/ y* Q7 q5 w0 K1 {* m: R0 ]8 T! T% i
  dat2=dat2<<1;9 W! j9 P" m! C. n+ }
  SRCLK=0;
* z" f; T  s6 Y) |% N/ }7 s8 |# w  _nop_();
3 U1 W4 A8 |1 L# p) Z  _nop_();$ ~* O( e4 `8 z! N; ~
  SRCLK=1;" i( K+ C) k4 z6 v) K1 S. g
}, i& K* ?1 z# F. Q/ ^
for(i=0;i<8;++i)
4 C, o( j0 S: [7 m5 l{
) Q6 X) l6 O' T0 Z$ L; f$ [  SER=dat3>>7;
; K- _$ q9 Z2 p  p  dat3=dat3<<1;! K3 u& Z3 N) f, p6 g9 }, T2 D( v8 _
  SRCLK=0;# }; E* H! D& H' K  _% a4 x
  _nop_();+ b, J& @& P* g% j4 Y- e4 k
  _nop_();. w  q) E- j+ u8 r# C6 n# G
  SRCLK=1;1 D7 c; @' T& @( L# l9 B
}  i/ R# L3 z5 Y' A% X8 G. n8 H. V
for(i=0;i<8;++i). D' ]- `4 w2 H
{   
% c: g; q: }/ g: [, g- J  SER=dat4>>7;
9 k$ c8 |# \! r  dat4=dat4<<1;
3 v: o* f, W1 j) t* a& x  SRCLK=0;+ T9 ^' `/ a, `- P
  _nop_();7 |: S: F+ Y; w* B  ?/ u
  _nop_();
9 v: Y4 ?& p5 C  SRCLK=1;. p4 v0 I9 r, n" K- d1 X% i2 G8 @
}
8 X0 u% {4 W. r7 RRCLK=0;/ c" T, o8 L" W3 y7 \9 v
_nop_();
4 a* e$ U+ u7 U5 N* y+ m7 f_nop_();, D( c( G8 {- l; _% x9 Y6 i: y
RCLK=1;
0 M" u. |$ |' F& Q! @* c1 U( }8 s" V8 M% e5 [- k
}% O6 B$ `- S: w: d1 k
void main()
3 z* y6 Y5 T- X2 b( J{
1 H) L- D0 K/ K: I" K0 }int i;
+ b9 p! G! ]) |) O2 V' }for(i=0;i<16;i++)
& S7 P! v. H- M3 G& C$ y& _{
/ y& w" ^4 b+ Q+ _! U  Hc595SendByte(~ledwei[i+16],~ledwei,ledduan1[i+16],ledduan1);. p* `1 ]! B5 [  ~# I0 O
  delay(10);
4 O/ W" H, e  V4 x7 m}
: _* J8 ~/ w& G5 P   
  n: \4 p* X5 |9 I- s
6 @1 s: X, e: y  r6 X}
/ a* n  N8 y* \/ t7 M9 W3 w; u" g

该用户从未签到

2#
 楼主| 发表于 2019-3-25 10:10 | 只看该作者
我觉得我应该介绍一下这个程序
  ~0 C/ e# F1 i通过四个74HC595芯片来控制16x16点阵的四个管脚" i8 Y0 a5 M* c* {/ Z# B
函数Hc595SendByte()里面的程序没有问题,该函数的作用是运用串转并的原理将四个十六进制数导入到16x16点阵的四个端口。
3 Q% g* k8 \' G7 q% A7 X% @, I数组ledwei充当位选的作用

点评

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

该用户从未签到

3#
发表于 2019-3-25 10:23 | 只看该作者
十一月 发表于 2019-3-25 10:10* G- e5 B  ^2 V
我觉得我应该介绍一下这个程序
- b) G4 a% k" E4 i0 g5 o& [通过四个74HC595芯片来控制16x16点阵的四个管脚: \$ w" o% m1 u' U- u; g
函数Hc595SendByte()里面 ...
0 V( S0 y& |  @# D
你这16X16的点阵是什么样的接口啊?最好贴出原理图
" S, W- k* d: l+ _1 i  ^7 s* _粗看你感觉你这16X16点阵就是横着16个接口竖着16个接口,难道是串行转并行之后没有锁存,所以第一个才只闪一下?
- n3 o/ y' R9 f% K

点评

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

该用户从未签到

4#
 楼主| 发表于 2019-3-25 11:14 | 只看该作者
helendcany 发表于 2019-3-25 10:232 T0 V0 S! F6 K; U) t
你这16X16的点阵是什么样的接口啊?最好贴出原理图
4 s- h* b6 h" q- D8 i粗看你感觉你这16X16点阵就是横着16个接口竖着16个接 ...

8 \$ N1 D" b* B$ e0 p( s) H谢谢楼上的意见,原理图已贴,确实是横着16个接口竖着16个接口9 S* E7 w7 P7 @& _% f" @0 K
  O- ~/ N5 X6 R9 x# E( b) f# t5 z
# |7 q6 R3 a4 q1 W& E
+ o; \7 |4 P$ A4 J3 {/ I; z' }  \! j

3 F5 S- |( l1 [
( O) |$ U1 y2 j
可能我没有表达清楚
9 s) s% w/ S7 i$ h我预测的效果是程序一一直亮着,程序二只闪一下# Y9 z: W. j/ ]! G) Z% a
but  实际上是两个程序的效果一样
7 W, i% P3 {& a5 a1 E
8 c1 \+ }( F1 r& Z

点评

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

该用户从未签到

5#
发表于 2019-3-25 11:23 | 只看该作者
十一月 发表于 2019-3-25 11:14" N& I, l" {; R# Y
谢谢楼上的意见,原理图已贴,确实是横着16个接口竖着16个接口
: t6 `5 P, r9 i: n* N+ O
跟我想的差不多
& y8 s) }) |9 @0 l不过你有注意到74HC595的12脚是锁存脚吗?
" B6 `1 V- h) }( a6 G这个脚你不用是不会锁存数据的,所以只是闪一下" y! o+ f6 D8 O. w

点评

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

该用户从未签到

6#
发表于 2019-3-25 13:19 | 只看该作者
图示是ON公司74HC595的框架结构,左边一列是移位输出,中间一列D触发器是锁存,12脚的锁存管教应该有个时序的变化(刚看了一下,应该是在串行输出结束之后从低电平变高电平)
" r( U' l6 ?: n如此串行转并行之后的数据就能锁住不变,而不是一闪而逝
/ I3 _! v9 B, Z, R3 R2 a7 ]9 L# d$ p$ z8 B0 ]- Z! v5 z
要改程序的话,你试下在你每个for(1-8)的大括号之后都加上下面代码+ m4 c. U" U4 p$ H6 j6 a1 c
  RCLK=0;7 F# |; m9 \7 t% \* r
  _nop_();# @* m* T  P) @, x* A# q
  _nop_();
9 h: d" h0 q: @6 e4 ~% k  RCLK=1;# h0 b# S% _( b" L" B+ H8 h

- D/ ^7 I& D2 x

点评

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

该用户从未签到

7#
 楼主| 发表于 2019-3-25 13:24 | 只看该作者
helendcany 发表于 2019-3-25 13:19  M4 R9 ?/ X! x  V1 @# N' \" O9 x- g
图示是ON公司74HC595的框架结构,左边一列是移位输出,中间一列D触发器是锁存,12脚的锁存管教应该有个时序 ...

' z3 s+ T% Q: l如果每个for(1~8)后面都加上那几个代码,点阵每个LED灯都亮了
. \. h4 U6 D% @; G

该用户从未签到

8#
 楼主| 发表于 2019-3-25 13:24 | 只看该作者
helendcany 发表于 2019-3-25 11:23! _- I2 v9 x0 b( C$ G* u
跟我想的差不多; q( S7 n7 j  C7 I, s4 Q
不过你有注意到74HC595的12脚是锁存脚吗?
: L1 R7 J/ w6 s  T7 p) L9 W5 Q- A+ z8 ?这个脚你不用是不会锁存数据的,所以只是闪 ...
2 c7 c) U% e0 b( u
不不不。。。两个程序都是一直亮着* b7 T1 l2 a, ?8 U0 M- h3 {2 T
我是说我预测中程序二的效果是闪一下,实际上程序二的效果是一直亮着2 {+ g) D% ]6 F6 [, \5 }

点评

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

该用户从未签到

9#
发表于 2019-3-25 13:29 | 只看该作者
十一月 发表于 2019-3-25 13:24, e, t1 J( Z* F
不不不。。。两个程序都是一直亮着, z$ \: `/ }( ]7 ?  `
我是说我预测中程序二的效果是闪一下,实际上程序二的效果是一直亮着 ...

, Q6 c$ N- d$ S# L1 Q0 r" b是我看漏了,不好意思。原来你每个程序在Hc595sendByte()函数最后 都进行了锁存操作。
" X2 j  U! e7 z) b# O" w* f既然锁存了,就算不进行while(1)循环,也是一直亮着的。
: T$ N; k. j  `3 `- e在程序2中,就算只有1遍串行输入,输出也被锁存固定,不会变了,所以才一直亮。
! C$ g9 \/ N% u4 F6 G  g

点评

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

该用户从未签到

10#
 楼主| 发表于 2019-3-25 13:36 | 只看该作者
helendcany 发表于 2019-3-25 13:29& ~! e8 o+ t0 R7 E* v/ [4 ^4 Q
是我看漏了,不好意思。原来你每个程序在Hc595sendByte()函数最后 都进行了锁存操作。3 a& i8 c5 w4 \7 y  U" i& k0 j8 ~) |& p
既然锁存了,就算 ...

  G: N! h- q! u嗯嗯 谢谢你啊
/ j3 [+ `4 y- v
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-24 01:30 , Processed in 0.171875 second(s), 37 queries , Gzip On.

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

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

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