|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
5 o6 x4 ~6 b4 [1 H u& b我们将使用LCD1602模块让单片机用图形和文字来展现信息,因为LCD1602的操作相对比较简单。
7 j0 r2 Y1 \9 Z* N3 r& N8 L9 N! d. I: ~! r, c
一、LCD1602模块介绍5 q" {" T; p5 S% H+ f/ A4 P
LCD1602是十分基础常见的显示模块,它有三位控制引脚与8位数据引脚,其中E为使能端口,RS代表接下来传输的是命令或是要显示的数据,RW则是代表下一步是要读出数据还是向模块中写入。
$ _1 Q8 s0 B) s1 d& e! m) B1 _3 N同时,LCD1602在CGROM(字符发生存储器)中集成了ASCII码表,每一个字符都有一个固定的地址,这让它可以轻松的展现英文单词以及一些常用字符。4 ~7 l7 N$ C# c$ j4 K$ h, g
比如'A'的存放地址为41H,显示A时就是将地址为41H的点阵字符图形取出,并显示在屏幕上。4 ^/ _' X: _' A& n
如果你对LCD1602模块足够熟悉,你甚至可以将它用于数据存储(虽然并不好用也不能断电保存),还能够利用让它显示自定义的字符图案,但这属于LCD1602的拓展功能,本文中只是简单一提,请大家下课自己通过查看LCD1602中文手册掌握。
! g/ T% o3 N H% t1、LCD1602引脚接口功能7 }0 R3 F) d- m+ h0 F
VSS:接地
) T" @& b6 w( N7 rVDD:接5V电源
2 a* ?6 x8 a" Q6 y% |VE:为对比电压,用于调整液晶屏显示对比度,3 o' m$ t# u/ ^
RS:数据/命令选择端口,高电平代表数据位传输的是数据,低电平相反
8 d% C6 W, `* ~# qRW:读/写选择端口,高电平代表数据位用于外部读取RAM数据,低电平则相反
' _4 z R; M2 J q: H$ _6 YE:使能端口,低电平有效! W$ e' E+ v) l6 ~/ f; [! N
D0~D7: 数据位* X: k5 v7 o, M% R- |
A:背光板正极* q7 {' K: l3 {0 ]5 O d( Y
K:背光板负极3 m3 H1 S6 d& S! N
可以看到,在使能端口可用时,主要是靠RS、RW两个端口相互配合,以完成模块的初始化配置(命令/写入)以及字符显示(数据/写入)。
" u4 T% V2 u; N" d首先,我们会向LCD1602中依次写入如下命令来进行配置(RS、RW都为低电平)。6 F/ F. l: S" _ `! |
. J4 G5 X4 D; [6 V! a2、LCD1602常用控制命令" ?9 l/ o$ f5 x' Y% L
设置模式 : 0x38* ~5 G5 E8 W+ B+ Z3 r: v5 \% p
开显示,不显示光标,光标不闪烁 :0x0C
4 H! [% B) W5 z" F. s2 [0 e9 d读写字符后地址加一,屏显不移动 :0x06- k5 i& w7 Q5 B( A3 j- S8 I+ v
清屏,数据指针清零: 0x01
0 W4 b( Y$ [% V9 z设置数据地址指针初始值:0x80
6 D6 `# L& U" B) r- z4 |+ L g配置完成后,就可以将RS转换为数据模式,向8位数据端口输入ASCII码值,在屏幕上逐个逐行显示不同字符。
8 O: Y$ l! p, h! r* \2 `接下来,我们将会从项目创建开始,教给大家如何将项目构建的清晰明了。
* c# [2 }# F1 I6 M6 ~' ?+ L9 ]) J& P0 a8 A& x! W' A
二、一种规整的项目排布方式+项目代码, p( d8 c3 J) [% K
首先,我们新建一个文件夹用于存放项目文件,并在其中新建Doc、User与Project文件夹,分别存放项目说明文件、代码文件以及KEIL项目文件。! `+ Q0 W* }' L) F; O
打开User文件夹,创建main.c、LCD1062.c与LCD1602.h文件。
) ?; \; [! T8 a i8 c# `; x: N- B8 Omain.c文件内存放的自然是主函数;
2 Y# A1 G+ t/ U. f( p( ILCD1602.c放的是定义好的LCD命令、数据读写函数,读者也可以自行将字符重定义函数放在里面;' ^& J9 c7 @. D u# C$ I
LCD1602.h则是函数声明以及#define。
" m0 ], c. f A- k) U项目构建完成后,Keil中排布如图所示% _% _) _) J5 V/ U' N
4 K/ h! d9 y$ \5 H5 \3 z- T* P, G
1、LCD1602.h文件代码: b8 g; E0 k/ y; T! v7 e. _, R; F
#ifndef __LCD1602_H
' h) G! V$ N3 W2 a#define __LCD1602_H
, S: c2 \- q; ~0 f7 q0 h% @; d4 k% u# a& r3 v. x9 D& W
#define LCDData P0
. z# g8 j4 \6 t1 e/ e- ^8 u W#define uchar unsigned char
" D: D+ {/ I9 R#define uint unsigned int, d5 T6 y+ B$ ]+ M$ K% [
#define register_addr 0x00" W3 N' c+ f* T+ \5 A# B4 [
#define device_addr 0x80
, W/ W5 q9 Y/ W! F
7 l: I1 {7 x0 @" u% ^2 uvoid delay(uchar c);+ q% x, ^1 I5 R5 i9 H' C: R
void LCDWriteCom(uchar i);3 s8 T. ]$ S# Q1 K, ?$ b0 g) J
void LCDWritEDAta(uchar i);, t) s8 K _1 H& F* I6 y A" [
void LCDClean();' H5 [! H* B" h5 C7 V8 k
void LCDInit();0 l9 P2 J! ?, Y4 B( Q! i# }
#endif /*__LCD1602_H*/
/ L7 u5 h( I* G- }+ R......
* T9 s6 ]/ X; n& t# q0 a4 Z) D4 [6 f
|
|