|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机学习,操作1602液晶, U( f# I# \$ ]8 x
TX-1C板+ _5 t2 E* C# P6 U% B T
: I" k, M% ]0 H9 f操作并行模式的1602液晶
/ }* \ w, S% {4 i& `* o8 D) b液晶第1,2脚是gnd和vcc
$ B6 ~' K7 [: G+ w第3脚是对比度调节
" P# ~" S- X& g) e; g第4脚是数据/指令选择端RS+ m. C0 Q8 \. v
第5脚是读写选择端R/W,我们这次只写不读,故直接接地
9 ?1 O" M0 G0 `8 ^4 g& O第6脚是读写使能EN
+ b! @2 D2 P2 q! e5 s第7到14脚是数据口,我们接STC89C52RC的P0口5 g4 O: z/ E7 Z" t% q- e' l
第15,16脚是背光源
. I) s: P4 E4 r* B9 J D5 l" O6 `* G; H/ Y0 o
最终液晶显示
8 T. J. k1 E, I& yTom is playing the TNT game!+ o/ f0 m3 T& p2 _# W
4 K! W* r5 y& F9 m4 L$ m) c6 a$ W* |0 H, j( z
#include <reg52.h>
" ?6 H% B$ i3 M #include "MY51.H" - B I' Y$ I8 @- ? ?; R: ~
$ }# M, H9 w0 M* ?' |* y4 W! y
void write_data(uchar dataValue); //写数据
) c$ Z* B- x4 k6 c( d/ l void write_cmd(uchar cmdValue); //写指令 , u2 @, S% |* x3 o; j
- o- V0 E# M) ^. H4 i
uchar code tableLCD1[] ={"Tom is playing"};
& j0 E/ G. Z+ P6 L2 S3 q uchar code tableLCD2[] ={" the TNT game!"};
' k$ `; @( |1 c: a. M4 F. I1 l' \& E* V6 n) e X
void lcdInit() //初始化函数 0 s" d0 l: P& f7 P# R1 G0 z0 b7 x
{ $ m! M3 \* t: O! V7 t
dula=0; // ! }: `2 \9 m" b+ s! m; a: n. d: X
wela=0; //防止数码管误显,浪费电流 3 D, |" Z8 U: D5 M! P4 y) x5 F( L
lcdEN=low; //给高脉冲之前的状态
2 ?% D, @1 c F6 m lcdRS=high; //初始给高电平,其实上电默认也是高电平 % z, V" w4 y2 I7 ?. g
write_cmd(0x38); //液晶显示模式初始化 2 Z L. L+ Z6 u
write_cmd(0x0c); //打开液晶,不显示光标,光标不闪烁 " A Q7 g- s! l& |" P# |& |
write_cmd(0x06); //地址指针加加,且光标加加 7 r7 a) E$ u5 \: X9 J6 C; N
write_cmd(0x01); //液晶数据指针和显示清零
" m0 O/ U7 S: _: G# x" T } ]/ r8 B7 g# u7 D! S
8 |3 `0 T/ @5 t& S void write_cmd(uchar cmdValue) //写入指令
! Z& H! E0 }# s" t$ R3 S { 4 i, [+ `6 R" {* Y2 a* @+ e
lcdRS=low; //刚上电时是高电平,低电平时是指令模式
o9 e X3 }2 O1 c3 n/ Q- S- ? P0=cmdValue; . E0 X+ o5 t+ O6 ^% X
delayms(1); 0 G/ V# N+ A' w! s: r
lcdEN=high; //一个高脉冲把数据读走 1 K# j/ U) n$ {1 b* {& V
delayms(1);
r4 f7 Q9 y1 k# a' N lcdEN=low; 5 [8 l1 Y' V% l4 z( C; c; h7 e7 d
} 7 _3 g+ G8 B. ?3 q
$ z5 M1 A r& m& B. o8 Q0 Z5 J$ ? void write_data(uchar dataValue) //写入数据 3 s, T0 ?2 w5 o
{ 5 h+ d- y# O# u& X+ H/ N7 z
lcdRS=high; //高电平是数据模式
1 p6 y* {2 z O. D' q P0=dataValue;
, ~+ V2 c/ l- z delayms(1);
' [9 }0 y( B+ ]. Q3 H+ p" a( t lcdEN=high; //给一个高脉冲 8 g a1 ]- V9 K4 P4 N
delayms(1);
- j4 A: }: w+ U. L lcdEN=low;
, z* m, Z& Q, ]# { }
. }. p0 f" G1 D _/ W1 b/ n, o9 }+ L2 O& O
void lcdShow(uchar* pValue) //液晶显示函数 + i- V, v$ r9 \6 W% J
{ ; W; @! `7 _" d7 _; r
while(*pValue!='\0')
- M' N$ b1 k8 ^* T5 B0 n { ) {# |$ Z: z; h
write_data(*pValue);
4 L/ I' \; p$ ^) h pValue++; g0 G8 @( M1 N9 M9 n$ R
}
0 k$ X# B( g! i* W2 K } * H* I$ v6 i X% S) F; ~
1 V, l3 x; l5 P4 W- @# j9 r6 O
void main() 4 K6 {8 ]; f `2 J: P) S
{ : Q: q# k6 }8 E F) v+ e
lcdInit(); //初始化 ( r# V* A% G4 P
lcdShow(tableLCD1); //显示第一行
: v u: V" A( n" Y write_cmd(0x80+0x40); //重新设置数据显示指针
) i2 T) x8 W6 \. w: k' P lcdShow(tableLCD2); //显示第二行
0 R) D* C' }8 A5 { while(1);
0 ~1 u; H. Z/ q% H } ! r, Q; Y) f# ^$ _2 b6 }
7 _0 y0 _# Y e6 Q& g) r- p
/ v4 x( i9 N7 M1 Y
3 S! E* B4 b& \% m5 F2 p6 I: _& J3 T7 n% d2 \5 R2 n# w0 }
, R, e1 y) l; h/ H' h5 E3 S
8 y* k( [5 L. q! v, F. j/ h2 U( _1 u1 h" T2 z) o* e/ H& Y& V
% z ~# P# K( C5 j+ q8 }* x( x' r+ V) Z7 }
% Q; i. y# k3 J
1 n) l; T8 f& V# B+ e+ j8 J( ?1 d4 D4 b8 }" A
+ _3 \& g, ^" R0 {1 C7 ?+ a |
|