|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机学习,操作1602液晶
; D8 n) I `0 F# u+ gTX-1C板
/ |! E# |! b& A* l! u F: W3 E& R1 o# e/ a6 O* T
操作并行模式的1602液晶4 A2 t4 @- f: D: `0 u" p
液晶第1,2脚是gnd和vcc5 `: o$ t1 g* E$ D5 Y
第3脚是对比度调节
5 u* r/ ]' s# W% p第4脚是数据/指令选择端RS
# M1 T' a" c D* C$ l; A第5脚是读写选择端R/W,我们这次只写不读,故直接接地
, ~! Z) \6 L0 q2 a: t5 e+ {第6脚是读写使能EN
7 C* T; e7 a# O% X5 R% q) x第7到14脚是数据口,我们接STC89C52RC的P0口
6 h8 X: |2 L( e* Y$ G第15,16脚是背光源
. H$ [0 O, d6 k! a( Z4 H1 A# H1 S: [; u& z+ w5 v
最终液晶显示
! V2 B$ ~6 ?# d z: \; v) [ WTom is playing the TNT game!
9 `) l& z# m6 Z
; P4 g+ B1 U+ p/ }* t
* m2 d6 F' h$ U3 y5 k% q9 n #include <reg52.h> 1 n( g# x" [1 ]9 g
#include "MY51.H"
[$ o8 R* V# J. ^2 e' f+ p; I9 \- l" U5 J# `9 E6 A% B; ?
void write_data(uchar dataValue); //写数据 ) ?# H8 m) y" y% Y7 D" L, t
void write_cmd(uchar cmdValue); //写指令 " I! O9 S! O' i
3 F8 m( g3 h% X
uchar code tableLCD1[] ={"Tom is playing"}; 5 A' ~3 h4 X% H# r) s
uchar code tableLCD2[] ={" the TNT game!"};
# p5 D) ~# j9 ]9 R' v$ A- s& U& H. J* s' g9 I( q7 o. p
void lcdInit() //初始化函数 3 X, R- O. R; s( Y
{ / w# Y. D6 m! F
dula=0; // * C0 W* U7 L3 x3 _3 b% A& M) G1 v
wela=0; //防止数码管误显,浪费电流 % H4 N, {" B! V" x4 r1 a
lcdEN=low; //给高脉冲之前的状态 ) |! m7 e0 {: J' ^2 _) U+ C
lcdRS=high; //初始给高电平,其实上电默认也是高电平
4 C0 y/ D! h% F write_cmd(0x38); //液晶显示模式初始化
5 H5 q0 `3 P+ F# U% i; u& o8 M write_cmd(0x0c); //打开液晶,不显示光标,光标不闪烁
& U/ b9 F2 a3 E, ?' H" l0 Q write_cmd(0x06); //地址指针加加,且光标加加 2 e( c) K7 |% l" b! \( ]; u$ c8 l
write_cmd(0x01); //液晶数据指针和显示清零 $ U0 P% L6 O- F
} 3 W; Q' \* Y) d% C5 _5 B" t& @
9 z/ |" K) f9 t, p6 z
void write_cmd(uchar cmdValue) //写入指令
& S- V ? G. }' g* s: |; G { * e; m. N- p% o
lcdRS=low; //刚上电时是高电平,低电平时是指令模式 0 l1 z3 Q- @6 T% D6 O! ~
P0=cmdValue;
^3 M0 D& {/ K2 E+ C% v1 I. N3 o! V delayms(1);
- m9 t+ w5 N, X- E) a6 l, g( Q, f lcdEN=high; //一个高脉冲把数据读走 : W. \1 ]( _" f% X6 m$ B) n5 E: G( \
delayms(1);
% M' Y- \6 n+ Q: e1 T lcdEN=low;
u3 `; U: X: \' _, N }
5 F% x# f8 Z9 `& d$ {2 T3 W" l% W! e
9 D, v' y3 L' b( X) b I$ V+ S void write_data(uchar dataValue) //写入数据 ) b7 p; z1 d2 h& J5 r `3 n
{
2 S/ p+ q3 e& K6 R/ n0 }! [; k# ^* ? lcdRS=high; //高电平是数据模式
l6 x. f5 I) p P0=dataValue;
I; g: @7 J& A- H& u delayms(1); 6 E. r$ _4 k( Y
lcdEN=high; //给一个高脉冲
( I8 M( B% j3 W' ~2 A. L delayms(1); 3 l1 c3 P }. W! S* S3 W4 f. K
lcdEN=low; - |6 a. R0 u/ s. @" |$ O. y- T
} 9 B$ H/ {1 w1 v& H S
7 [+ a( J4 j6 Z! U( P
void lcdShow(uchar* pValue) //液晶显示函数 ) g$ T4 s5 z* @) f. B, h8 o
{ 3 e' ]" F6 ^8 r- D4 L
while(*pValue!='\0')
5 h+ K( ?& w4 U1 Q/ c3 }5 Z { 8 P( r& h: h1 H4 O, p8 k5 P
write_data(*pValue);
1 v X+ [& [3 E+ H pValue++;
2 r& m. M& l6 r5 t5 J* y d- E }
0 E8 B( N" ] D }
; y* R' m" z8 c3 J3 ?
) H6 o2 ~( M& o void main() 3 Y3 Q# q/ o3 n) S
{
, O" b" [1 S3 ~- z" I lcdInit(); //初始化
8 ?7 H+ h6 d5 k p0 s9 N lcdShow(tableLCD1); //显示第一行 4 e3 y' g* W7 P0 d3 Z9 j$ d7 C
write_cmd(0x80+0x40); //重新设置数据显示指针 ) h5 w% N2 Q) i/ ^" w6 A' [; `9 E
lcdShow(tableLCD2); //显示第二行 3 G, v$ @: E' U0 O6 T9 x, c* h! S
while(1);
0 ~* {1 X8 f9 S4 [" P/ G } 6 z% z! `+ u# G- b9 @; |
5 @. D9 x( l$ F% P; F
" w" |3 D; k& k) I; u+ s
& o5 ^& B0 j) u& @4 y
) \5 q- j$ I4 ]" _9 R$ \2 T5 B' ~ U- [( r5 U8 L& ^, [' ?
- Y. ?; ]! F% N) @( ]; U' i" G* A
5 W. L: ]" m# I$ z4 g7 t I0 A( I' j) q2 B
" o0 w# u$ t q
7 w: b7 @! N/ v& {$ n& y* m. ^0 Z& j$ i5 t0 I' u" t
0 C" r" T2 r/ p/ v* j$ T
* z9 g. [9 \4 U4 f |
|