一、LCD简介

LCD作为一种常见的外设,是广泛应用在单片机外围电路的一种显示设备。LCD1602和LCD12864是典型的单片机显示电路中常用的模块,两种该模块都属于点阵式液晶显示模块。

1、LCD1602模块

1602液晶也叫160字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。1602LCD是指显示内容为16*2,显示两行,每行可以显示16个字符液晶模块。液晶1602引脚说明如下表中所示:

编号

符号

引脚说明

编号

符号

引脚说明

1

VSS

电源地

9

D2

数据口

2

VDD

电源正极

10

D3

数据口

3

VO

液晶显示对比度调节

11

D4

数据口

4

RS

数据/命令选择端

12

D5

数据口

5

R/W(—)

读写选择端

13

D6

数据口

6

E

使能信号

14

D7

数据口

7

D0

数据口

15

BLA

背光电源正极

8

D1

数据口

16

BLK

背光电源负极

对LCD1602有两种操作方式,即“读”和“写”。“读”操作就是读液晶是否处于“忙”状态,如果是,就等液晶“空闲”时再往液晶“写”(写指令或数据)。一般情况下对于LCD1602可以不用“读”操作,用一个短暂延时即可。液晶1602工作之前,要对1602进行一些设置。

  1. Function set功能设置
    1602模块的功能设置指令码如下表中所示:

    RS R/W

    DB7

    DB6

    DB5

    DB4

    DB3

    DB2

    DB1

    DB0

    0

    0

    0

    0

    1

    DL

    N

    F

    -

    -

    设置模块数据接口的宽度和1602显示屏的显示方式,即单片机1602模块接口数据总线4位或8位、LCD显示行数和显示字符点阵的规格。DL:数据接口宽度标志。DL=1,8位数据DB7~DB0;DL=0,四位数据总线DB7~DB4;DB3~DB0不用,使用此方式传送数据,需分两次进行。N:显示行数标志。N=1,双行显示;N=0,单行显示方式。F:现实点阵字符字体标志。F=1,5*10点阵+光标显示;F=0:5*7点阵+光标显示方式。

  2. Display on/off control(显示开/关控制)
    1602模块的指令代码如下表所示:

    RS R/W

    DB7

    DB6

    DB5

    DB4

    DB3

    DB2

    DB1

    DB0

    0

    0

    0

    0

    0

    0

    1

    D

    C

    B

    D:显示开/关标志。D=1,开显示;D=0,关显示。
    C:光标显示控制标志。C=1,光标显示;C=0,光标不显示。
    B:闪烁控制标志。B=1,光标所指位置上,交替显示全黑点阵和显示字符,产生闪烁效果,f=250KHZ时,闪烁频率为0.4ms左右,通过设置,光标可以与其所指位置的字符一起闪烁。

  3. Entry mode set(设置输入方式)
RS R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

0

0

0

0

0

0

0

1

N

S

N=1,当读和写一个字符后地址指针加1,且光标加1;N=0,当读和写一个字符后地址指针减1,且光标减1.

S=1,当写一个字符时,整屏显示左移(N=1)或右移(N=0)。S=0,当写一个字符时,整屏显示不移动。

  1. Clear display(清屏)

    RS R/W

    DB7

    DB6

    DB5

    DB4

    DB3

    DB2

    DB1

    DB0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    1

    所谓清屏就是把数据指针清零和所有显示清零

2、12864模块

12864是128*64点阵液晶模块的点阵数简称,其引脚说明如下表中所示:

编号

符号

引脚说明

编号

符号

引脚说明

1

VSS

电源地

11

D4

数据口

2

VDD

电源正极

12

D5

数据口

3

VO

液晶显示对比度

调节

13

D6

数据口

4

RS

数据/命令选择端(H/L)(串口片选)

14

D7

数据口

5

R/W

读写选择端(H/L)(串口数据)

15

PSB

并串选择,H并行,L串行

6

E

使能信号

16

NC

悬空

7

D0

数据口

17

RST

复位,低电平有效

8

D1

数据口

18

NC

悬空

9

D2

数据口

19

BLA

背光电源正极

10

D3

数据口

20

BLK

背光电源负极

对于液晶12864同1602也有两种工作方式,“读”和“写”。“读”操作即判断液晶是否处于“忙”状态,一般对12864用一个短延时即可。

  1. Function set 功能设置

    RS R/W

    DB7

    DB6

    DB5

    DB4

    DB3

    DB2

    DB1

    DB0

    0

    0

    0

    0

    1

    DL

    X

    0 RE

    X

    X

    DL:数据接口宽度标志。DL=1(必须是1),8位数据DB7~DB0。
    RE=1,扩充指令集动作;RE=0,基本指令集动作。
    RS和R/W均为低电平的情况下,是“写指令”。

  2. Display on/off control(显示开/关控制)

    RS R/W

    DB7

    DB6

    DB5

    DB4

    DB3

    DB2

    DB1

    DB0

    0

    0

    0

    0

    0

    0

    1

    D

    C

    B

    D:显示开/关标志。D=1,开显示;D=0,关显示。
    C:光标显示控制标志。C=1,光标显示;C=0,光标不显示。
    B:光标位置反白开关控制位。B=1,光标位置反白ON(将光标所在处的资料反白显示);B=0,光标位置反白OFF。

  3. Clear display(清屏)

    RS R/W

    DB7

    DB6

    DB5

    DB4

    DB3

    DB2

    DB1

    DB0

    0

    0

    0

    0

    0

    0

    0

    0

    0

    1

    同1602,清屏就是把数据指针清零和所有显示清零。

  4. 12864串行显示
    串行工作模式下:
    CS(RS):片选信号线,进行数据操作时必须将CS端拉高。
    SCLK(R/W):串行同步时钟,每操作一位数据都要有一个SCLK跳变沿,上升沿有效,当SCLK由低电平变为高电平的瞬间,液晶将SID上的数据读入或输出。
    SID(EN):串行数据,每一次操作都由三个字符组成,第一个字节向控制器发送命令控制字,若为写指令则发送1111 1000,若为写数据则发送1111 1010。第二个字节高四位发送指令或数据的高四位,第二个字节低四位补0。第三个字节低四位发送指令或数据的低四位,第三个字节的低四位补0。

  5. 汉字显示LCD12864显示汉字,只能显示4行,每行显示8个汉字或16个字符。汉字的地址分布如下: LCD12864显示汉字,只能显示4行,每行显示8个汉字或16个字符。汉字的地址分布如下:

第一行汉字

0x80

0x81

0x82

0x83

0x84

0x85

0x86

0x87

第二行汉字

0x90

0x91

0x92

0x93

0x94

0x95

0x96

0x97

第三行汉字

0x88

0x89

0x8a

0x8b

0x8c

0x8d

0x8e

0x8f

第四行汉字

0x98

0x99

0x9a

0x9b

0x9c

0x9d

0x9e

0x9f

二、电路设计

以12864显示模块的电路为例。

1、并行显示电路

2、串行显示电路

三、程序设计

1、1602显示单个数字

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit Lcd1602_EN=P2^5; //使能端
sbit Lcd1602_RS=P1^0; //数据命令选择端
sbit Lcd1602_RW=P1^1; //读写选择端,可以直接电路置地,只使用写功能
void delay(uint i)
{uint x,y;for(x=i;x>0;x--)for(y=110;y>0;y--);
}void write_com(uchar com)
{   Lcd1602_RS=0;//命令Lcd1602_RW=0;//写Lcd1602_EN=0;P0=com; delay(5);Lcd1602_EN=1;delay(5);Lcd1602_EN=0;
}
void write_data(uchar dat)
{Lcd1602_RS=1;Lcd1602_RW=0;Lcd1602_EN=0;P0=dat;delay(5);Lcd1602_EN=1;delay(5);Lcd1602_EN=0;
}
void Lcd_Init()
{   write_com(0x38);//16*2显示,8位数据接口write_com(0x0c);//显示器开,光标开,光标闪烁write_com(0x06);//显示字符不动,光标右移write_com(0x01);//清屏
}
void display(uchar c,int v)//显示一个三位的数字
{uint shu;write_com(c);write_com(0x80);//设置第一行第一列写shu=v/100;write_data(shu+'0');shu=v%100/10;write_data(shu+'0');shu=v%10;write_data(shu+'0');}
void main()
{int v;v=789;Lcd_Init();while(1){display(0x80,v);}
}

2、1602显示单个字符

#include <reg52.h>
#include "LCD1602.h"
uchar table[]={"www.baidu.com"};
uchar num;
void display(int v)
{int shu;write_com(0x80);for(num=0;num<13;num++){write_data(table[num]);delay(5);}write_com(0x80+40);shu=v/100;write_data(shu+'0');shu=v%100/10;write_data(shu+'0');shu=v%10;write_data(shu+'0');write_data(0xdf);write_data('C');delay(5);
}
void main()
{uint v;Lcd_Init();while(1){v=100;display(v);}
}//lcd1602.h文件
#ifndef _LCD1602_
#define _LCD1602_
#define uchar unsigned char
#define uint unsigned int
sbit Lcd1602_EN=P2^5; //ʹÄܶË
sbit Lcd1602_RS=P1^0; //Êý¾ÝÃüÁîÑ¡Ôñ¶Ë
sbit Lcd1602_RW=P1^1; //¶ÁдѡÔñ¶Ë,¿ÉÒÔÖ±½Óµç·Öõأ¬Ö»Ê¹ÓÃд¹¦ÄÜvoid delay(uint i){uint x,y;for(x=i;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com){    Lcd1602_RS=0;//ÃüÁîLcd1602_RW=0;//дLcd1602_EN=0;P0=com; delay(5);Lcd1602_EN=1;delay(5);Lcd1602_EN=0;}void write_data(uchar dat){Lcd1602_RS=1;Lcd1602_RW=0;Lcd1602_EN=0;P0=dat;delay(5);Lcd1602_EN=1;delay(5);Lcd1602_EN=0;}void Lcd_Init(){    write_com(0x38);//16*2ÏÔʾ£¬8λÊý¾Ý½Ó¿Úwrite_com(0x0c);//ÏÔʾÆ÷¿ª£¬¹â±ê¿ª£¬¹â±êÉÁ˸write_com(0x06);//ÏÔʾ×Ö·û²»¶¯£¬¹â±êÓÒÒÆwrite_com(0x01);//ÇåÆÁ}#endif

3、12864显示汉字

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=P1^0;
sbit RW=P1^1;
sbit EN=P2^5;
sbit PSB=P1^2;
uchar code table1[]={"人生若只如初见,"};
uchar code table2[]={"何事秋风悲画扇。"};
uchar code table3[]={"等闲变却故人心,"};
uchar code table4[]={"却道故人心易变。"};
void delay(uint i)
{uint x,y;for(x=i;x>0;x--)for(y=110;y>0;y--);
}
void write12864_cmd(uchar cmd)
{RS=0;RW=0;EN=0;P0=cmd;delay(5);EN=1;delay(5);EN=0;
}
void write12864_data(uchar dat)
{RS=1;RW=0;EN=0;P0=dat;delay(1);EN=1;delay(1);EN=0;
}
void lcd12864_init()
{PSB=1;write12864_cmd(0x30);//设置数据宽度为8位delay(5);write12864_cmd(0x0c);//开显示delay(5);write12864_cmd(0x01);//清屏delay(5);
}
void lcd_pos(uchar x,uchar y)//显示位置坐标
{uchar pos;if(x==0){x=0x80;}else if(x==1){x=0x90;}else if(x==2){x=0x88;}else if(x==3){x=0x98;}pos=x+y;write12864_cmd(pos);
}
void main()
{lcd12864_init();while(1){uchar i;lcd_pos(0,0);for(i=0;i<16;i++){write12864_data(table1[i]);}lcd_pos(1,0);for(i=0;i<16;i++){write12864_data(table2[i]);}lcd_pos(2,0);for(i=0;i<16;i++){write12864_data(table3[i]);}lcd_pos(3,0);for(i=0;i<16;i++){write12864_data(table4[i]);}}
}

4、12864串行显示程序

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit CS=P1^0;
sbit SCLK=P1^1;
sbit SID=P2^5;
sbit PSB=P1^2;
uchar code table1[]={"人生若只如初见,"};
uchar code table2[]={"何事秋风悲画扇。"};
uchar code table3[]={"等闲变却故人心,"};
uchar code table4[]={"却道故人心易变。"};
void delay(uint i)
{uint x,y;for(x=i;x>0;x--)for(y=110;y>0;y--);
}
void sendbyte(uchar zdata)//根据液晶串口通信协议,发送数据
{uint i;for(i=0;i<8;i++){if((zdata<<i)&0x80){SID=1;}else{SID=0;}SCLK=0;SCLK=1;}
}
void write12864_com(uchar cmdcode)
{CS=1;sendbyte(0xf8);//写指令sendbyte(cmdcode&0xf0);//指令高四位sendbyte((cmdcode<<4)&0xf0);//低四位delay(1);
}
void write12864_data(uchar dispdata)
{CS=1;sendbyte(0xfa);//写数据sendbyte(dispdata&0xf0);//数据高四位sendbyte((dispdata<<4)&0xf0);//低四位delay(1);
}
void lcd12864_init()
{PSB=0;write12864_com(0x30);delay(5);write12864_com(0x0c);delay(5);write12864_com(0x01);delay(5);
}
void lcd_pos(uchar x,uchar y)//显示位置坐标
{uchar pos;if(x==0){x=0x80;}else if(x==1){x=0x90;}else if(x==2){x=0x88;}else if(x==3){x=0x98;}pos=x+y;write12864_com(pos);
}
void display(uchar *s)
{while(*s>0){write12864_data(*s);s++;delay(1);}
}
void main()
{lcd12864_init();while(1){ lcd_pos(0,0);display(table1);lcd_pos(1,0);display(table2);lcd_pos(2,0);display(table3);lcd_pos(3,0);display(table4);}
}

51单片机(六).单片机输出电路实践——LCD1602与LCD12864的使用相关推荐

  1. 51单片机电子秤(HX711模块 + LCD1602)

    51单片机电子秤(HX711模块 + LCD1602) (简单易懂) 1.---------------序 2.HX711测重模块 3.LCD1602显示模块 4.电子秤整体实现原理 5.模块升级&g ...

  2. 【Proteus仿真】51单片机+按键控制步进电机驱动+LCD1602显示

    [Proteus仿真]51单片机+按键控制步进电机驱动+LCD1602显示 Proteus仿真 在Proteus当中,步进电机选取的不同,接线的顺序不同,为了避免在接线出错,将里面的两种步进电机都选择 ...

  3. 【单片机】单片机各系列(51,PIC,AVR,MSP430/432,ARM)介绍

    文章目录 说明 资料一 ······ 综述 资料二 ······ 综述 资料三 ······ MSP430 资料四 ······ 综述 资料五 ······ 合集 说明   因为近期想要了解各种单片机 ...

  4. c语言抢答器程序,单片机六路抢答器C语言程序

    <单片机六路抢答器C语言程序>由会员分享,可在线阅读,更多相关<单片机六路抢答器C语言程序(4页珍藏版)>请在人人文库网上搜索. 1.单片机六路数显计时抢答器c语言程序#inc ...

  5. 51、stm32单片机初学者经验之谈

    51单片机作为最经典的一款单片机,已在各大高校的电子.通信专业的入门单片机课程,想学单片机这是最好的入门单片机. 单片机就是一块芯片,如stc89c52.stm32f103zet6.stm32f103 ...

  6. 51与STM32单片机架构(内核和片上外设)的区别汇总+拓展

    ** 单片机简介** 单片微型计算机简称单片机,简单来说就是集CPU(运算.控制).RAM(数据存储-内存).ROM(程序存储).输入输出设备(串口.并口等)和中断系统处于同一芯片的器件,在我们自己的 ...

  7. c51单片机音乐门铃C语言程序,单片机六首歌曲的音乐门铃程序

    单片机六首歌曲的音乐门铃程序 来源:-- 作者:-- 浏览:1346 时间:2016-08-10 14:18 标签: 摘要: buzzer        equ        p2.4 KEY     ...

  8. 丁向荣单片机pdf_单片机应用系统与开发技术

    前言 单片机是最普及.最实用的嵌入式微控制器,单片机应用技术也可以说是智能化电子产品设计的核心技术.因此,单片机在工业控制.仪器仪表.日常家电.电子通信.办公自动化设备等方面,都有其广泛的应用.单片机 ...

  9. 什么是单片机,单片机有什么用 ?

    什么是单片机,单片机有什么用? 近期不少学生问我,我有51基础,单片机略懂,嵌入式也懂一点,能不能往单片机方向发展.你真的了解到行情了吗?什么是单片机,单片机有什么用? 单片机又称单片微控制器,它不是 ...

  10. stm32单片机实现多个闹钟_如何学习单片机:单片机都是相通的,一通百通

    单片机是一种可编程的器件,现在所见到的电子产品中几乎都是以单片机为核心的,根据不同的功能需求,搭建不同的电路,从8位的单片机到32位的单片机,甚至比较高大上的ARM和DSP都可以看成是高级一点的单片机 ...

最新文章

  1. 织梦生成html加速,加快DEDECMS静态html网页生成速度的方法
  2. 【Java 并发编程】CountDownLatch 简介
  3. UNIX再学习 -- 信号
  4. Light bulbs(上海icpc网络预选赛,差分离散化)
  5. 2、C#基础 - Visual Studio 的版本选择和下载
  6. python分词统计词频_基于结巴分词做的全文分词统计词频小脚本
  7. c#值get、 set用法(包含自动转换的说明)
  8. 二叉树前序遍历python输出_[宜配屋]听图阁 - Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例...
  9. 兔子的烦恼(一)【NYOJ】
  10. visio 2007 简体中文版下载
  11. Android 应用上线安卓市场
  12. 001_KNN与线性分类器
  13. 智能三路CAN总线路由器集线器助力灵活组网
  14. Synopsys系列工具的基本概念
  15. 云计算产品经理入门(一)
  16. 刷题笔记之十 (小易的升级之路+找出字符串中第一个只出现一次的字符+洗牌+MP3光标位置)
  17. 基于Redis实现查找附近的人
  18. python学习——StringIO和BytesIO
  19. python+nodejs+vue的校园二手交易平台django项目源码
  20. PostMan测试接口-----上传文件、导出excel

热门文章

  1. [Unity官方教程]Tanks!单机双人坦克大战源码和素材
  2. 思科命令敲错等待解决方案
  3. 关于兰伯特投影得应用问题
  4. 安卓仿苹果键盘输入法_仿ios输入法
  5. Access数据库多表联合查询
  6. 关于身份证校验算法的一些想法
  7. 血泪安装caffe教程
  8. python汉化 草蟒_草蟒首页、文档和下载 - Python 汉化版
  9. 项目周例会会议纪要模板
  10. 使用arcgis、matlab与R语言GD包进行地理探测器 批量运行,并导出探测结果