找回密码
 注册
查看: 275|回复: 3
打印 上一主题 下一主题

请问lcd1602是怎样实现滚动显示?

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
请问lcd1602是怎样实现滚动显示?
- U3 \$ a1 O7 G% l3 ?& n( v+ i( Q# L3 B
# \2 j+ F4 S6 N8 J" Z
#include
' j4 {, d1 U$ S' dtypedef unsigned char uint8;
  |9 A( H6 t4 `typedef unsigned int uint16;/ J- @, N, m( o, ?
***it rs=P2^6;$ j+ A  r" A4 ?3 n2 {
***it rw=P2^5;& j( c* J5 o5 f) Z
***it e=P2^7;6 I% ]' f# d" ?) ]
uint8 a[16]="perchin designed";
3 j" z' j( ~2 i+ Huint8 b[27]="welcome to the world of mcu";) {( r( S- U( v/ _
void delay(uint16 i)  //1us
2 M% U: Y' X& @) x6 J* z/ Y1 T{  K( O4 m6 `+ S, n3 M5 d* Q
        while(i--);
, J  r2 C& K6 N% x. }4 n4 M4 c1 ~}# M8 B/ B/ b; C* n) T$ O
void wrc(uint8 c)
% e- C6 J$ k0 |+ ?  }# y9 }{  _5 ]+ c0 `+ e6 F
        delay(1000);2 J, D: |( L9 A6 V7 v
        rs=0;( y' f/ s' n) E/ M  J/ t1 u0 k
        rw=0;' p7 K# m! `# {3 W- ~2 Y( Z3 q
        e=0;$ b5 B$ Y. x+ z8 Y  T5 e0 l
        P0=c;! m5 g1 S5 s# g+ L7 [' t
        e=1;, s( u! ^0 T: K; b, d. B0 c$ _
        delay(10);/ @2 b: N7 V, P( W
        e=0;
/ i# }- _2 V: ?5 F9 T6 B        /*
0 U! i4 M: w* G  D: W3 m, e        P0=c<<4;- E% O5 ^% ^$ A+ w0 g, e
        e=1;
8 ^  \1 o3 v; o  P% K- L        e=0;*/       //四位的LCD要加上
8 G6 x" \: O# }8 D1 _! X}( s0 P  K5 Z, L$ n8 l1 v
void wrd(uint8 dat)7 s* ]5 @8 M6 `( I
{
9 H" E; ?. d2 s* ^$ h8 v9 Q( E        delay(1000);0 I3 g* C! W1 H% [4 T
        rs=1;
9 Z/ H1 R1 E% b  w$ x6 m        rw=0;
- E( o  }9 ]3 e, q9 B        e=0;! W/ B+ G9 {2 X* g
        P0=dat;
' C1 d3 S, ~) f. a% L6 N" D% q        e=1;
: s5 X" y4 Y. ~. n# E% W& h        delay(10);
- N/ y$ v# y0 K4 h9 C        e=0;
; T. ]6 y& E& D        /*4 H  l; v  A2 g* u3 u
        P0=dat<<4;
, y, L  B+ M/ Z) A1 K        e=1;% _: B; i0 U7 ?3 s2 r
        e=0;*/           //四位的LCD要加上- {! b4 f- Z3 `. `0 P' {
        rs=0;      8 n" G* v7 `# x) ^# M
}+ x* U" B  h& {$ A& S
void init()# r  m4 G9 ~2 V* a% l* y4 u, [% q
{
5 q$ k9 B( _1 Z* I) w6 @5 {. m        delay(1000);
- D1 f: d2 G9 y4 W! a        /*wrc(0x32);         , l8 w* U% O$ N3 y0 e  K" [1 ]3 g
        wrc(0x28);3 C' p5 U4 ?) n
        wrc(0x28);        */        //四位的LCD要加上
4 D9 r! U" X/ W        wrc(0x38);2 l1 n9 p* i3 {0 S. X5 d
        wrc(0x38);
0 _4 G) t' C- P7 ]* g! F: [6 F        wrc(0x38);      
9 K$ C: `% D6 }$ O9 H% K$ {        wrc(0x0c);      ; l, C2 R# {' @! M6 q6 \
        wrc(0x01);      - g; M, \9 @+ b; [; K
}
, R3 _2 f5 Y3 vvoid display()
1 K6 I# [/ P3 {# F6 I{
6 k( @7 U" o) Y; |# l2 F        uint8 i;
- e0 l' v. W+ I. H( T! {        wrc(0x00+0x80);% I9 R7 o5 A- X/ I/ y
        for(i=0;i<16;i++)& Q- }. r: B% T8 N
        {, F' v' g, e7 d$ |# ?, ~
                wrd(a);      0 d, }1 r; }+ W7 U
        }  a: X  J. K3 v  R  c
        wrc(0x40+0x80);( p! U* u. q6 m7 [- d
        for(i=0;i<27;i++)
) l; k2 K0 v3 r. I& p# T3 j        {2 j4 G" \; q' o2 P0 y: A6 w
                wrd(b);
/ Y7 q6 n% `. g. b        }0 ^" ~8 x. W* K% e; x1 l$ U
        wrc(0x07);         //每写一个数据屏幕就要右移一位,就相对于数据来说就是左移了;
6 B9 j# ^4 C" w2 ?7 x2 v# f2 u        while(1); y2 |! r* e; u+ L6 {) T
        {      
5 @* W. K- W! F# R% s# _                wrc(0x00+0x80);8 L. t8 X0 S0 }& ~7 [
                for(i=0;i<16;i++)
6 _  S8 a  E) i                {7 C# j: y' h$ }3 B
                        wrd(a);
; V  P( p( F4 [2 Q9 ?' a                        delay(30000);        //如果不加这条延时语句的话滚动会非常快。
; c' e5 ?7 C  ^                }' O; ]/ k' R, m0 Q* ]
        }
- k2 v; q# Q( M' W# x! U% P}
7 X* ]( E8 r; u- |) Rvoid main()/ _4 l: p' h7 v3 Z+ e9 D, k: p! P
{; J  d7 x6 q+ B
        init();8 F0 }5 B+ @& u. B
        while(1)
8 ?  M& G" G; A) @& z/ \8 Z0 M        {; J- o: j+ F8 K( {
                display();5 c, A" m1 k# v) g9 i3 A. b
        }      3 H4 Q, k1 O0 R4 {0 l
}
9 I8 d# f5 H( j/ {
1 e! K5 I8 ^& x; S/ }$ p* [  p* r! U$ t  v! j4 c' y
请问这条语句是怎样让第二行实现滚动的
' u* a$ g; `% x' Zwhile(1)
  s% D# X7 Z+ Y) z; l3 p3 z        {        
# {, U! |" l( R0 G                wrc(0x00+0x80);
5 C" ~6 }, `, D. n! q                for(i=0;i<16;i++)5 ~6 }7 y0 Q  O
                {( ^5 m* c! {& t  l) i. T8 ^5 S
                        wrd(a);) t# D' x" B, ?& d# L3 j
                        delay(30000);        //如果不加这条延时语句的话滚动会非常快。" ~; I! \' X  a7 S  S0 x* q# l
                }
- S. O8 J' P3 {; g3 M
& z7 E# B. M. V' M

该用户从未签到

2#
发表于 2023-1-11 10:59 | 只看该作者
使lcd滚屏显示的是wrc(0x07); 这条语句,它是设置了lcd输入模式,该模式下每输入1个字符,整屏左移1位,无字符输入时,无反应。

该用户从未签到

3#
发表于 2023-1-11 11:22 | 只看该作者
这条语句操作的是0x00,0x40也会左移吧

该用户从未签到

4#
发表于 2023-1-11 13:36 | 只看该作者
0x40是完成整个数据传输后整屏移动,假如你要输入一个字符串有7个字符,0x07会移动7次,0x40会移动一次。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-5-30 03:01 , Processed in 0.093750 second(s), 23 queries , Gzip On.

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

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

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