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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
请问lcd1602是怎样实现滚动显示?
7 K3 x& r' N7 p; C. P+ t9 i
  H3 y% i# Y* M1 a: }. D: b# T1 t1 t4 P
#include
2 L4 W3 f. B6 |$ U) Htypedef unsigned char uint8;
9 x  t2 ^0 G- e8 ?typedef unsigned int uint16;# T, r" v- q3 ]3 W% x, N: p
***it rs=P2^6;
5 `% S- O. ]9 V4 x) Y***it rw=P2^5;
. X- }! g/ u" Q- ]- u! }***it e=P2^7;
3 W5 L8 v9 m+ Tuint8 a[16]="perchin designed";, `3 a) X1 W/ R2 N* d/ s1 n
uint8 b[27]="welcome to the world of mcu";
) f" s# `% q, `* _" h- \& N( Kvoid delay(uint16 i)  //1us9 n2 V9 B" c7 g. E6 ?7 y
{
% w, b. x1 T) q. |) x1 w9 E        while(i--);
# n. r2 X1 E- ^8 {' f}. m& f7 Q9 _% _2 N- S% C& ?# V0 k: O) V
void wrc(uint8 c)
9 C, n1 E) Y; X/ L{+ C9 G9 f/ l, |; N9 \
        delay(1000);
3 c* U; L- q+ x5 u/ t/ A        rs=0;
* h( w8 y( b3 Q9 _( \9 Y        rw=0;
9 F- I! L0 Q/ M1 _        e=0;
$ q8 n0 r0 U( S        P0=c;" r+ O! n( f( I4 p5 B9 `
        e=1;
$ Z" q. |6 K: B* s8 K( ?. H        delay(10);/ ]+ m6 e9 C4 A3 w
        e=0;( J/ X* \1 _$ F4 x- _
        /*/ q2 X* ^. @! L3 A! e  Z7 ?2 b
        P0=c<<4;  G7 @7 S  N+ i) y- `  l; i5 R( ?
        e=1;
- r6 \. e8 t5 w6 C  c6 p        e=0;*/       //四位的LCD要加上
' o9 N0 z' _) k  `}' J; {4 F1 Z+ Z; V$ V( B
void wrd(uint8 dat)
% v- E5 Q7 P% L* j# v) i{( G% b3 K( a7 o/ Q+ Z9 Z3 J* L: L* @
        delay(1000);
7 ^2 p' d, v. }        rs=1;/ _; `0 e3 `* f0 [( i1 w1 ], b7 v& }
        rw=0;
) N  F4 w4 e- D5 c        e=0;! i: i. f& o2 @# _$ O1 X7 M6 q
        P0=dat;" P* _1 i, R1 d6 c5 \! ~
        e=1;
/ O, z; a1 x$ f, V. v& H9 a1 }6 d        delay(10);- E$ f$ w) h1 K* K7 {
        e=0;8 B9 w# B. r1 Y2 F$ ?- Y8 X
        /*
. ]3 T' K, G9 m5 d8 n3 M: g, N        P0=dat<<4;
: K/ ~$ {- {& q$ R  v) S        e=1;
! C: ?; ]4 |# j        e=0;*/           //四位的LCD要加上
9 q' G2 r: b9 v& u6 G        rs=0;      
- v3 U: X2 J4 V+ [' @* E0 P! U}- ^: A6 ~$ q( |8 h% b1 Y
void init()
; U! ~& R! N* d3 ?{- \8 R7 N7 F$ r0 [1 t/ i( Z, U; H% d
        delay(1000);& i: U2 k, ^+ b6 z# I1 v8 |- D% c3 t* y
        /*wrc(0x32);         ; j* b- }# ^/ m- p
        wrc(0x28);
/ O' d3 |- E$ h& ]! U/ ^2 b& H/ P        wrc(0x28);        */        //四位的LCD要加上$ w$ h$ G+ M1 }! f" r- a. L- S+ O
        wrc(0x38);
- f* F, F- M. g- z0 L) I1 w        wrc(0x38);
. {/ a! r; M3 G        wrc(0x38);      
0 l  Z* C4 b5 J8 \9 D% y        wrc(0x0c);      
* f8 l$ k4 e' E* c& c- f' `- g( F        wrc(0x01);      $ T1 n( @% g' a+ ], i% x' g
}$ `- l# L, H# m& x% X3 `
void display()! t' D: S  u; _1 @
{, f8 C5 ~4 m6 o; D& I
        uint8 i;3 j( O+ W" E% N( s
        wrc(0x00+0x80);/ o/ M5 @' i' z! Q3 u
        for(i=0;i<16;i++); J7 Q, }6 ~  _3 f( U
        {
1 W# R4 D  a3 ]! `                wrd(a);      
, N% F+ H# ?+ z) n6 l        }
: J0 B& ^+ I4 u8 f' G1 ~1 Y        wrc(0x40+0x80);
. U. N" C; l- ^8 x  e4 G& Q4 v        for(i=0;i<27;i++)( D  E; R. ]! Z5 G7 j7 |! y  S  z
        {/ T+ o1 P& h& T6 u; t4 a8 }
                wrd(b);
( o$ f0 w1 }6 ?$ f2 |/ A& d* S, V        }
$ U3 e) O7 b$ t) ?) [2 X/ `0 r        wrc(0x07);         //每写一个数据屏幕就要右移一位,就相对于数据来说就是左移了;
# U9 r: `: W* u        while(1)% w$ ~) l' Y+ n
        {      
  \0 ?% C4 m; J( d' ?+ n$ d                wrc(0x00+0x80);4 P  j9 J5 r) s# X
                for(i=0;i<16;i++)
) c  U; n% j1 E                {& p/ \1 t: p4 k5 ]. T
                        wrd(a);0 G5 C! v& c3 {
                        delay(30000);        //如果不加这条延时语句的话滚动会非常快。$ I$ J# ]( o) v9 u7 U
                }
: n2 m. k0 _7 A1 v) O1 F2 T" k6 l        }7 c$ z" }- A9 G7 b
}
6 F: q4 p+ l! y5 Y) n( Ovoid main()" ~- r8 d: K; t# M* I
{
# O$ \3 _9 A/ k# Q' i0 Z  ]; A        init();
3 `# U% J- X- {& R! x! P- e& w! K. q        while(1)
* @2 B- ]/ D+ P1 b( |        {* ]; [4 Q  P- m$ M+ V
                display();( j0 }; ?3 ~/ l& k$ u- k3 J4 l
        }      ! o( d0 `0 }/ ^3 f2 u, J: m
}) q: V% k) K- E6 s! d# i

/ s4 {; D1 k  s8 \  S, q% E$ R% Y/ S6 F) n+ p
请问这条语句是怎样让第二行实现滚动的
/ {0 A7 e6 l; o4 H4 ?% Lwhile(1)
6 {0 v1 d5 T5 T. X" u) p        {        
7 l9 r; z. r( q* E2 k" F+ p                wrc(0x00+0x80);5 B# v. }2 x' D  o7 l
                for(i=0;i<16;i++)0 f0 c7 b8 I: I5 P: i
                {
: {( [  C* w# l, l* U                        wrd(a);. K; X  ?3 b; O! M+ e$ |, J
                        delay(30000);        //如果不加这条延时语句的话滚动会非常快。
: a! O9 u$ @1 l6 N                }
0 k) w% n( B9 I( n) `
7 K: k2 _* ~1 K2 k* w9 o

该用户从未签到

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-6-28 01:41 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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