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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
关于LED点阵显示汉字的问题4 V& y0 [$ h. m1 v6 W, C' r, h1 N7 y

$ T1 |4 t2 B5 m+ J: K' k
7 m8 i& \& e; L, Y4 |' v
本人使用16x16点阵操作,使其显示汉字“普”,接下来我将会发段完整的程序,这两段完整的程序区别只在于主函数有无while(1)循环,我发现两个程序结果一样。& L7 D% o) _5 L. v$ ?  z
但是,本人认为第二段程序由于没有while(1)循环,结果应该是在LED显示屏上只有“普”字闪一下,而非一直亮着灯,求解!!!
- V. k% U* G; c. \$ Y2 z6 t2 g2 T" a" M$ `& U' v
程序一:
" B$ u/ T+ S" I" A, w4 ]& E6 g$ @, A" Z9 F6 m! z) D
#include<reg51.h>, D: q: [% |/ b8 H+ I
#include <intrins.h>0 z* s# b5 d0 U0 |$ E% a, }1 m
void delay(int i)
  I! E. @* x$ q( H3 v9 T( |{6 m. L+ g5 z; c' i
while(i--);
5 H% ?9 m# c" z  @/ `}
9 D* E  b( Z, k) E% Ysbit SRCLK=P3^6;6 w/ F. g- }$ j( u
sbit RCLK=P3^5;
) P. s. I* G, t! e. z; x& G6 M7 asbit SER=P3^4;
1 ~: K# b2 {* f0 L6 G- Wunsigned char ledwei[]={
- T4 @. k5 F& t# y7 o0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
( Z; @% w1 e2 C( z0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};  L$ Y; o, S& n! p! R
unsigned char code ledduan1[]={ 3 V+ k1 e% U; p/ J$ O) o0 M
0x40,0x44,0x54,0x64,0x45,0x7E,0x44,0x44,0x44,0x7E,0x45,0x64,0x54,0x44,0x40,0x00,2 I2 `0 {! U6 _6 t
0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00,};  o  g6 B: O. G* H

3 j- [9 x9 b: A' hvoid Hc595SendByte(char dat1,char dat2,char dat3,char dat4)
: u1 p, y- h- \: m" I{
6 z$ C5 d: q. i, R! Q1 W( l+ f7 Rint i;0 ?0 @  H+ S; a: Q" E
for(i=0;i<8;++i)
' B, v. G1 G0 V{; N' N: @0 H) P+ l4 h& q' j9 _
  SER=dat1>>7;* t) B) }1 ]5 G
  dat1=dat1<<1;$ Z  `' q2 e  \
  SRCLK=0;% M: W7 z$ E6 f7 B5 |/ B
  _nop_();7 s' q  Y# j3 i" n9 ?, y
  _nop_();; Z: d. ]* @3 m. S0 T5 m
  SRCLK=1;
6 P2 [4 }; j9 v# S}, n  `! n; s. v) ]0 ]
for(i=0;i<8;++i)
, a& [' Z4 F% k( u{  L/ a8 ]& L7 g: D
  SER=dat2>>7;+ {, W5 N) R; d/ b, `
  dat2=dat2<<1;
# ]) d6 z9 Q+ {# ?+ u2 ^  SRCLK=0;
# o5 Y/ S  i1 o6 Z8 D  x- l% i; H7 V  _nop_();7 s! R5 [5 I' L" s+ q
  _nop_();
2 z. Q, ]- R: s5 C! s# T! w  SRCLK=1;* b+ `9 F' C' G6 n# E8 U- X- e
}0 S! f) p# d( c7 q! d  G, b
for(i=0;i<8;++i)# L" m: D8 e/ }8 {8 }5 s
{/ t0 F3 h- ?2 {1 B
  SER=dat3>>7;
! Y: Z3 _# W# w5 _" o  dat3=dat3<<1;% t4 O# N6 J- S" \# x$ S! U! W
  SRCLK=0;, \; x; i$ S" F9 Y0 ]
  _nop_();
; y0 u; K( E+ Z9 u6 |* a  _nop_();
4 V* ~. C) |7 M* Z  z  SRCLK=1;
6 R* s  ]! X  y}! q/ h0 ]7 G& S" P
for(i=0;i<8;++i)0 Y& ?/ f. H9 x$ D# |, l
{   
' e0 E; j0 ~. z  SER=dat4>>7;" K. A) \' ~3 ~5 ~* D2 ~5 J# i
  dat4=dat4<<1;
9 U1 n$ [& l6 o2 Y9 u  SRCLK=0;. Y/ S- u- `( P2 N
  _nop_();$ z% t: o; d* g! p6 J  d
  _nop_();6 P: Q/ o3 F3 E( d9 j8 U
  SRCLK=1;
% U! n! }$ B# ~; P5 J( i}
! j  x  f" b2 B4 Z( }RCLK=0;
. f( g5 k# M% B  O8 S9 \' n_nop_();% N7 P; ~; R6 S( ^8 `; F
_nop_();
, g2 _0 n' C# K* T% |5 I- vRCLK=1;/ J6 u  l: L' t$ \  W* H
" H. [$ F* d: e  d9 A! h# v6 F0 V
}" M$ b$ m0 G+ h" M
void main(). P2 `! Z! \8 X# L$ ?" p- a( z
{
- Y, ^+ w+ i' f# u% h% M7 Xint i;; ^5 c$ L6 e& N5 f0 ^$ ?
while(1)' T/ y" D) h, M  r; Z- w3 a9 J
{
9 ?0 x8 Y; @2 _  o  for(i=0;i<16;i++)
6 h* v) z. J7 T8 H; b  {2 T8 j: O' ^5 ]2 }- p
    Hc595SendByte(~ledwei[i+16],~ledwei,ledduan1[i+16],ledduan1);
2 ~7 f% e+ @# T5 ?, A5 z/ i5 r3 V    delay(10);/ V: q" }8 L! S8 ^5 F
  }
5 i9 h. u6 D, _}   
# t1 G5 ~; R+ k5 ~; v4 Y}
' E) ?3 t. F" |. N7 P' z9 I7 ^- }! l  X5 {/ N/ d( W
6 \+ s. I& i+ `' _% X( X  n! K
程序二:- B3 g9 N) e: n8 D. l4 \4 R

6 }0 q- L& L9 f$ [  _#include<reg51.h>% M# }  i9 H5 o* g8 r, m" k
#include <intrins.h>) k8 v7 ~2 i* ?' \  j1 o  k
void delay(int i)# R$ E4 c' d- O6 v/ f. \2 X
{, i* r$ }# G. A% `& c% _2 V
while(i--);# |5 M8 q; f9 O" {7 c6 ?) q
}1 F' e) |1 s) ?
sbit SRCLK=P3^6;
7 R6 @7 ], |. _5 w% V# Bsbit RCLK=P3^5;6 s% m" ?) P( D: b- N' W9 `
sbit SER=P3^4;
. t- Q+ U5 Z! g0 qunsigned char ledwei[]={
" D/ Y: z8 K/ s& I: a& X0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
* s9 t2 F- @) v/ K- q" O0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
4 k% T1 N; G# k' {unsigned char code ledduan1[]={
5 T, P6 E* M& V, K+ a0x40,0x44,0x54,0x64,0x45,0x7E,0x44,0x44,0x44,0x7E,0x45,0x64,0x54,0x44,0x40,0x00,/ m( s/ M# y* m3 R* b
0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00,};
$ Q! ]- ]$ w$ ~$ f
# B( b" z. @7 h2 t3 X5 wvoid Hc595SendByte(char dat1,char dat2,char dat3,char dat4)
6 A: a7 D6 f+ t. @5 x  I{
6 \$ P& _( \. S1 G" Q" Uint i;5 R5 g3 q& u- r6 t, }
for(i=0;i<8;++i)
" Y6 Q" t- f2 k* a7 T4 p2 T{3 X7 w8 [! l' Q0 D& {$ A5 q- G( m: Y
  SER=dat1>>7;1 H' @8 H! z& J- o! `5 Q# D
  dat1=dat1<<1;
9 h7 K' _7 R4 s1 M  SRCLK=0;
3 f; T6 n$ m: i3 Z+ m) ^+ B1 i  _nop_();; C$ q- L3 o3 O6 A8 M9 ]- j
  _nop_();
) `, x. v' {5 _  SRCLK=1;$ H+ C- Y* ~5 t, v3 `1 c
}' [6 T/ X: _, e/ b, \5 U/ @8 V' e
for(i=0;i<8;++i)
* n+ d* r) `! y7 s{
. {; `; }- k1 B, p: K4 x7 M" W  SER=dat2>>7;
, P' k- k5 T0 `7 W  dat2=dat2<<1;
. O# ^% S! T, Y  SRCLK=0;
( R) m3 x: _  @8 o! V1 B8 a" T3 C  _nop_();
3 r; h* j; j$ T! q  _nop_();, r/ A/ k% B8 l' x& i
  SRCLK=1;+ N' v; Y# Y$ N6 L0 x2 H
}
0 H( Y. R) O6 I5 Vfor(i=0;i<8;++i)3 @+ v5 C0 S! L
{" ~8 j1 F7 `+ x* k  o$ Y+ Y0 s7 ]
  SER=dat3>>7;
8 W4 ^1 `, V, [( h) p: G, R2 m  dat3=dat3<<1;+ u( y; [5 a" D7 \3 l
  SRCLK=0;- ^7 f+ L$ y: y, r: g3 s
  _nop_();
# o' k% |) S% s3 K+ o1 z/ Q; H0 \  _nop_();2 E; e) _6 n5 d/ m
  SRCLK=1;: j/ }3 u! `+ o
}
: J  h1 z& f. T7 o4 X: [for(i=0;i<8;++i)4 G# M3 n- U& Z& k. z: M
{   
0 h- c. A- T7 x* G  SER=dat4>>7;
% e# A; W5 b9 L3 v7 X$ s% h# S  dat4=dat4<<1;& Z' u' U; o, d( S5 y
  SRCLK=0;
' \) L* X* a9 j: T6 k6 e3 p4 S  _nop_();
) Q* }9 d% l0 w, }; M; D2 d  _nop_();/ K/ I$ x4 F$ t3 H+ Q8 I1 A
  SRCLK=1;
4 }2 t/ F* U! r1 A# g# v( Q}
: z" n+ ?9 ?. H8 pRCLK=0;3 _8 n& t% D) k, S1 W! ^
_nop_();
* g: P4 o! O" S0 e" _6 S' c6 U3 x_nop_();" [& x: F) ?5 {! h+ I
RCLK=1;
& t& V) J3 `5 u; a6 f5 X
& f! y; \4 j8 u}
. _' Q1 Z. p$ |6 L0 }2 D& |void main()
% U  W- [& H; L{
. @% |6 m' ?9 H3 F* W+ r+ uint i;
" t' C. G4 }& f' P& hfor(i=0;i<16;i++)1 Y+ M' \9 f/ t/ Q, Z( L5 x9 z1 Q9 K
{
+ h. s8 o' Q+ s5 v  Hc595SendByte(~ledwei[i+16],~ledwei,ledduan1[i+16],ledduan1);; j) z' |/ v6 ?* i' ]* W. p1 u
  delay(10);
0 O- @# }! E; x3 ]4 u+ W$ t- k}
( j( Y3 s5 K/ |2 D( B   3 w- k( H  M- b# p" v5 q0 f9 S. L
, b! Z) s5 x9 v3 I+ H0 r
} 0 d9 k# `2 p' W  a; V1 O4 L

该用户从未签到

2#
 楼主| 发表于 2019-3-25 10:10 | 只看该作者
我觉得我应该介绍一下这个程序# n* H+ j( E/ _; u; M, `
通过四个74HC595芯片来控制16x16点阵的四个管脚
7 A( k1 V  ]8 l! _$ @函数Hc595SendByte()里面的程序没有问题,该函数的作用是运用串转并的原理将四个十六进制数导入到16x16点阵的四个端口。
  \$ K7 r; B8 s0 C5 M4 G8 |数组ledwei充当位选的作用

点评

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

该用户从未签到

3#
发表于 2019-3-25 10:23 | 只看该作者
十一月 发表于 2019-3-25 10:10
4 j4 L# k2 H! s8 b0 e( ?我觉得我应该介绍一下这个程序+ V. a& e, e2 F- {. C' S
通过四个74HC595芯片来控制16x16点阵的四个管脚
8 @2 Y2 k  w- _( h2 @  G函数Hc595SendByte()里面 ...

! v9 T- p% A# ^. r4 E$ e你这16X16的点阵是什么样的接口啊?最好贴出原理图
; }0 e' M$ `! d& z3 c3 F+ F! C粗看你感觉你这16X16点阵就是横着16个接口竖着16个接口,难道是串行转并行之后没有锁存,所以第一个才只闪一下?% h; j) y! l1 d6 J% p2 W$ Q

点评

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

该用户从未签到

4#
 楼主| 发表于 2019-3-25 11:14 | 只看该作者
helendcany 发表于 2019-3-25 10:23
3 f* l5 z- `4 w, A! G你这16X16的点阵是什么样的接口啊?最好贴出原理图5 a3 y$ T/ `: ]+ q3 I
粗看你感觉你这16X16点阵就是横着16个接口竖着16个接 ...
9 V3 J+ p$ d4 f- r7 A7 h
谢谢楼上的意见,原理图已贴,确实是横着16个接口竖着16个接口
  F9 f8 W. P4 H; L& W

5 V! }$ X, \: d0 Z
: U7 ?0 o/ T( k6 T' z5 [  I
' {  ^9 e  K) F

! D, A4 p8 s' q) J  S. m! o$ v

! v5 z; n- J. L* Z可能我没有表达清楚
, C0 h* n# U! W7 s! x我预测的效果是程序一一直亮着,程序二只闪一下
. [8 g& m( \5 E- U) e5 e) Cbut  实际上是两个程序的效果一样% r& c+ s7 J/ I7 s1 D. j: `
$ w0 B+ s' o9 D9 S

点评

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

该用户从未签到

5#
发表于 2019-3-25 11:23 | 只看该作者
十一月 发表于 2019-3-25 11:14" R- `% z$ K/ e" i! B$ F2 T
谢谢楼上的意见,原理图已贴,确实是横着16个接口竖着16个接口

( L2 [  F* I% G- S' I# W跟我想的差不多0 g5 B* k4 {& ]5 t7 {, J% V; P
不过你有注意到74HC595的12脚是锁存脚吗?
  V7 {2 N7 ?/ p7 j$ Q: ~$ H这个脚你不用是不会锁存数据的,所以只是闪一下
7 |( z% x2 |- E1 r" u

点评

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

该用户从未签到

6#
发表于 2019-3-25 13:19 | 只看该作者
图示是ON公司74HC595的框架结构,左边一列是移位输出,中间一列D触发器是锁存,12脚的锁存管教应该有个时序的变化(刚看了一下,应该是在串行输出结束之后从低电平变高电平)
% `+ b* U# O: H4 z) `4 {如此串行转并行之后的数据就能锁住不变,而不是一闪而逝
2 Q3 c: P, L" m" C" E+ m7 b( Q+ o7 U# Z5 K9 x1 z: ?
要改程序的话,你试下在你每个for(1-8)的大括号之后都加上下面代码
  K/ r% A' L- A0 D8 w# }  RCLK=0;
7 \7 V, _% q$ {$ Z9 }# T  _nop_();1 a9 ^% g5 p2 q6 }
  _nop_();
. D% I: G% L2 Y! v# A/ R8 K  RCLK=1;, ^2 \! J  ?# C2 f

. d# t) J% b, y

点评

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

该用户从未签到

7#
 楼主| 发表于 2019-3-25 13:24 | 只看该作者
helendcany 发表于 2019-3-25 13:19
  X3 Z9 }, A' `: d% Y图示是ON公司74HC595的框架结构,左边一列是移位输出,中间一列D触发器是锁存,12脚的锁存管教应该有个时序 ...

" m" U% j- D' z( B% y9 N+ [, \  i如果每个for(1~8)后面都加上那几个代码,点阵每个LED灯都亮了! \9 {: w7 @5 h0 U# g% x8 w

该用户从未签到

8#
 楼主| 发表于 2019-3-25 13:24 | 只看该作者
helendcany 发表于 2019-3-25 11:233 v! G9 n1 }% u, i: a- C5 L
跟我想的差不多
1 U/ C7 I0 `3 a$ {, n( X不过你有注意到74HC595的12脚是锁存脚吗?
/ `9 L9 K+ C; Y% n# Y2 \; l1 U这个脚你不用是不会锁存数据的,所以只是闪 ...
% l- @; H$ |* C# ]
不不不。。。两个程序都是一直亮着
- l$ S0 b8 B8 F; C我是说我预测中程序二的效果是闪一下,实际上程序二的效果是一直亮着+ V. w9 Z9 m8 F6 f

点评

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

该用户从未签到

9#
发表于 2019-3-25 13:29 | 只看该作者
十一月 发表于 2019-3-25 13:24
; e- m* p$ Y. d7 B+ U6 f6 [不不不。。。两个程序都是一直亮着! V) R, ]5 J9 C/ T* j
我是说我预测中程序二的效果是闪一下,实际上程序二的效果是一直亮着 ...
; Z/ o1 M9 a! Q
是我看漏了,不好意思。原来你每个程序在Hc595sendByte()函数最后 都进行了锁存操作。
5 Y6 k1 Q3 |0 k& }/ t既然锁存了,就算不进行while(1)循环,也是一直亮着的。
$ k4 W8 `8 u8 D. T在程序2中,就算只有1遍串行输入,输出也被锁存固定,不会变了,所以才一直亮。0 W- N& a+ m' y9 C# u* x

点评

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

该用户从未签到

10#
 楼主| 发表于 2019-3-25 13:36 | 只看该作者
helendcany 发表于 2019-3-25 13:29, {) h/ `- N' t5 w1 O. Q* S# D
是我看漏了,不好意思。原来你每个程序在Hc595sendByte()函数最后 都进行了锁存操作。
+ m" W  Y( I8 b' ]1 Q8 ]既然锁存了,就算 ...

' E1 h7 U9 S7 W6 i* E嗯嗯 谢谢你啊0 I8 d+ o/ k$ Y9 M3 J
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-17 11:29 , Processed in 0.171875 second(s), 36 queries , Gzip On.

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

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

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