|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
LCD1602的简单显示
% V# F$ _& _( M4 q3 h* v0 ]2 g
# }4 j8 I3 h. @+ v% [: m' Q# v
闲来无事,做几块板,就想做一下LCD1602的显示板/ g) e) X, g3 }0 `! a8 a" t* M6 Z
自己从写程序到仿真,从原理图设计,画PCB图,腐蚀钻孔,再到焊接,终于完成。: f7 q8 z6 R2 \/ I' g
- U& _1 r5 p% V0 G; }4 e / `& x6 {# [: y% Q# |0 M6 }
' N+ i, H4 ^ o5 {
8 k! i: b* ]; p# H& {9 g( g& A! K& L
& V2 j8 y7 Q1 ~. M7 k ^2 Z0 S) T/ N
0 z% W/ `$ s0 `# K% d Q, J7 _5 m" Z7 H, a- q7 a1 C9 D9 A: G
' T) v g: [, e1 I$ `' d( Z
! f9 }, j9 y5 E% T
/********************LCD1602 双行显示*****************************/
' o e4 b) y! ~% Z, k3 x5 ^' ]
d; {0 C1 E# D% Q* Z! h+ O
% @- @+ S. O( o0 E#include
& E% B9 w1 b/ W5 B* v: S; p3 }) B6 A#define uint unsigned int
$ l3 e- y8 X7 j#define uchar unsigned char
: |- s, E' }/ ^- z& e1 y8 ?& B' K( J$ y% i" c4 }" E5 i6 D
/***************************第一行显示********************************/
/ w9 R# s4 W2 y$ `. S8 m( m+ Ouchar code table0[]="Xiao Qi ^_^ ";
0 E( N$ N* l0 V% D8 h- S% x% D/***************第二行显示****************************************/
8 P% O- c/ T/ L2 w4 ^5 ^& ^% buchar code table1[]="I LOVE YOU 1314";% ]6 j; ^* o* u: @! e- Q4 P; t
uchar num;% _( ?! `9 b( H
/**************1602的各端口与单片机衔接*/+ B2 p, q( }4 n% F% g
#define DB P0 //P0口为LCD数据线% y/ i- E8 A0 ]3 V/ j4 c
sbit RS=P2^7; //P3.4为LCD的RS端口0 v* _( g5 r9 |1 ^/ J
sbit RW=P2^6; //P3.5为LCD的RW端口1 k0 s' d% G6 ^2 T/ @* i n( ?
sbit E=P2^5 ; //P3.6为LCD的E端口
, t2 ^7 c- E' \ U3 w7 I& b0 l) \* R o, U; l! u
/***************毫秒级************延时函数**************************************/
( T) f1 Y" Q, I- s" Uvoid delay(uint z)
& u. x" e5 x+ h{
/ q- T" Q( E6 G9 p" {; F uint x,y;
9 w7 q7 `$ r/ {# J) J) ? for(x=z;x>0;x--);
( k% ?% x: o* L" X8 C: i* F for(y=1100;y>0;y--);
/ G/ y9 _7 |& @4 @- S}
6 v8 c; R0 q5 V1 [& U, w! w$ x1 H" B) Y; V2 {) ~% B2 H
/***********************向LCD写命令函数**************************************/
+ T2 \8 ^6 G' r7 c6 K( Y- X0 O: R. p5 R3 o
void write_com(uchar dat)
+ l# p- F7 P& r{
+ K# D, V& e% _; ~2 P- H- g delay(5);
8 @* m* H7 `1 t7 T1 }; r: K RS=0;
; H( E# ?+ l% Q- K, t( a RW=0;( @# m( l7 [' g- O. F
DB=dat;4 W+ v0 d! g$ A8 }! J( v
delay(5);3 N* m2 }6 `# l- e, D, [
E=1; W( C9 ^) I' u2 u4 d
delay(5);( X+ ^. x. S7 w0 H6 Z1 z1 ]& v$ g1 y. L
E=0;2 v$ x; x! n# ^, @+ p
}
+ d' e. o* J2 m( I. @: [- y) e: Q) \* g
/***************向LCD写数据函数*/8 `/ _5 W0 a; p3 L
' Z8 U+ U' J6 i3 M ~1 H
void write_data(uchar dat) z7 p% C1 Z7 }& u7 k
{. i" N: Z2 _4 \2 M7 E! @
delay(5);8 m9 T( }( K' O0 c8 M0 l+ @! B/ c
RS=1;
: ~! d0 Z2 g! ~. M RW=0;9 e4 `& h9 A# a9 O. V0 ^
DB=dat;
7 n0 G d2 {# d1 c* e- K7 a3 c! Q delay(5);
# \; y# |9 N1 S9 |4 e5 ?- B E=1;
v& |8 [1 [- t" l( K delay(5);
$ t# l. e# W8 I& [* q: v- ~$ }, e2 B. ] E=0;
% `( _* k# k* r6 w7 x/ |}
5 Y, P3 {4 L$ h+ F J7 i/ p8 g3 ]0 F& g. N. ?8 E. V) I A0 n
/*LCD初始化函数*/
" A( \$ Y, v% L r+ Nvoid init()
6 A( X* ]8 i0 T% p9 h/ ^{
1 j+ ~" T; L2 b R! g! T delay(1); _. D- _0 h; N) d
E=1;
/ z; Z e3 `5 k. I/ T9 b0 s write_com(0x38); //功能设置***********设置8位格式,2行,5x10; S9 u c8 l8 j7 A5 A* u% K; b
delay(1);
9 z" U; _" V% X$ C1 A! M write_com(0x0c); //显示开关控制*******设置整体显示 开光标 光标反白显示
2 S8 |' x% v' x' y- b delay(1); ! C# Q( ?/ q# J# D/ A- J2 B* y
write_com(0x06); //进入模式设置指令***向右移 AC(地址计数器)增加1 整个显示移动. i1 n r4 G# [. v- m' G7 l
delay(1);! v) b ?3 ?3 K: N
write_com(0x01); //清显示*************清除屏幕显示
7 i% [# r3 B C! s0 y+ f9 U) d+ r X, z delay(10);
3 L G- ^7 z# ^, C/ s, Y write_com(0x10); //归位***************将游标归位 移到开始位置. Y7 @* F- {) R1 n& ^
}8 r: {; _" R& f4 {/ g6 @) z, f
0 Z6 r2 T+ P3 D; Q
/*LCD显示位置设置*/1 P6 ?+ I* E- L( F6 K, v6 w
void set_xy(uchar x,uchar y), @$ @) g7 `7 k) J$ K5 a
{}8 }, Z6 U* o" z8 l+ l
3 Y. q( y6 }. P4 P, \- ]
) p+ l6 |" ?5 l8 t x! s% j0 T9 l- u
6 A% H8 p8 Y" |8 {- Q9 q /*主函数*/ % U) _5 F- z3 }* _& y- i% w
/ O5 O; }; W3 nvoid main()
* X7 t( m& j' c; ~7 p' q {2 q6 T& B" @2 y6 Q4 Q7 R5 ~ N
init(); //初始化- {3 D0 r7 z+ H! ? [
0 g4 ]7 P3 b0 |, j, j
& K0 h2 Y& ]: z& N# y; p h% s t& W3 c! a
/********第一行显示******************************************************/& T7 m3 A% b3 ]. D* u! }
write_com(0x80); //开始指定第一行第一个字符位置0x80
8 B5 I9 C: ?6 K: K for(num=0;num<12;num++) //向1602写入第一行内容, O" x8 Q- n1 ~. m5 L2 L
{ //) J4 x1 Y+ e3 ^
delay(500); //
# f g* m) S [2 y write_data(table0[num]); //
) `: ^# t4 u9 Z" k- z8 x //7 L; s' g: F% A7 q/ T
}
% Z9 @/ N$ _1 x
3 m5 S% V7 w. _1 O6 z" ?: M4 w. S' w+ F3 t. o* l
/*************888****第二行显示***********************/ P- o! [$ w$ {- D
delay(10000);$ M8 S+ [0 q u$ z4 p2 T* |
write_com(0x80+0x40); //开始指定第二行第一个字符位置0x80+0x40(第一行+0x40)
* f0 }# U% u- d% v U. x for(num=0;num<15 ;num++) //向1602写入第二行内容
6 Y" s, @# G( T m3 {9 { { //$ \7 E( w5 N8 {: m+ T! X
delay(500); //
( M; S9 I9 r/ T# M write_data(table1[num]); //
Z: F2 \- ?* E //" T6 n% a$ k; l7 F7 M8 u
}- U9 N! W: y& b
delay(50000);1 A/ k( _/ i' o4 Y( U
delay(65535);
9 l4 j( Q! A1 p6 R2 U4 ] delay(65535);; a/ j( i# W+ {, v/ u$ E. B; V' s# y! _
delay(65535);
1 i1 `: p% ]" @' J; f$ V) l8 B, \" `) t O/ o" m
delay(65535);
4 Z4 |9 G2 ~# Y6 j& H- f' J4 g delay(65535);
* I' e7 Y, g& S. g: [! a delay(65535);
+ U# J" M5 E7 N# d% b. X! l delay(50000);) V# {- o; K" e. Z+ T- q5 y- f" ?
delay(65535);5 T' J3 `" H: B+ V+ j4 b
delay(65535);
% A% W; i' B! x4 {, O' T N' ~4 ?
. }0 j, o8 I: V. d3 _ } 6 C4 z. W3 M, a$ H7 p! S
. p+ d; a" F6 e( ?! \; m0 D
下载:4 _) j4 O6 J+ ^% k+ Q6 T, b$ Q
: e* ?3 y: Q/ O! y' u; s
7 W1 g8 s6 K, Y. ]
|
|