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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
请问lcd1602是怎样实现滚动显示?
- W- ?3 L" k5 X0 r
2 \. q4 ^; x5 O4 p
: M. g, k7 u6 e: p* \8 d+ {#include6 m! t/ q4 q& @9 F0 @
typedef unsigned char uint8;: K! p9 l5 s; h9 _
typedef unsigned int uint16;
3 w/ W# F; n' P6 O***it rs=P2^6;- ~2 d0 w0 k& Y# s
***it rw=P2^5;* X( p4 p3 J. D3 h3 Z/ d
***it e=P2^7;
5 n1 r, @2 E4 L' F; Ouint8 a[16]="perchin designed";1 h0 j9 L. m8 e, C4 d; J/ U
uint8 b[27]="welcome to the world of mcu";
( w# j  q  q9 f; \void delay(uint16 i)  //1us  n( F" f9 A' ]' x6 `* p
{
9 T/ t4 j4 I2 H, |$ d: K        while(i--);
$ g6 s: p6 S8 F# S6 f, x( `}
- J% h: {6 Q, N; q$ _void wrc(uint8 c)
  @1 N# @9 X: H8 l. c! W" S6 v9 ]{
# p2 p# y" H% O, @        delay(1000);; S* [! v3 Y* G7 Q! ]
        rs=0;. w% s7 L8 k& K% ]% a9 Q
        rw=0;
! Y* d1 E3 P/ ^  {$ s        e=0;3 l: x9 W& `( T6 \
        P0=c;
, y' v# P- |5 n. k" R        e=1;
4 U  t- ]% H9 L  k        delay(10);
3 k  W0 U. [& o- F        e=0;1 L& r6 J( W6 i; n
        /*
+ f1 h/ y: c# ?( M7 J( q) O        P0=c<<4;: U8 j+ x- a' K* M
        e=1;1 ?* U! e2 m8 Q2 T  y
        e=0;*/       //四位的LCD要加上' V- M0 j# O+ u# C; Q
}
4 ~4 h' y$ e, e% W. Rvoid wrd(uint8 dat)# B3 _7 S6 v$ c
{' B5 O# B- m2 t( \& h
        delay(1000);( f% W' w' w3 s9 a' ?$ p
        rs=1;
& Y; `" X8 L3 n6 y9 Z! B        rw=0;
( W( {+ r' b7 \& W4 t        e=0;  A8 }: R7 a2 I
        P0=dat;
1 Q$ H+ v. @7 s5 W: y% o8 f  Z7 Y        e=1;
2 J% N7 I; E0 P. s/ W        delay(10);
0 n$ a, S: s6 s' S# s5 J9 \$ m# j        e=0;7 R/ c! K4 E# ]6 z# [  ~
        /*
  F9 `6 ^8 X% b! M! O# o' q" h" [7 y6 W        P0=dat<<4;
7 ^: L, e) E: \6 @4 W        e=1;
& o0 `. e8 C& Z% m4 G5 z3 r# k        e=0;*/           //四位的LCD要加上
* I( o& m6 e6 g+ N( ~        rs=0;      % h" c' n) I* Q4 b3 X% t
}
/ v5 E- J6 d9 Z, v: Gvoid init()% z8 G4 E/ |/ l( n# N
{
- z( R& c" G: a7 r2 q2 F2 R        delay(1000);; v2 Z1 c% r3 u& w( c
        /*wrc(0x32);         
8 \6 W+ e' |4 X8 {        wrc(0x28);
( @: L, y- m+ D        wrc(0x28);        */        //四位的LCD要加上. a: [0 r# l% m& n7 o
        wrc(0x38);
* k# ~" U6 M) |1 j9 V- @# Q: W        wrc(0x38);
/ L6 \6 g# Q* W        wrc(0x38);      8 z7 t0 T2 j/ x( U, \
        wrc(0x0c);      # j3 ~4 U4 |0 V
        wrc(0x01);      
8 Q9 l- d( C6 ^7 m}3 G. u* W5 q3 h6 R; l% Y
void display()* g  n! M8 b, P% P
{/ v( `! U9 o# b% T& f
        uint8 i;5 h3 D% U( b7 @+ g
        wrc(0x00+0x80);
) z; @# ^; ~6 T: |$ P0 D" D7 T        for(i=0;i<16;i++)) B% i8 E$ f& G2 {# Q. M5 N$ C& g
        {
6 J! J1 d% U7 A: B% t, g                wrd(a);      1 D$ q3 K- ]8 @5 H3 y% q8 c
        }) Y. H+ o0 }6 o+ y" ]) V) M0 e
        wrc(0x40+0x80);, A$ S6 [$ x: w: g
        for(i=0;i<27;i++)
: d* R# |5 x) m7 }) I        {0 W/ x  G+ n3 s: k8 E5 H9 w
                wrd(b);. c1 `. |' d) V
        }( F+ w( U$ t2 j9 ]$ @
        wrc(0x07);         //每写一个数据屏幕就要右移一位,就相对于数据来说就是左移了;/ n$ m2 \# w0 M) |" Y+ H) I' W1 {
        while(1)
- ~+ T" D9 u3 ^2 U3 ]4 a* R6 s3 C  I        {      
2 D/ O+ p5 R: T& d* Q  l; Z                wrc(0x00+0x80);/ v7 F+ [. r5 }6 f$ O$ g& w$ U
                for(i=0;i<16;i++)
& k/ S3 F* k  v% O5 }' Y6 \6 ]9 X                {6 T1 V' K; m% G0 }9 a& x( G, a* T
                        wrd(a);
" f# a- X& J/ ^6 G% w                        delay(30000);        //如果不加这条延时语句的话滚动会非常快。
4 y; G  y0 e& i+ s                }, z7 O7 F/ M# V9 {' q
        }
4 ]3 z" U! [: t% m# [/ _; H  [}5 t9 B4 d; T6 @- l
void main()6 Y6 X4 f5 o3 d' l. {, H0 |
{4 ^/ q# z: V6 R
        init();
! R. B. `: w7 ?* v2 q2 z" ?- ?        while(1)! ^$ t) o# m/ n# {( K
        {# w9 B. ?( u8 O/ X7 o0 k- q
                display();
- n% _2 X; B8 l9 v  [3 F6 J& i        }      
" p: [) H5 \: |' E* i" j}
& j8 t: s6 ^0 c4 }1 k% q6 @
5 s1 Q# ^! F( V% B# [
) s" G9 R5 O( |请问这条语句是怎样让第二行实现滚动的7 l7 }5 q2 I, R% i0 {, q4 b
while(1)
7 ?1 C& v  z3 o& J$ n% `7 M! h        {        
9 L8 o2 @" o/ F* A% d" S- L7 w                wrc(0x00+0x80);2 L/ w" t3 W$ ]5 r
                for(i=0;i<16;i++)
  B$ i: q& j) Y1 I* M: X, }                {8 Z% W- N2 `/ C6 r7 F8 k
                        wrd(a);
5 h; n' ~; K" N( ~6 }$ C; M                        delay(30000);        //如果不加这条延时语句的话滚动会非常快。
7 u! \7 y+ {* P; r2 h3 C4 N% w                }. u1 g( t# w! [/ ^# f
( u$ |9 V8 z8 e

该用户从未签到

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-7-29 18:01 , Processed in 0.125000 second(s), 24 queries , Gzip On.

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

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

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