|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
LCD1602的简单显示
+ S: I8 [" d& j; x; R g6 o
$ M0 `& ^) d- C" n) v& U9 t, l3 ~/ v3 w0 W7 j9 {& e
闲来无事,做几块板,就想做一下LCD1602的显示板. N0 [# k4 `. R7 l3 F# O" V
自己从写程序到仿真,从原理图设计,画PCB图,腐蚀钻孔,再到焊接,终于完成。* I- b$ u' f. t
" S* }% i9 j& {* R
2 ]( i; ~' C) K8 N0 k7 J, k, P
8 H! h: L$ s+ r2 X6 Z- s, a * l7 u5 s2 G; E- d/ h
; s, @3 Q7 X0 A5 y& G; e0 k; G
; d. \ ^9 q* Z) m8 d
2 t( x: V/ y6 B& W2 E4 F" s) t
. w& i' W. X5 D% i) P; x4 t
& T" [! ^) E/ Q0 n; z /********************LCD1602 双行显示*****************************/
' d5 N. m) k, N1 B! J" ~$ |0 ?* X8 i1 u9 Y5 a4 R" G9 g
$ N; S3 D7 m% l; ~
#include
/ X& I5 T* F: o h% D, p#define uint unsigned int% K) ]/ i* ^$ q7 T; n) ?3 O
#define uchar unsigned char
8 @$ s6 q7 k( A+ u9 n- N8 o& @6 F0 H. X
/***************************第一行显示********************************/
6 R$ [. j0 N* [/ I/ h7 puchar code table0[]="Xiao Qi ^_^ ";! w6 h3 Z: f: {' P
/***************第二行显示****************************************/
! m- I- C. K9 ~" Uuchar code table1[]="I LOVE YOU 1314";
/ L) b* Z& g2 f3 Iuchar num;
_& `9 j1 d4 G( S6 g: S/**************1602的各端口与单片机衔接*/; d2 A5 x, H9 ^6 }
#define DB P0 //P0口为LCD数据线1 A6 i3 c; n$ s, n
sbit RS=P2^7; //P3.4为LCD的RS端口
' A; {) q4 m3 ?. }0 Usbit RW=P2^6; //P3.5为LCD的RW端口
Q! W8 [; Q+ y1 W% o. Osbit E=P2^5 ; //P3.6为LCD的E端口3 }$ T' ^" m$ `3 X4 n. Y4 x
5 @. P. i# Q& i( o
/***************毫秒级************延时函数**************************************/# @4 j7 W: j: {
void delay(uint z)
! H1 z3 ~* s" I) B2 Q5 v0 H/ L{
7 I* A. o L6 {8 y1 K) B uint x,y;
9 b/ O5 a. i+ ?. c% ?1 f for(x=z;x>0;x--);8 X' z F& @) Q# P. `* U
for(y=1100;y>0;y--);8 E5 Y& v9 D6 L0 y: o* u7 C- ]- Q% r
}4 L/ ]$ J! r6 x
0 L( n1 A- |% A7 T3 c# u/***********************向LCD写命令函数**************************************/% n1 T' e/ n4 f! _8 x
5 m! h7 v% K: H- x! f( ?) ]
void write_com(uchar dat)
% b+ P! E7 I9 N) Z: _8 N+ f# L) M{
! q* E+ b+ N2 f$ x; r delay(5);0 F5 x/ d/ q9 ?
RS=0;
* r2 f9 s, g9 d- b2 Q/ S6 F RW=0;
( |" g, ^: W2 e4 g DB=dat;
, F- R& z' C" o/ d delay(5);
7 `! u% }7 u7 C" D$ U: E E=1;
" C Y( [; Q1 `+ j _5 J. ? delay(5);* w) @7 z; B" ?1 [% L
E=0;
2 O$ Q& p7 ]- J; J}3 ]9 M9 t- E" D4 P- |/ A9 v. E
! b% g) {( A8 F& l! ]+ v {/***************向LCD写数据函数*/
5 s+ L# J+ }4 V$ E% m! i- I
, A- O5 J" L" i9 ]void write_data(uchar dat)- L% q! t. {; u% z' b
{
9 J' ]. v J! r; c8 H6 ?6 D8 G delay(5);
6 U: V7 f, D% x RS=1;
5 a: p* y; g8 {' W RW=0;
' g. z; } b) f9 C6 b; W. K DB=dat; C1 Q! s# C1 _9 M' w# \
delay(5);
1 ?" B5 l* l/ S) w/ Y2 W E=1;7 n# L1 ]/ [2 U9 n' ]: I
delay(5);
4 F" N+ F% P C" Z E=0;
/ q6 H; k! Z2 M" K3 q' }}/ W3 l& z" X" m
# x9 {; H! s& u& n
/*LCD初始化函数*/
; j( I6 J) [) k4 g6 d' o. Q9 a! Rvoid init()- h2 ?2 ]) E# W0 A9 x! N
{
$ Q! f, Y* e6 X2 j7 I: W% `1 | delay(1);
# F8 @( Z! s% M E=1;' v, `- {5 ^7 r! U
write_com(0x38); //功能设置***********设置8位格式,2行,5x10( d2 A) F- s- X& F" R
delay(1);
6 l+ J( s8 r) H% H$ f; }( z write_com(0x0c); //显示开关控制*******设置整体显示 开光标 光标反白显示7 ?6 m1 J* s2 ?; s
delay(1);
& \# B& K% U' h4 u write_com(0x06); //进入模式设置指令***向右移 AC(地址计数器)增加1 整个显示移动
+ a8 b6 L; }/ ~6 M7 n0 C1 a6 u delay(1);
Z" H, O8 L* a; i1 | write_com(0x01); //清显示*************清除屏幕显示( y2 B/ Q; m; R- U. c: a5 c
delay(10);) ?, {. ]) F0 R' ]+ T8 @5 A2 v4 b
write_com(0x10); //归位***************将游标归位 移到开始位置( s; m7 ?# m( C) Q' t
}
, }3 @/ `- q* z, q( Q6 z; M5 q/ z; g# `' L! E; q3 Q6 G3 i3 ~
/*LCD显示位置设置*/( a# \; E. x6 u3 L3 V" Y
void set_xy(uchar x,uchar y)
, P- [& N) `: B: u{}3 Y! p8 i, Z! H2 y5 `( ~4 J* f* r+ i8 a
- [% U8 I7 R- e: g- h8 @ \# L8 r' a
0 w% C2 U' |. G2 M
/*主函数*/
/ w8 |4 e& ^! J) P
* h. |% F8 _2 U3 f! i- S9 A8 Zvoid main()
( p% h ?% L8 }! Z8 U5 Z5 y {3 z. d7 \. `4 N
init(); //初始化
' v5 M# G1 n; N8 e' n. h
3 [, H3 T$ F) P& f9 Q6 w5 z5 ~( @) R' p9 M* n# Y/ z7 x e
# X) _, B4 ^ S: Z' _
/********第一行显示******************************************************/# |* i1 K0 H! G5 Z1 U6 e/ {! M R
write_com(0x80); //开始指定第一行第一个字符位置0x80
! x1 \9 D5 z2 X0 @ R1 J" g for(num=0;num<12;num++) //向1602写入第一行内容
2 M0 ~6 h+ @; p! n7 O { //4 ~. R. v% M2 d3 o
delay(500); //3 \/ v# `0 L( Q
write_data(table0[num]); //) Q9 l' }8 g' w6 Y1 w& r
//5 w% b" S/ _3 k. m- m9 u/ u
}
1 E) b* b# J1 r4 F9 D% S5 e8 R" h* {+ J: W4 b$ s; g7 N
* J7 w$ K% M- [/ H1 R3 H/*************888****第二行显示***********************/
/ _2 ?: f; r+ y3 O! V delay(10000);9 r) |) K6 a2 a% {8 M3 c8 s% F
write_com(0x80+0x40); //开始指定第二行第一个字符位置0x80+0x40(第一行+0x40)% ^9 \0 K& G0 g y0 ?) }% X) a
for(num=0;num<15 ;num++) //向1602写入第二行内容
. U! G0 Y/ U; h2 n E { //; |0 `1 b" w0 u( p* j
delay(500); //
8 |' U# N' p; Z8 x& j: V write_data(table1[num]); //# ^$ G) z+ P& I
//5 i# z3 R) X. C" @4 Z8 _
}! b, a1 s- D9 y5 z, Q4 ]/ W2 A( L
delay(50000);) `& b3 k( Z: O1 j2 i' J
delay(65535);. J" W# ?5 ~4 M( m7 U
delay(65535);' C3 z1 D' j( \8 ]
delay(65535);
" D# ~4 \0 t5 _2 P7 b- e
6 h9 s& p* u& s delay(65535);
& ?+ N; \" C/ n w J1 I3 o$ R delay(65535);
! K9 Q+ K# E. Q1 |# u Q delay(65535);
5 n: |. _! e( ^2 p" | delay(50000);) S, M, l9 P8 ~/ Z: n
delay(65535);
# U( G- {8 H. G( u# c delay(65535);' ?' B2 V# j6 ?1 M1 d% j( \
0 o; I& M' J) V! S, u } ' v- c" }' G+ T$ n, J+ i9 `" y
: X. L2 B- g# r下载:
1 o* W; e9 a, F. \9 H: s
+ Y6 b1 C9 @8 Y! P& o& t. ^9 z+ c: p1 w- v2 B' T8 |
|
|