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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
关于LED点阵显示汉字的问题7 p! C2 Y8 r/ N, X8 G

% t$ I" S* i8 ]- {- ~" N) x

4 k& U6 B% D9 |7 ^* z本人使用16x16点阵操作,使其显示汉字“普”,接下来我将会发段完整的程序,这两段完整的程序区别只在于主函数有无while(1)循环,我发现两个程序结果一样。/ b% a4 O: t2 `8 M2 O- h* U
但是,本人认为第二段程序由于没有while(1)循环,结果应该是在LED显示屏上只有“普”字闪一下,而非一直亮着灯,求解!!!
7 A2 T3 C- f2 ]8 r- B: s1 ~) N/ F- e# x/ a. |
程序一:, p0 D" N7 C1 d1 ~+ V

  k+ r. C+ Z2 T( Y#include<reg51.h>
) Y6 Y9 G6 |5 G# W0 h#include <intrins.h>4 f3 u* H: K9 Z5 K8 L! V
void delay(int i)
; C9 _9 w0 \* W+ t# i& F4 c{
6 i/ O: L0 _0 n5 \while(i--);0 p* r/ `9 N8 |) ~
}( y! y$ O( }+ F' ^( S9 G
sbit SRCLK=P3^6;
5 ^3 D' E) y8 n& }2 r3 ?) B3 @sbit RCLK=P3^5;- c, |/ V0 u0 F5 a# \- X
sbit SER=P3^4;
! G9 P9 B$ x2 A9 k1 `: Yunsigned char ledwei[]={
+ U1 D' h- ?2 V( y  n$ d1 M0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,+ @* X( J" j- W# ^8 g8 O9 U
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
1 x# v4 O! K+ v3 B4 Yunsigned char code ledduan1[]={   ~3 w; _0 Z3 W
0x40,0x44,0x54,0x64,0x45,0x7E,0x44,0x44,0x44,0x7E,0x45,0x64,0x54,0x44,0x40,0x00,
: }4 E' H" E4 F( y0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00,};) }1 p/ ?! V& w4 i8 k

7 _* d4 h" K( C, `# Rvoid Hc595SendByte(char dat1,char dat2,char dat3,char dat4)
- V0 n  ]. E, W6 W. B{& }  O7 Q. \' q& \# N+ ]6 X
int i;' N! z/ m5 t8 u, D( x" I, z
for(i=0;i<8;++i)1 L# Z0 I5 `/ W: y
{
  I7 }: F6 l$ E7 G8 |" Y  SER=dat1>>7;+ F, m/ i) P# K
  dat1=dat1<<1;+ R8 L1 T* s, m. _7 w5 v
  SRCLK=0;
, L2 o& m) g. @& _: S  _nop_();
* C' F; Q  ]' J3 ]3 A  _nop_();1 p5 p7 N$ j% Q: P$ W0 b9 N& |4 G
  SRCLK=1;
! d' v& R5 G1 e9 i# |, h}
. q% l  ]. d3 r- i1 t( j6 Sfor(i=0;i<8;++i)1 l8 Y' j7 }% z, ?7 t
{7 q5 M/ M! e8 b, Y& X5 u
  SER=dat2>>7;
3 k! x! Q# F; W- V+ O. L* y! Y  dat2=dat2<<1;& [% D8 a1 _5 ^3 B
  SRCLK=0;5 Y0 h6 j& \* G% _% E
  _nop_();/ f' x* t+ P! j  }( d" V1 w. a& k
  _nop_();
5 Y3 O. L/ F& W' Y! r* y  SRCLK=1;6 x9 J5 |' E# l4 ]/ \
}
# E. X7 C' f+ Pfor(i=0;i<8;++i)
% W1 G1 H+ a+ E$ A6 |3 R{
- X- z8 X& q  z6 l- g1 C! |  SER=dat3>>7;2 h3 p, X: r3 ~7 Z0 o& ?
  dat3=dat3<<1;
% M6 I- {  ~+ ^) l& p/ I% a1 d3 S3 L6 s  SRCLK=0;
3 X" T7 F& r: j% K- j, C  _nop_();
7 B4 F4 a6 @+ Q8 Z/ q  _nop_();
* j2 C8 k) o4 h8 Z: f  SRCLK=1;8 p  d# d; R+ K- O
}
: N  Q& H: ~+ \5 Y- kfor(i=0;i<8;++i). f) a3 \0 v* q$ s; E1 B
{    4 n# ]5 m' F. z* L* E
  SER=dat4>>7;
, a5 M! d3 X" n  y( u  dat4=dat4<<1;; A# E" t2 E4 i9 X
  SRCLK=0;
& f% e7 p( c, j. s( A  _nop_();0 x% H  {0 v0 Q5 A: i2 }5 X, p
  _nop_();
3 A9 T& M( X  T1 @+ z  SRCLK=1;3 |  p) G- e" d
}' o. _  u2 g1 S% Q
RCLK=0;% X3 c  O$ p) j# R4 \& |
_nop_();6 c/ l' A$ b: v/ B" `! c! b8 W  C
_nop_();
# C- f1 b  {" b+ N) \RCLK=1;
. w. {) V. f% H7 g* F
1 M* v7 P- F/ `* q}7 {2 V  f: z- c3 w( X" S
void main()
- [5 T/ i/ V: q{
* q# g. E6 e5 o$ P. Qint i;" w2 H  E( B3 q5 U* b
while(1)
! a, M( |9 ?& ^4 m1 a  N; {{: x- x5 W! i0 `9 V, |+ B: r0 L9 p: r
  for(i=0;i<16;i++)
# m+ g6 F3 Y0 z3 A& h) _. e2 P  {
$ M6 K! \( ^1 J) r    Hc595SendByte(~ledwei[i+16],~ledwei,ledduan1[i+16],ledduan1);
! P5 K* I  p- d: d) S% Z, z    delay(10);
0 K' _$ L; y4 K  } , u# @! r5 X5 r" e7 A; s
}   
5 D1 g2 w, e/ M) {, D} ! D; T! n7 D1 c/ b5 Z) m5 d- y
: D; b0 D$ A! s" `% T! w- ]

% c% B# R! D4 l6 h- w5 _程序二:
$ I9 o% x9 o2 T9 o
2 f0 X# B9 f6 h7 Z& y' k#include<reg51.h>8 g- o4 q5 Z1 F' i1 X! p3 w
#include <intrins.h>4 }) ~# q# l; F% _! K# R
void delay(int i)
" ~; g+ }5 S% h* y{
6 N6 d# a( n/ @2 x% M4 _while(i--);& _7 R! o) Y) r! }; I4 X0 y! t
}. X2 O% ~2 A6 @( }2 ?$ o; _2 I6 I
sbit SRCLK=P3^6;, q1 h4 {5 e, K  \+ r
sbit RCLK=P3^5;
8 N- Y9 X7 o7 Nsbit SER=P3^4;' Q! t% {3 @1 X( f1 ?7 a* N1 J8 U+ i
unsigned char ledwei[]={. h1 g9 B) f0 X& U- y* B( |" C$ y
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,8 \$ M: d$ o9 n; p5 J- G
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};1 o" K$ U4 m; M1 n. Y
unsigned char code ledduan1[]={
: N" Z  _" O1 J# T- U: z0x40,0x44,0x54,0x64,0x45,0x7E,0x44,0x44,0x44,0x7E,0x45,0x64,0x54,0x44,0x40,0x00," j0 `6 l8 @3 i5 P4 o) c, a
0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00,};
9 v: V& k1 D! t- w# I1 u7 h  R7 ~- X
void Hc595SendByte(char dat1,char dat2,char dat3,char dat4)
* A2 o! n3 h" r, q3 x{
# N( Q+ ?7 r, {! q8 o$ \1 Yint i;, A/ e6 e" C; D6 n( Z# R% o! c- j4 b
for(i=0;i<8;++i)
: j& s8 B2 j2 q$ _8 z+ Y{" i. e. m" q" }: `
  SER=dat1>>7;
! f% }! e! C% n1 R& r5 `1 w* d  dat1=dat1<<1;- }# Y5 ?: m+ u8 z/ o/ C
  SRCLK=0;
, G/ K2 H8 b, k, E4 J" |( `  _nop_();/ P% ?5 N; A3 o+ g) V4 ?/ y
  _nop_();
# u# C" l0 ^( q2 n- p5 d8 w- F  SRCLK=1;: z& k9 }3 w' t; p; q# K
}8 t5 ]" B7 B+ k& l
for(i=0;i<8;++i)* R! b, m" j$ L
{
( ^3 a6 x" Z. v5 n  SER=dat2>>7;
6 p' b% Q& E5 ^% v) G6 Y  dat2=dat2<<1;
7 \- v9 W" W9 i6 S1 \  SRCLK=0;
! }& ^, f5 L% x) m, m# B- `& a  _nop_();
$ t. `( c  w" `6 B  _nop_();
+ c5 m) z3 w8 s/ z( i3 F  SRCLK=1;4 p# r: y. j6 D
}& j$ C. o8 M% i2 n+ p; I# B: B- ?. A
for(i=0;i<8;++i)
0 u2 Z7 Z9 s2 O: G6 v4 I. S{
7 {3 D! @' s; O0 `* b  SER=dat3>>7;
- S  a# r# S5 S. {& R  _# c5 `  dat3=dat3<<1;8 ~1 k! ]9 C" Q6 o
  SRCLK=0;
, `' {" _2 a/ I0 m3 \2 X: x" t  _nop_();
9 Z9 I! G7 C. c  _nop_();9 v' y/ S3 d' f" C
  SRCLK=1;; t9 u5 c* F( u, a
}
/ F, s& X( T3 j( n$ S8 i. r7 Ufor(i=0;i<8;++i)3 ]8 X+ u. U, |, }- J) f9 E
{      U+ d7 s- q" h+ [
  SER=dat4>>7;& d( g* D% S& M9 R
  dat4=dat4<<1;' a$ k  `3 }# c, x
  SRCLK=0;9 Z/ E* P( `# Y7 J* F
  _nop_();) ^0 D( W' g8 C* R4 C; s5 A0 h
  _nop_();
/ z4 M* W) R! [  SRCLK=1;
: ]4 Y+ {! ~9 i* \' Y2 R}3 W; L* t/ v- S
RCLK=0;9 S" z, ?* @3 V- P8 s# {9 S  M
_nop_();
  \6 F$ M  a( u; ^_nop_();
7 L# p- q1 H$ sRCLK=1;
% y. [: U8 X+ e3 B9 s8 ^" W6 n5 X" O  ?9 y: a' V& g/ z
}, C2 Z" k$ T, j; s! s2 o
void main()$ ?- |) k0 C2 n* e' j
{
: C; v8 Q$ m1 U3 nint i;
8 A5 z+ N' |0 Lfor(i=0;i<16;i++)
+ x; v7 \' N/ N{
  f+ r1 X1 v2 C; o# M  Hc595SendByte(~ledwei[i+16],~ledwei,ledduan1[i+16],ledduan1);9 [! X, k) t3 o3 `; @
  delay(10);
$ x$ Q9 @, N; q} 2 ]* ]: b& \4 E* t
   * M' P/ _3 t4 Y: V4 [3 s; p
' t! r3 L  M2 N) ?+ Y+ Y/ |2 ^
} . r- G9 W6 B$ |" Y

该用户从未签到

2#
 楼主| 发表于 2019-3-25 10:10 | 只看该作者
我觉得我应该介绍一下这个程序
9 \5 F) Y3 J4 n- `! d% A通过四个74HC595芯片来控制16x16点阵的四个管脚
6 Q/ f( C5 R' N- g8 U0 g5 u: \# t函数Hc595SendByte()里面的程序没有问题,该函数的作用是运用串转并的原理将四个十六进制数导入到16x16点阵的四个端口。
1 r& O6 E& `/ g/ y( o7 l数组ledwei充当位选的作用

点评

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

该用户从未签到

3#
发表于 2019-3-25 10:23 | 只看该作者
十一月 发表于 2019-3-25 10:10
6 o+ P, J4 A' B% ~5 Y我觉得我应该介绍一下这个程序# c& _( @6 t" ^
通过四个74HC595芯片来控制16x16点阵的四个管脚$ i0 @* m# ?  Q1 e
函数Hc595SendByte()里面 ...
/ ]& q' [. @" S9 z- Q! `
你这16X16的点阵是什么样的接口啊?最好贴出原理图
% z1 [/ a5 Y0 q6 N; }粗看你感觉你这16X16点阵就是横着16个接口竖着16个接口,难道是串行转并行之后没有锁存,所以第一个才只闪一下?+ O  y: i: B5 B! a2 `- y

点评

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

该用户从未签到

4#
 楼主| 发表于 2019-3-25 11:14 | 只看该作者
helendcany 发表于 2019-3-25 10:233 G2 i) T3 c( D* L' t* ]; w
你这16X16的点阵是什么样的接口啊?最好贴出原理图" l3 S3 }) q3 F0 M; [# ?5 A
粗看你感觉你这16X16点阵就是横着16个接口竖着16个接 ...

4 t- R/ q* R* W$ G" q谢谢楼上的意见,原理图已贴,确实是横着16个接口竖着16个接口! s( o' ^* }5 x+ [+ U  ]+ u

' \5 {. V) ]$ ^& q7 O
, ]" o9 ]/ W& Q, e/ j( U

) a6 b) {" F: p# f% M4 s# ]9 e, q7 r8 M# g2 B3 M

* G) Y) S! c$ |" L( b8 R4 F可能我没有表达清楚- y) m4 A8 A. z* B+ G* u
我预测的效果是程序一一直亮着,程序二只闪一下  V0 A% z% u6 T) y
but  实际上是两个程序的效果一样
$ A3 b# `4 F' p# {
" [3 g% V# t$ t

点评

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

该用户从未签到

5#
发表于 2019-3-25 11:23 | 只看该作者
十一月 发表于 2019-3-25 11:14" p3 b4 [5 W: a, j4 t
谢谢楼上的意见,原理图已贴,确实是横着16个接口竖着16个接口

1 q) y* J/ V6 v, i! {跟我想的差不多. n5 G. \* s3 g: m
不过你有注意到74HC595的12脚是锁存脚吗?
4 ]2 {3 s+ j' Y$ m% p, J这个脚你不用是不会锁存数据的,所以只是闪一下- y1 ^' c- }% q* _. T, F$ X/ `% s

点评

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

该用户从未签到

6#
发表于 2019-3-25 13:19 | 只看该作者
图示是ON公司74HC595的框架结构,左边一列是移位输出,中间一列D触发器是锁存,12脚的锁存管教应该有个时序的变化(刚看了一下,应该是在串行输出结束之后从低电平变高电平)
9 O" y: g" E6 }( ~如此串行转并行之后的数据就能锁住不变,而不是一闪而逝$ G& O" e0 V& x! e% ?2 {

& y1 c2 ~5 C  ?4 b, l要改程序的话,你试下在你每个for(1-8)的大括号之后都加上下面代码. h3 W; Z3 n" G
  RCLK=0;% I2 c4 _! L" G! o
  _nop_();
* c/ s6 F, V5 o6 }  _nop_();; v8 w, x- O' x
  RCLK=1;& P* U; v0 E1 Y* I) }( ^

/ J1 @, l: W  u! _

点评

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

该用户从未签到

7#
 楼主| 发表于 2019-3-25 13:24 | 只看该作者
helendcany 发表于 2019-3-25 13:19& \8 m+ d1 M' \$ P" h
图示是ON公司74HC595的框架结构,左边一列是移位输出,中间一列D触发器是锁存,12脚的锁存管教应该有个时序 ...

, t# X' g% X- `6 P4 w+ X# H如果每个for(1~8)后面都加上那几个代码,点阵每个LED灯都亮了
, H! y0 w  R  P9 Y

该用户从未签到

8#
 楼主| 发表于 2019-3-25 13:24 | 只看该作者
helendcany 发表于 2019-3-25 11:23
4 l: N5 ~0 S( A( |跟我想的差不多
$ o: {# D9 R. [& X* Q2 ^不过你有注意到74HC595的12脚是锁存脚吗?+ v2 U  u: y7 x* j6 ~. ^6 S
这个脚你不用是不会锁存数据的,所以只是闪 ...
. k( c% G0 F, G' E' ]
不不不。。。两个程序都是一直亮着8 l" g8 @, ?$ P. T  m/ F/ f
我是说我预测中程序二的效果是闪一下,实际上程序二的效果是一直亮着% n- g- y  o) b

点评

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

该用户从未签到

9#
发表于 2019-3-25 13:29 | 只看该作者
十一月 发表于 2019-3-25 13:245 m( i" M! f$ c) ~- @
不不不。。。两个程序都是一直亮着
8 E# g" m6 ]0 `我是说我预测中程序二的效果是闪一下,实际上程序二的效果是一直亮着 ...
/ a8 V( B' H, O8 V% i5 N
是我看漏了,不好意思。原来你每个程序在Hc595sendByte()函数最后 都进行了锁存操作。9 \: k0 q, y7 R
既然锁存了,就算不进行while(1)循环,也是一直亮着的。
, y; e- p7 r! ^# }2 ~- h, ]在程序2中,就算只有1遍串行输入,输出也被锁存固定,不会变了,所以才一直亮。
9 V1 ^" T+ K6 G! Q$ X  W

点评

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

该用户从未签到

10#
 楼主| 发表于 2019-3-25 13:36 | 只看该作者
helendcany 发表于 2019-3-25 13:29
" J% {; c+ F. P# N/ I* D% F6 A1 I是我看漏了,不好意思。原来你每个程序在Hc595sendByte()函数最后 都进行了锁存操作。
% Q0 G' ~9 _4 O9 z* ?既然锁存了,就算 ...

+ f" P1 l4 Y* }* f0 |- B" t1 K嗯嗯 谢谢你啊: M! A3 T2 J: f8 I+ p( G: {
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-23 14:03 , Processed in 0.109375 second(s), 36 queries , Gzip On.

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

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

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