|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
( k/ }9 \; y; p! ]1 ?1 s, z/ C
我们将使用LCD1602模块让单片机用图形和文字来展现信息,因为LCD1602的操作相对比较简单。8 C4 i: c8 ~7 F, H) V) ~2 O
/ k+ s! o3 \- s# }1 O: o; q一、LCD1602模块介绍
9 }; [4 O" m2 `1 X( P5 L) _LCD1602是十分基础常见的显示模块,它有三位控制引脚与8位数据引脚,其中E为使能端口,RS代表接下来传输的是命令或是要显示的数据,RW则是代表下一步是要读出数据还是向模块中写入。
1 T- t3 X! a7 d; z, ]同时,LCD1602在CGROM(字符发生存储器)中集成了ASCII码表,每一个字符都有一个固定的地址,这让它可以轻松的展现英文单词以及一些常用字符。* P( g) \2 U' y0 w( F
比如'A'的存放地址为41H,显示A时就是将地址为41H的点阵字符图形取出,并显示在屏幕上。 V6 z6 `: S" }& I% p$ r4 S
如果你对LCD1602模块足够熟悉,你甚至可以将它用于数据存储(虽然并不好用也不能断电保存),还能够利用让它显示自定义的字符图案,但这属于LCD1602的拓展功能,本文中只是简单一提,请大家下课自己通过查看LCD1602中文手册掌握。8 d9 {! b4 W% l+ [ b; c
1、LCD1602引脚接口功能4 m* b3 ?8 @: G8 h2 `
VSS:接地
% i* y6 |* q, S9 h! [; I& aVDD:接5V电源8 d( w, n. d* {4 r
VE:为对比电压,用于调整液晶屏显示对比度,
0 d9 p8 D/ S$ IRS:数据/命令选择端口,高电平代表数据位传输的是数据,低电平相反' S0 y! Z; M' W$ l0 ]
RW:读/写选择端口,高电平代表数据位用于外部读取RAM数据,低电平则相反
, m4 y+ G5 P! Z. @! h% c+ V- p3 X. lE:使能端口,低电平有效
) f* ~. m6 Q9 F# q/ W) ND0~D7: 数据位: V; W5 H' q+ ]9 I+ T
A:背光板正极
7 p# B0 j/ k4 }) a# wK:背光板负极
1 Q& j$ i2 f7 J* Z3 }可以看到,在使能端口可用时,主要是靠RS、RW两个端口相互配合,以完成模块的初始化配置(命令/写入)以及字符显示(数据/写入)。
6 G' X" {- F2 V) ~8 x首先,我们会向LCD1602中依次写入如下命令来进行配置(RS、RW都为低电平)。$ P/ Z* o7 D( }# L
" B D# K% z- m; Q$ q3 p1 P' B) V1 q
2、LCD1602常用控制命令
! A' K7 d) z8 ^设置模式 : 0x380 \0 p* G0 U1 R& l$ Y |
开显示,不显示光标,光标不闪烁 :0x0C
. Y9 p: A" m! [6 G; s; y3 U; R读写字符后地址加一,屏显不移动 :0x06
' H' ?! y3 [& J! I, Z清屏,数据指针清零: 0x01
7 j3 [6 @" m. r$ Q设置数据地址指针初始值:0x80
& V- O$ U- f! _3 G, p7 A配置完成后,就可以将RS转换为数据模式,向8位数据端口输入ASCII码值,在屏幕上逐个逐行显示不同字符。: W1 `; w6 G% j! n
接下来,我们将会从项目创建开始,教给大家如何将项目构建的清晰明了。
) {) j# B; c$ w' k% ~6 n3 F* \, |4 w e4 ^% H( a- n4 ~; D
二、一种规整的项目排布方式+项目代码
+ L: |+ v1 M, T" }0 |1 D首先,我们新建一个文件夹用于存放项目文件,并在其中新建Doc、User与Project文件夹,分别存放项目说明文件、代码文件以及KEIL项目文件。
+ Q7 O' s, P) U5 d6 e打开User文件夹,创建main.c、LCD1062.c与LCD1602.h文件。
! B: t* y- z! m9 s. m+ ^main.c文件内存放的自然是主函数;
( z- Q, T9 r/ {. lLCD1602.c放的是定义好的LCD命令、数据读写函数,读者也可以自行将字符重定义函数放在里面;6 j+ f3 [7 b) {2 L
LCD1602.h则是函数声明以及#define。
2 l* A* Y' K9 `- e4 j1 u( `项目构建完成后,Keil中排布如图所示
( H4 b+ J4 K; Q! q
* }( H" B4 y2 h% j. O* f8 I
1、LCD1602.h文件代码
- Q. x" J/ [# [- Z5 A" t- |' r; f# z#ifndef __LCD1602_H9 N, @! G' r4 P$ i$ j
#define __LCD1602_H4 j5 T0 h$ J- w5 [: f2 A
& _, ?9 H, F* M#define LCDData P02 r' a6 G, a# a5 z# l
#define uchar unsigned char
5 P8 w: G9 U' T! F% B#define uint unsigned int
# [1 C! z) O- q+ O' w#define register_addr 0x00
: _% [' m9 j. [/ a# w/ A3 K- T, n& h#define device_addr 0x80
9 j# H) c' U2 o) |$ K( \8 T3 u) ?/ e( R1 U6 F
void delay(uchar c);" p! k% W! ~" y: z) J* b
void LCDWriteCom(uchar i);
o( z4 Y" {' E0 O R) h9 k7 q- kvoid LCDWritEDAta(uchar i);
8 k( P+ d, q9 [, dvoid LCDClean();- h) b( i `) _ N, w
void LCDInit(); f- Z& d" Z5 w" D7 h
#endif /*__LCD1602_H*/
1 K! j2 g6 u9 h8 Z......
$ F( W/ E5 ]# F0 K: {1 v4 U
6 M% b" E, G" ?# ]' g+ X |
|