|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
: U9 {1 D/ @$ I/ X( ]6 u7 l* I8 r我们将使用LCD1602模块让单片机用图形和文字来展现信息,因为LCD1602的操作相对比较简单。
$ H, j+ G% ]* [( t; i: W. W1 m' `- E/ l; \- @+ Q( e3 L
一、LCD1602模块介绍( U+ e% q$ \6 O
LCD1602是十分基础常见的显示模块,它有三位控制引脚与8位数据引脚,其中E为使能端口,RS代表接下来传输的是命令或是要显示的数据,RW则是代表下一步是要读出数据还是向模块中写入。8 c& | u! \/ I2 k7 a6 O* E# s4 z3 @
同时,LCD1602在CGROM(字符发生存储器)中集成了ASCII码表,每一个字符都有一个固定的地址,这让它可以轻松的展现英文单词以及一些常用字符。
; x: P2 p8 A8 y, V: Y3 @0 U比如'A'的存放地址为41H,显示A时就是将地址为41H的点阵字符图形取出,并显示在屏幕上。
1 X8 g* ^3 N1 p6 f$ l4 H+ w: c* I3 r如果你对LCD1602模块足够熟悉,你甚至可以将它用于数据存储(虽然并不好用也不能断电保存),还能够利用让它显示自定义的字符图案,但这属于LCD1602的拓展功能,本文中只是简单一提,请大家下课自己通过查看LCD1602中文手册掌握。) r3 L/ W, q4 p) z% y1 S
1、LCD1602引脚接口功能
% y N, A& r. B7 G' V. SVSS:接地0 X0 V2 u" ?0 R4 c6 d; o
VDD:接5V电源
* {8 v- W* W0 S* S6 O0 Q7 jVE:为对比电压,用于调整液晶屏显示对比度,
/ Z* X$ L) z' X# q% iRS:数据/命令选择端口,高电平代表数据位传输的是数据,低电平相反
, M" J9 ?' h+ R) w- }RW:读/写选择端口,高电平代表数据位用于外部读取RAM数据,低电平则相反
3 u1 ?* O$ @) K/ `E:使能端口,低电平有效4 \4 x4 }* }/ J
D0~D7: 数据位
- T" C) Q H9 V/ e! H1 {. J e/ `: @A:背光板正极
0 a* u: C# D) L" G1 P: e* uK:背光板负极
& o. Y! I3 u/ i1 L. W. S8 L% C u可以看到,在使能端口可用时,主要是靠RS、RW两个端口相互配合,以完成模块的初始化配置(命令/写入)以及字符显示(数据/写入)。' E- |$ w8 t# \0 i m8 f& u
首先,我们会向LCD1602中依次写入如下命令来进行配置(RS、RW都为低电平)。. ?. [1 c* b6 A ?3 `) i+ n, ]
- ]2 V$ _% l7 I# Z: a$ T2、LCD1602常用控制命令* H" o* H% R0 {: n; A; o5 E
设置模式 : 0x382 W& P. d1 f, t I% b
开显示,不显示光标,光标不闪烁 :0x0C
z) P+ B. O" e% l读写字符后地址加一,屏显不移动 :0x06) g* A6 b! j- E
清屏,数据指针清零: 0x01
9 s. _9 \( W! y! f& V8 S2 F* d% {$ I设置数据地址指针初始值:0x80$ @0 E, z2 p! f: f8 o! o% N- ^ o
配置完成后,就可以将RS转换为数据模式,向8位数据端口输入ASCII码值,在屏幕上逐个逐行显示不同字符。
4 y/ x2 }; S+ {- ^接下来,我们将会从项目创建开始,教给大家如何将项目构建的清晰明了。2 R* c# S3 v3 o
0 I4 C/ p/ _, ^- \% x( W9 |二、一种规整的项目排布方式+项目代码
# `1 G1 A* `9 Q5 u* e( u* o% v首先,我们新建一个文件夹用于存放项目文件,并在其中新建Doc、User与Project文件夹,分别存放项目说明文件、代码文件以及KEIL项目文件。
S# s( ^7 S# o0 D打开User文件夹,创建main.c、LCD1062.c与LCD1602.h文件。
% N% }" K" v7 c/ |2 ?main.c文件内存放的自然是主函数;
E( R! ]4 n/ a' `" P9 Q5 }- MLCD1602.c放的是定义好的LCD命令、数据读写函数,读者也可以自行将字符重定义函数放在里面;
7 O; H. i. z+ m3 {1 FLCD1602.h则是函数声明以及#define。
+ t' h; j+ |; B- i项目构建完成后,Keil中排布如图所示
1 B; W# A9 n! @3 X) ]& N3 J9 x( u
( o4 ^3 |3 N) W/ `5 t
1、LCD1602.h文件代码
, y# b4 H4 Y9 d: R. x$ p6 J( g#ifndef __LCD1602_H1 I% d- Z ^ s4 `# @- p
#define __LCD1602_H
* q, c& h) `1 U( f, c
6 B m$ V* m* C3 `5 f#define LCDData P0
7 G6 }+ U. s3 n9 u# F% p0 H5 }#define uchar unsigned char
* M4 T5 f2 F1 {#define uint unsigned int9 M, `+ {9 A S$ g$ b
#define register_addr 0x00
- \+ w! [+ `4 n0 U#define device_addr 0x800 E9 M2 s+ V0 @4 q6 r7 }5 E
0 j" T- ^" y4 F) rvoid delay(uchar c);
" W/ K3 z# U# E# `void LCDWriteCom(uchar i);7 F- C D4 g# e6 E0 g9 S+ Z% E
void LCDWritEDAta(uchar i);: @; [4 A# S9 }- B3 n a
void LCDClean();2 N$ H- v9 r7 e8 e5 m
void LCDInit();& o" f$ ~' P# h
#endif /*__LCD1602_H*/* S x5 @$ K4 G" l' ], ?( G2 o$ t
......* m) [& a. u- i4 }, F
( L% `9 @ e0 ~) S7 C# R |
|