|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机学习,操作1602液晶- A- _" W& x |1 z1 j
TX-1C板
+ q$ c& `& e2 O6 g/ a5 B0 ]
+ ]: j& k+ _. a+ y操作并行模式的1602液晶
8 _0 k( `* V' V8 s- d4 Z6 u8 l m液晶第1,2脚是gnd和vcc* L9 A& n( P6 Q" ]1 n
第3脚是对比度调节
4 U. X/ _; l3 V. x8 T第4脚是数据/指令选择端RS7 E7 L6 l! [( X7 T% S. I
第5脚是读写选择端R/W,我们这次只写不读,故直接接地
& x' l/ Z# J& Q% T第6脚是读写使能EN/ O! }/ p& S. M
第7到14脚是数据口,我们接STC89C52RC的P0口
/ b/ t; D& K; n! S `第15,16脚是背光源
f6 K6 V; J" J/ N: T9 ^% V8 C+ z1 l0 J( _1 Q! g( F- B
最终液晶显示; Y5 i* a6 w3 x- U5 C/ K
Tom is playing the TNT game!
- |3 d4 r/ g; l3 Y' V5 U6 X% y; m' r" ^4 r$ }8 {; Y5 G
( H" m( ~+ }2 g" b% a
#include <reg52.h>
& Q6 }7 W) d) {$ {8 I5 A #include "MY51.H"
! o4 {7 J+ h. j/ D4 ^# @% w7 ~% K& W* _
void write_data(uchar dataValue); //写数据
) }5 U! \1 T8 ~1 j void write_cmd(uchar cmdValue); //写指令
, |7 h) Q y; X7 u2 w+ ]$ A& z' ~) d& b V4 S5 Y4 f1 h: ^
uchar code tableLCD1[] ={"Tom is playing"}; : {: c) A& G4 U! i! b7 {) R
uchar code tableLCD2[] ={" the TNT game!"};
8 ~6 s* y5 `& `# i& C7 c& J u5 s% d' J& r; h- W. t. K' c+ _
void lcdInit() //初始化函数 & f! Y- q* E- z$ j E
{
3 j6 M' o, B( R/ U5 b dula=0; //
1 l/ I w6 t& Z3 n wela=0; //防止数码管误显,浪费电流 $ N+ L& I7 q/ I0 j7 q) ]& d
lcdEN=low; //给高脉冲之前的状态 / ~6 ?1 n3 m% U+ e( b
lcdRS=high; //初始给高电平,其实上电默认也是高电平
- \4 N! Y2 S1 A7 X7 i write_cmd(0x38); //液晶显示模式初始化
/ Z: [& k! D( e6 V, \6 D+ U write_cmd(0x0c); //打开液晶,不显示光标,光标不闪烁
5 N8 U& }: z- i- }4 a, K, V2 X write_cmd(0x06); //地址指针加加,且光标加加 ' \% F: V: W. k- u9 R
write_cmd(0x01); //液晶数据指针和显示清零
" i B5 M8 E3 S9 P3 y' r! Y } $ C8 q2 N2 j) H3 l! d& z7 y4 D
7 N: V5 V9 j1 |" `3 ] void write_cmd(uchar cmdValue) //写入指令 3 | c- E7 E2 |% e
{
9 s3 S- o' p/ r2 w lcdRS=low; //刚上电时是高电平,低电平时是指令模式 ! C8 D2 f) X* I7 \
P0=cmdValue; $ L+ y6 O& Y [( P- Y) t6 q3 a
delayms(1);
' C' ?/ L" y: W; G% A lcdEN=high; //一个高脉冲把数据读走
* L/ ^& R4 E3 V/ Q5 Z, t4 O: \2 u9 k3 Y delayms(1); % I( {6 c& o5 P' b1 C7 d1 {( u
lcdEN=low;
+ X+ Y2 \. L3 l( |( y' K& S } ) n& G; g& N, r
) q2 {+ w+ A1 X* h @/ n8 y' f+ Q& i
void write_data(uchar dataValue) //写入数据
. \. R" @: k( g { . x @6 \( O5 U6 S+ [' m
lcdRS=high; //高电平是数据模式
2 h! b: C- E: p+ x% f P0=dataValue; 6 N; E" x: K+ q2 U' i1 d: m
delayms(1); 0 K, K' x1 ?* u& j
lcdEN=high; //给一个高脉冲 ! A* M) {1 A l" a4 v. e" ^; w! q
delayms(1); & j* E0 ~; X/ P. @: a3 `5 ]" P
lcdEN=low; + K8 E# t) ?" r5 j3 G
}
5 l9 N& q4 R" j2 [9 F: d/ U- s" m( X; G
void lcdShow(uchar* pValue) //液晶显示函数
, L- ?& X" j C) Y% t { " K; t" r3 L/ j& k+ Y4 ^0 a
while(*pValue!='\0')
' x' ?6 h' z( C2 }9 ~) E+ _% p {
7 d1 g# [$ V7 l7 U! u write_data(*pValue); ; _! Z* W0 k7 z' n) a2 N$ @
pValue++;
( q) _9 U- m/ R) g5 }- k; C } 1 m, q, e& F& O/ C9 _
} + f6 z% l, `3 ^
# X: \8 h! w" s
void main() 5 ^" A9 O) K8 p+ `# R. ]9 _
{
5 ~" l# }% @& U5 j lcdInit(); //初始化
/ a5 o/ g% w, |; |1 B lcdShow(tableLCD1); //显示第一行
8 H, V. o! Y8 ?& |1 e! K/ A. r5 _ write_cmd(0x80+0x40); //重新设置数据显示指针
& D3 c; L* i; d' @% T lcdShow(tableLCD2); //显示第二行 |: v7 ^& F) E) G
while(1); ) f: e4 a9 E8 B! A# H9 }
}
7 n {. a# M/ x' O
) H! ~9 _* K* l( }2 {9 ?2 }% x1 P% |2 i8 o7 M& F
9 r( _7 t$ M7 E P# t8 S8 [
. \& Y5 A# \- l. p! W4 y. p
1 G" h t2 _* _
( p `: ]' M9 Y3 e6 E8 ^
# d) ?4 Y& T! _
* c f. u7 [- w$ _* m: \% l7 M
- N! O. y ^) Q) h$ ]7 Z) t+ s, g! S6 y! y( h
% [ _2 m- M5 O
- }0 q9 y* r2 [( a; V
& T Q9 j* I! y* U9 ]! F% | |
|