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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
请问lcd1602是怎样实现滚动显示?
% w- k* v2 D% S3 ~! V9 ~2 _3 |
; \: V. m; d4 y9 j# H. Y7 C% q8 Y) v5 q8 N
#include, E; P4 q; Y9 C
typedef unsigned char uint8;
8 u5 a8 O- J$ g  z0 Ztypedef unsigned int uint16;& y; Q. Y8 v* X, t# |+ L. e
***it rs=P2^6;) p+ }% r4 M8 S$ ?9 @% N5 P
***it rw=P2^5;0 {( x$ |1 h7 C4 _3 L
***it e=P2^7;* W0 r1 j* G* m( K) y' n
uint8 a[16]="perchin designed";0 v$ J* f1 I  ]3 o+ l: y
uint8 b[27]="welcome to the world of mcu";' V& p6 @; V' f; p% Q
void delay(uint16 i)  //1us0 {" k8 U! Z- W0 w* J3 r4 O: y
{, f. q# f5 q4 s. _7 C7 E7 d- d
        while(i--);" [9 C) e: h- t" U/ p; T
}, s5 t, N9 P) x3 d
void wrc(uint8 c)
% Z0 r! P5 K0 J) Y* d{
  Z. ^  _) a0 @) G3 H& ~        delay(1000);& R/ D+ O+ q6 S4 ^7 X
        rs=0;
4 D: b; e, Y& ~$ O4 n, J        rw=0;
5 P" |1 p5 N6 j7 m/ d, b        e=0;. B' C: b* n6 E) ?& S- Q, q8 ~# x
        P0=c;
) I# J6 B; p7 z) J7 b; x* P        e=1;
; T5 H9 x2 S+ t0 i        delay(10);! b( L- C7 e  X1 q7 d, b
        e=0;
$ Z9 V/ t) _5 v6 d9 \+ w        /*, ]$ _& L& @( U+ i
        P0=c<<4;  y  v: j1 E( J4 C
        e=1;" g) o8 e" s8 c& [6 a* p/ l
        e=0;*/       //四位的LCD要加上
5 w3 ?. E$ a& D0 Y4 X2 t& }3 |2 l$ @+ N}
" ?( P3 \% {5 d$ z, W3 @void wrd(uint8 dat)
; p5 ~: S: F+ n- }{
+ f6 A' C- g2 F# B3 f- _        delay(1000);, G8 [% U/ n: q7 w0 q
        rs=1;
+ A- [& b. J& _- M! b0 \7 I8 R2 f% d        rw=0;
: ~0 [6 F% f& Q3 H        e=0;5 O: f- Y& {) L) n! \! t+ _
        P0=dat;
3 F/ b2 P8 k9 y4 d9 B% d2 T        e=1;
; ]8 L! ~. B% D, s        delay(10);  j: @/ \0 M/ u4 A# P9 k
        e=0;1 K6 @, d! C+ }3 S8 |) X2 `
        /*, v! g; f% y$ {9 K4 |5 Z
        P0=dat<<4;. Y# Q& c! l# L5 ]* g' G
        e=1;
$ v9 G( V' |  s3 I; a+ J        e=0;*/           //四位的LCD要加上- H! h# x' V+ y  }4 b% J
        rs=0;      * b8 _0 M( Q/ I% E% b/ k, |, U
}5 _4 F1 W2 |( {; [) e
void init()
3 |3 _5 _+ W0 a{, w  t3 h/ c7 B
        delay(1000);$ \% V* o% _8 a! d/ G! ]- R
        /*wrc(0x32);         
  l9 v; u/ i  \3 r( O+ x        wrc(0x28);
, o9 Y. i7 ]( Q( w        wrc(0x28);        */        //四位的LCD要加上1 `" G! O4 N2 _6 E: ~+ b& x
        wrc(0x38);2 R' d7 \6 X: X+ T) _
        wrc(0x38);
# Z; j, `1 B9 C1 ?6 F2 m        wrc(0x38);      ; S5 b* z1 O4 h; g
        wrc(0x0c);      
% N& r) v) Q1 M        wrc(0x01);      * }1 @& u5 v; F0 c& u! y$ L
}2 K( T2 Y7 x1 F2 K* D4 B' J2 ~
void display()
4 u2 H% B0 F6 ]% j{
" [& h& m% e! V# g: |# X# a        uint8 i;6 ^/ A; f! e5 D& \
        wrc(0x00+0x80);$ R& p, O9 \1 i' y; `+ t/ b
        for(i=0;i<16;i++)
" N9 T9 X9 \' t( w: O        {
3 g/ S# Z3 L! {1 h7 O                wrd(a);      
; y' X% }  J' h        }+ x5 {) ?. k$ ]+ o% {! O/ ?4 O2 ~
        wrc(0x40+0x80);
& y, e8 z) t5 k        for(i=0;i<27;i++)
4 F$ E. s& h" k+ S/ g4 j        {
6 A$ `# w+ P1 f$ F; g; C4 G* G& @                wrd(b);
2 G- L% S. M1 K9 b/ Z        }
- j% e0 M0 M* ?4 z- Q        wrc(0x07);         //每写一个数据屏幕就要右移一位,就相对于数据来说就是左移了;
* e+ e% B2 s: P2 y        while(1)
1 _3 z2 K2 K1 C- B* E        {      
$ X6 J5 G8 k6 S. [: b3 |2 I                wrc(0x00+0x80);
- V. K2 {" d6 \! z5 T3 ?5 f8 h' y5 g                for(i=0;i<16;i++)
+ B( s2 L9 ~# s                {
, w* `7 J' F  G4 x0 u- S0 S                        wrd(a);
6 W( e# o' t( K5 @7 }                        delay(30000);        //如果不加这条延时语句的话滚动会非常快。' u3 K: H# g) u' {" }6 i9 l
                }
+ k. g+ J$ q" a$ r' I        }; p4 z: H" h- f& h4 d$ H, D
}
# V, W1 Z3 v; h9 J( evoid main()/ \- {  P8 Z% j: f# i0 A
{
+ i' |2 i! Y9 _3 ?+ D        init();
$ J2 @& k! `/ [2 m' E& ?/ s# R        while(1)
3 w* U! Z6 }' T) N        {
$ N$ Y' T9 b( {: c6 v4 l: z4 Q                display();0 r* G  [% N$ x5 x
        }      
( o$ E( f9 p. D! o/ \  @}0 W% X7 N, k7 {" W
0 J; h- W5 u  n3 l) p# _& e( g
! h1 P# s: u; S. r
请问这条语句是怎样让第二行实现滚动的1 W$ Y% [2 U& K( k: K- H
while(1)- ~/ F( e" M7 m1 m# U+ v
        {        3 M( A' W+ N  ]& `1 y/ S! l& w- P
                wrc(0x00+0x80);0 _  O8 \1 X; `4 O
                for(i=0;i<16;i++)
& G6 u4 e/ k. J! p3 h                {+ |: ~4 r  D. h, Q
                        wrd(a);
% V- E2 `. U' Y  J% \                        delay(30000);        //如果不加这条延时语句的话滚动会非常快。
% R0 a+ q4 K2 F                }
$ X" v% ]1 m0 K; k$ m
5 m# u, Q: J4 {: a4 s0 M& e% z

该用户从未签到

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-8-18 20:42 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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