|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
5 {4 J9 A1 [& o7 @ x2 D我们将使用LCD1602模块让单片机用图形和文字来展现信息,因为LCD1602的操作相对比较简单。6 M& T+ [ X0 z/ M6 _2 Q5 p% |
! p* Q4 n- d8 @6 b& Z' }/ C9 V
一、LCD1602模块介绍3 {: d" Q4 j2 O6 x5 V# M
LCD1602是十分基础常见的显示模块,它有三位控制引脚与8位数据引脚,其中E为使能端口,RS代表接下来传输的是命令或是要显示的数据,RW则是代表下一步是要读出数据还是向模块中写入。
: c+ G. c1 k5 Z9 p, D! w: |$ W同时,LCD1602在CGROM(字符发生存储器)中集成了ASCII码表,每一个字符都有一个固定的地址,这让它可以轻松的展现英文单词以及一些常用字符。
4 @1 X8 F5 D. `) t9 x5 a* G! X比如'A'的存放地址为41H,显示A时就是将地址为41H的点阵字符图形取出,并显示在屏幕上。
& r6 x; e# G; D: ~如果你对LCD1602模块足够熟悉,你甚至可以将它用于数据存储(虽然并不好用也不能断电保存),还能够利用让它显示自定义的字符图案,但这属于LCD1602的拓展功能,本文中只是简单一提,请大家下课自己通过查看LCD1602中文手册掌握。
( N# n& ]% j8 P4 B2 Y" B1 ?% w1、LCD1602引脚接口功能8 Z( l& c+ b/ e7 Q* {5 |
VSS:接地2 ~" Q% ]# A9 J. \7 |- y
VDD:接5V电源
5 h# N# M9 k& M; ]/ fVE:为对比电压,用于调整液晶屏显示对比度,
1 {( |" ]& F6 c' M% A- q- g* rRS:数据/命令选择端口,高电平代表数据位传输的是数据,低电平相反
5 W+ K1 B3 v- \9 W, u! b" S1 r4 DRW:读/写选择端口,高电平代表数据位用于外部读取RAM数据,低电平则相反8 |% D8 N; K7 @. n4 x5 R6 C
E:使能端口,低电平有效
. x6 |8 h% [( s$ T* @% A* R( a8 ID0~D7: 数据位$ }/ J# e; m( J" F% L1 x
A:背光板正极! L2 {& s- ^9 h* I
K:背光板负极
8 |9 h; o3 c# R/ {7 O& Z+ M6 k可以看到,在使能端口可用时,主要是靠RS、RW两个端口相互配合,以完成模块的初始化配置(命令/写入)以及字符显示(数据/写入)。 B& j# M: N1 z6 u" a2 L
首先,我们会向LCD1602中依次写入如下命令来进行配置(RS、RW都为低电平)。1 v9 m; D C; s. O K
9 D2 K5 e2 {7 b2、LCD1602常用控制命令, L4 a @- R+ B% ]# \
设置模式 : 0x38
9 Y- }% X! v" S$ D6 C开显示,不显示光标,光标不闪烁 :0x0C+ q1 b/ E3 O1 N7 |; {
读写字符后地址加一,屏显不移动 :0x06
: \; \3 p: e+ H6 a2 I7 S4 Y6 \清屏,数据指针清零: 0x01) \" N- r& i/ t+ A7 p1 c4 L& w
设置数据地址指针初始值:0x80" e) L& t: e0 W2 Z& m- L
配置完成后,就可以将RS转换为数据模式,向8位数据端口输入ASCII码值,在屏幕上逐个逐行显示不同字符。 }. x9 l9 D5 p' z; H* N
接下来,我们将会从项目创建开始,教给大家如何将项目构建的清晰明了。
) E! ^! \ m1 F1 Q( d- e ?) [
6 M3 J6 e4 h0 O# J$ d二、一种规整的项目排布方式+项目代码
. `5 [; u' W$ N( H首先,我们新建一个文件夹用于存放项目文件,并在其中新建Doc、User与Project文件夹,分别存放项目说明文件、代码文件以及KEIL项目文件。
* h0 t7 v) d4 V0 X# p# q) g( l" M打开User文件夹,创建main.c、LCD1062.c与LCD1602.h文件。. t% V6 `1 `1 r; }* i
main.c文件内存放的自然是主函数;
+ X1 X* Q- n; ^LCD1602.c放的是定义好的LCD命令、数据读写函数,读者也可以自行将字符重定义函数放在里面;
% O" \( J7 G9 q8 }" rLCD1602.h则是函数声明以及#define。/ o1 r) ~7 g" _/ g
项目构建完成后,Keil中排布如图所示: P0 g) n9 J6 ?# D- y3 M0 c
% i5 i1 d* U% I/ j0 ^' }- B4 }
1、LCD1602.h文件代码
! [. K1 R8 p; d$ A, ]#ifndef __LCD1602_H% w6 E8 p+ R+ r: N& C0 b6 P8 W
#define __LCD1602_H
' Q: p: ]% F' h! [, |1 T ]. L; X2 z. U2 D* Y& s
#define LCDData P0
0 t. s$ n: m7 I' w4 ^/ Q#define uchar unsigned char. L! I' V) A9 e4 c* c
#define uint unsigned int
9 m9 O. J8 _, E; |- M7 x#define register_addr 0x00
& p0 ^: U4 w4 d#define device_addr 0x80
/ p2 o' P+ V8 E. k
5 u& f R. E- o# @4 dvoid delay(uchar c);
) t- Y& a; s+ [void LCDWriteCom(uchar i);
9 }! k, D! R7 ^* }# r [void LCDWritEDAta(uchar i);
# e" B" j/ f9 I. N: @void LCDClean();
# { _9 j* X' u! a9 avoid LCDInit();
) @' _. [6 O! V#endif /*__LCD1602_H*/) m2 g- o0 p8 Q
......
1 M/ K4 r7 {' d" @; M+ `) e+ h+ }' J0 A* R& m. [) d* y9 J
|
|