|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机学习,操作1602液晶2 n2 B( d& E1 h
TX-1C板8 Q) t' L9 K+ i( a W( R% p. N
1 ~" j% V& n' C" n1 L; b" A: b
操作并行模式的1602液晶
6 O# Y$ ]7 T+ Q2 i# ]液晶第1,2脚是gnd和vcc; O% ~% v4 Y& r& p; x2 d
第3脚是对比度调节
) D S, b) ~' w7 ?0 P第4脚是数据/指令选择端RS
+ o: ~0 s8 N. J0 x第5脚是读写选择端R/W,我们这次只写不读,故直接接地' z& W$ I; Z+ j- u8 @8 f* I
第6脚是读写使能EN, e6 ]0 F" D7 E4 ?7 G
第7到14脚是数据口,我们接STC89C52RC的P0口$ T* a0 x; b0 C
第15,16脚是背光源8 t- Z! V7 t$ f- X; \1 u; N" t
* G, ~6 F5 x( t( y
最终液晶显示5 C) u6 ~' p6 o6 @2 R- ]4 m
Tom is playing the TNT game!
9 C# Z- p6 B1 M; z. r5 U4 Q6 T
# ?& U) [! f/ [1 d7 V! I+ c6 H5 l! u3 l. ?! v; X
#include <reg52.h>
- _+ h4 O. I+ h. e3 _9 C5 H; E2 T #include "MY51.H"
1 n+ k! v5 J) t* L5 Y$ d& {- `" h, F6 e
void write_data(uchar dataValue); //写数据
6 B" d" }" s/ j1 @/ K3 o: T5 w void write_cmd(uchar cmdValue); //写指令
. R1 m" G3 r0 b1 I$ b! R t n9 R t) ^% h5 f
uchar code tableLCD1[] ={"Tom is playing"}; " j5 _ _* ]( \
uchar code tableLCD2[] ={" the TNT game!"};
, N9 L; ~- n! ~5 ^; d# k2 o5 o, r
. f% S4 r% y p+ x+ I; E+ L. x' K$ ^! U void lcdInit() //初始化函数
* G- ? J& A8 K3 ^7 l0 t& | { ; X+ m+ M. D0 \6 V5 X
dula=0; // ( p$ t, B# U, [ [2 ~4 F. o
wela=0; //防止数码管误显,浪费电流
, x' k o$ h% G9 C. T lcdEN=low; //给高脉冲之前的状态
; F- i3 n: S8 L lcdRS=high; //初始给高电平,其实上电默认也是高电平 7 G7 u5 K* a& F: [. [! { Q
write_cmd(0x38); //液晶显示模式初始化
" h; ?0 _. @8 w write_cmd(0x0c); //打开液晶,不显示光标,光标不闪烁 % h1 M3 d7 I! x' L$ z8 M t
write_cmd(0x06); //地址指针加加,且光标加加 1 d3 Z z. G7 z( W4 W4 s, ?3 Z2 B
write_cmd(0x01); //液晶数据指针和显示清零
1 x* W! |& t9 {4 E% w } ' O3 m% u' Z; k- ~# F
2 S( d0 A/ l+ i void write_cmd(uchar cmdValue) //写入指令 + C1 Z+ {; p# ^; n
{ # D( ^$ Q D; ^3 v8 G+ @: s9 R
lcdRS=low; //刚上电时是高电平,低电平时是指令模式 ' n2 h/ Z1 `. u3 c Y/ h
P0=cmdValue; - Z6 X( `' y6 m/ U
delayms(1);
! i* ~8 l; G# \1 m. c5 L, d# \ lcdEN=high; //一个高脉冲把数据读走 6 B$ y/ j! |* J- ?' V9 q0 R8 n* t
delayms(1); 7 d3 z2 \# P% l, [ g
lcdEN=low;
" T2 q- e C& u5 H3 n }
c& p6 i* s! f$ s. Q& a% X% F0 ?. F* w
void write_data(uchar dataValue) //写入数据
( ]( L: K/ B' ]6 v { ' ?! _: x7 r4 V+ K3 N0 G4 j/ y. H( w) H
lcdRS=high; //高电平是数据模式
$ w1 @4 \' [+ Z$ f0 o P0=dataValue;
: e( J- ?( S& a( S delayms(1); & ]+ I; ?. |1 V
lcdEN=high; //给一个高脉冲
- d" B4 W5 `3 k" ]5 y delayms(1);
: b* L2 ^' A1 d& G lcdEN=low; 7 d1 f4 E) |9 Y$ N& ^
} ) J. o, f6 P' Y
: s* x4 C. Y2 B. H3 T( z! x
void lcdShow(uchar* pValue) //液晶显示函数
2 b6 [( M/ a4 V8 ]* V/ |& O/ R { 1 o5 K' p! W3 n2 R
while(*pValue!='\0')
0 N* b6 H, x+ m/ n/ ^0 ^ {
+ K# H4 o- p6 o$ ]* o9 Y$ g$ \1 V write_data(*pValue); & w% F. J" K- C; q. C! Z9 b
pValue++; % e( K' Z- x' C: p [0 P
}
2 w$ }( ~4 U3 m' U }
8 W" |# N5 p$ s
. ~6 k* ?, V7 d9 `0 r5 h void main() $ U# E0 _6 v1 K: [- @9 l
{ / c Q9 o7 l8 O& z/ K" {
lcdInit(); //初始化
- l1 s) o- U$ L | lcdShow(tableLCD1); //显示第一行
8 @3 J7 k5 f, V2 ]) _ G+ U write_cmd(0x80+0x40); //重新设置数据显示指针 9 A9 |6 I, X& M% a+ V$ e
lcdShow(tableLCD2); //显示第二行
% K5 O( N. y7 R, X- E9 k while(1);
, p8 U3 j' j1 l/ r; @ } ; O- ^/ V) ~# m& A/ h0 B/ u
$ B% Y- A% Q' r0 s- [0 O* R* c+ u/ g
0 \5 F! F: }- S- j9 S, c
- M' ^3 r; B4 D& Q3 F; `! u8 K( H ?4 T/ L" w% A% M3 n! a- k
3 v) U& k$ K0 W" h) @# {4 b
* X& \7 k9 n! b# ~3 B) ?
! s6 t" }! R3 ^( k3 a
( k) `/ y: F2 V; M# D t, n
7 S" C/ i2 k0 S3 |% m5 t ]$ [( w& H( V3 _/ p$ e- A* F
4 h1 {2 Z# G3 [" O; h
& N+ Y+ H4 b$ y4 F v! t4 T/ L0 s
% b( J6 l+ s- l) d
|
|