精华内容
下载资源
问答
  • lcd1602液晶屏在很懂工业产品上都有应用,LCD1602能够能够同时显示32个字符,价格便宜,编程简单而且稳定可靠。lcd1602液晶屏是一种图形点阵显示器,显示原理简单易懂,都是液晶屏内部的液晶材料变化而显示不同的...

    5d98b9e3715218612fd43d9d25b383b0.gif

    lcd1602液晶屏在很懂工业产品上都有应用,LCD1602能够能够同时显示32个字符,价格便宜,编程简单而且稳定可靠。lcd1602液晶屏是一种图形点阵显示器,显示原理简单易懂,都是液晶屏内部的液晶材料变化而显示不同的字符,因为液晶是具有流动特性的物质,所以只需外加很微小的力量即可使液晶分子运动,以最常见普遍的向列型液晶为例,液晶分子可轻易的借着电场作用使得液晶分子转向,由于液晶的光轴与其分子轴相当一致,故可借此产生光学效果,而当加于液晶的电场移除消失时,液晶将借着其本身的弹性及黏性,液晶分子将十分迅速的回撤消来未加电场前的状态。

    lcd1602液晶屏就是通过电压来改变填充在两块平行板之间的液晶材料内部分子的排列状况,以达到遮光和透光的目的来显示深浅不一,错落有致的图象,而且只要在两块平板间再加上三元色的滤光层,就可实现显示彩色图象。

    91c31085b550fff8354ad8262ffdd280.png

    lcd1602中文资料---LCD1602液晶屏特点

    a. 显示质量高

    由于1602LCD每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,画质高且不会闪烁。

    b. 数字式接口

    1602液晶屏都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。

    c. 体积小、重量轻

    1602液晶模块通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示屏要轻得多。

    d. 功耗低

    相对而言,1602液晶显示屏的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示屏要少得多。

    液晶显示模块LCD1602的内部结构可以分成三部分:一为LCD控制器,二为LCD驱动器,三为LCD显示装备。

    85bcb37b1f2655cc3cafcb54ce302bb4.png

    lcd1602中文资料---lcd1602接线图

    在了解LCD1602接线图之前,我们先看看LCD1602的引脚定义图。

    1脚:VSS为接地;

    2脚:VDD接5V电源VCC;

    3脚:VO为液晶显示器对比度调整;VO是液晶显示的偏压信号,可接10K的3296精密电位器。或同样阻值的RM065/RM063蓝白可调电阻。

    220aafd5ee59e5025b03cf1d43aef8fa.png

    4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器;

    5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据;

    6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令;

    7~14脚:D0~D7为8位双向数据线;

    15脚:背光电源正极;

    16脚:背光电源负极。

    460a2637ebc79e80dad7f60062414ab4.png

    154fc53602e70ecb9edacfd7a6804e26.png

    LCD1602液晶显示模块可以和单片机AT89C51直接接口接线:

    df20878bb7f79a324f22401cee6464aa.png

    也可以按照下图显示的电路图接线即可,需要说明的是在这个电路图中,LCD的第三脚VEE没有接,这个脚是控制屏幕对比度的。可以将电位器的两端分别接VCC和GND,中间端接LCD的第三脚。

    ea7f38081831d3004e291b9bda8333c5.png

    lcd1602中文资料---1602LCD主要技术参数

    显示容量:16×2个字符 ;芯片工作电压:4.5—5.5V ;工作电流:2.0mA(5.0V) ;模块最佳工作电压:5.0V ;字符尺寸:2.95×4.35(W×H)mm。

    LCD1602的基本操作分为四种:

    1. 读状态:输入RS=0,RW=1,E=高脉冲。输出:D0—D7为状态字。

    2. 读数据:输入RS=1,RW=1,E=高脉冲。输出:D0—D7为数据。

    3. 写命令:输入RS=0,RW=0,E=高脉冲。输出:无。

    4. 写数据:输入RS=1,RW=0,E=高脉冲。输出:无。

    时序时间参数表:

    91bf726228bbbfcaa352bca54bcbc47a.png

    lcd1602中文资料----lcd1602与单片机连接图

    LCD1602如何接单片机了?给大家分享一个LCD1602接单片机原理PCB图如下:

    408d3bf6392c06bb4ad56048c172987d.png

    代码如下:

    #include《reg52.h》 //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

    #include《intrins.h》

    sbit RS = P2^4; //定义端口

    sbit RW = P2^5;

    sbit EN = P2^6;

    #define RS_CLR RS=0

    #define RS_SET RS=1

    #define RW_CLR RW=0

    #define RW_SET RW=1

    #define EN_CLR EN=0

    #define EN_SET EN=1

    #define DataPort P0

    /*------------------------------------------------

    uS延时函数,含有输入参数 unsigned char t,无返回值

    unsigned char 是定义无符号字符变量,其值的范围是

    0~255 这里使用晶振12M,精确延时请使用汇编,大致延时

    长度如下 T=tx2+5 uS

    ------------------------------------------------*/

    void DelayUs2x(unsigned char t)

    {

    while(--t);

    }

    /*------------------------------------------------

    mS延时函数,含有输入参数 unsigned char t,无返回值

    unsigned char 是定义无符号字符变量,其值的范围是

    0~255 这里使用晶振12M,精确延时请使用汇编

    ------------------------------------------------*/

    void DelayMs(unsigned char t)

    {

    while(t--)

    {

    //大致延时1mS

    DelayUs2x(245);

    DelayUs2x(245);

    }

    }

    /*------------------------------------------------

    判忙函数

    ------------------------------------------------*/

    bit LCD_Check_Busy(void)

    {

    DataPort= 0xFF;

    RS_CLR;

    RW_SET;

    EN_CLR;

    _nop_();

    EN_SET;

    return (bit)(DataPort & 0x80);

    }

    /*------------------------------------------------

    写入命令函数

    ------------------------------------------------*/

    void LCD_Write_Com(unsigned char com)

    {

    // while(LCD_Check_Busy()); //忙则等待

    DelayMs(5);

    RS_CLR;

    RW_CLR;

    EN_SET;

    DataPort= com;

    _nop_();

    EN_CLR;

    }

    /*------------------------------------------------

    写入数据函数

    ------------------------------------------------*/

    void LCD_Write_Data(unsigned char Data)

    {

    //while(LCD_Check_Busy()); //忙则等待

    DelayMs(5);

    RS_SET;

    RW_CLR;

    EN_SET;

    DataPort= Data;

    _nop_();

    EN_CLR;

    }

    /*------------------------------------------------

    清屏函数

    ------------------------------------------------*/

    void LCD_Clear(void)

    {

    LCD_Write_Com(0x01);

    DelayMs(5);

    }

    /*------------------------------------------------

    写入字符串函数

    ------------------------------------------------*/

    void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)

    {

    if(y == 0)

    {

    LCD_Write_Com(0x80 + x); //表示第一行

    }

    else

    {

    LCD_Write_Com(0xC0 + x); //表示第二行

    }

    while (*s)

    {

    LCD_Write_Data( *s);

    s ++;

    }

    }

    /*------------------------------------------------

    写入字符函数

    ------------------------------------------------*/

    void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)

    {

    if (y == 0)

    {

    LCD_Write_Com(0x80 + x);

    }

    else

    {

    LCD_Write_Com(0xC0 + x);

    }

    LCD_Write_Data( Data);

    }

    /*------------------------------------------------

    初始化函数

    ------------------------------------------------*/

    void LCD_Init(void)

    {

    LCD_Write_Com(0x38); /*显示模式设置*/

    DelayMs(5);

    LCD_Write_Com(0x38);

    DelayMs(5);

    LCD_Write_Com(0x38);

    DelayMs(5);

    LCD_Write_Com(0x38);

    LCD_Write_Com(0x08); /*显示关闭*/

    LCD_Write_Com(0x01); /*显示清屏*/

    LCD_Write_Com(0x06); /*显示光标移动设置*/

    DelayMs(5);

    LCD_Write_Com(0x0C); /*显示开及光标设置*/

    }

    /*------------------------------------------------

    主函数[上面已经把显示功能封装好了,今后再写其他显示就直接调用]

    -----------------------------------------------*/

    void main(void)

    {

    LCD_Init();

    LCD_Clear();//清屏

    while (1)

    {

    LCD_Write_Char(7,0,‘o’);

    LCD_Write_Char(8,0,‘k’);

    LCD_Write_String(1,1,“www.doflye.net”);

    while(1);

    }

    }

    164177f923c7fd2f7e192f5b222207f4.png

    a9431c1047f25b0ed9cb21698bf0c537.png

    为了方便大家更好的学习,您还可以关注畅学电子和EDA的公众号,每天推送相关知识,希望能对你的学习有所帮助!

    35f9b8fdd45598ecae4546d6cb75e666.png

    2737ea6e0375ccf763be62b5aab3cc09.png

    展开全文
  • 51单片机与12864LCD的原理图以及C程序
  • LCD1602液晶显示原理 LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形,那么LCD1602结合51单片机他们会有什么火花呢?我们来说说在单片机系统中应用...

    描述

    LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符。LCD1602液晶显示原理 LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形,那么LCD1602结合51单片机他们会有什么火花呢?

    我们来说说在单片机系统中应用晶液显示器作为输出器件有以下几个优点:

    显示质量高

    由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。

    数字式接口

    液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。

    体积小、重量轻

    液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。

    功耗低

    相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多

    7df313b8bcdc0a6244efae7aff0e35ed.png

    基于51单片机的lcd1602液晶显示屏连接电路图

    2edcfa0c0125428efbccc81fb011ff4f.png

    如网页上出现格式错乱可从此处本例的完整源码:http://www.51hei.com/f/1602430.rar 上图是仿真效果 显示2行字符。如下程序

    #include《AT89x51.h》

    #define uchar unsigned char

    /*****************************************

    电路连接

    P1------DB0~DB7

    P2.0------RS

    P2.1------RW

    P2.2------E

    *****************************************/

    #define LCD_DB P1

    sbit LCD_RS=P2^0;

    sbit LCD_RW=P2^1;

    sbit LCD_E=P2^2;

    uchar code ttt[]=“ShanXi Dianzi Kejixueyuan”;//25

    uchar code kkk[]=“Dianzi GonGcheng Xueyun”;//23

    /******定义函数****************/

    #define uchar unsigned char

    #define uint unsigned int

    void LCD_init(void);//声明初始化函数

    void LCD_write_command(uchar command);//写指令函数

    void LCD_write_data(uchar dat);//写数据函数

    void LCD_disp_char(uchar x,uchar y,uchar dat);//在某个屏幕位置上显示一

    //个字符,X(0-16),y(1-2)

    //void LCD_check_busy(void);//检查忙函数。我没用到此函数,因为通过率极低。

    void delay_n40us(uint n);//延时函数

    //********************************

    //*******初始化函数***************

    void LCD_init(void)

    {

    LCD_write_command(0x38);//设置8位格式,2行,5x7

    LCD_write_command(0x0c);//整体显示,关光标,不闪烁

    LCD_write_command(0x06);//设定输入方式,增量不移位--------------

    LCD_write_command(0x01);//清除屏幕显示----------------

    delay_n40us(100);//实践证明,我的LCD1602上,用for 循环200 次就能可靠完成清屏指令。

    }

    //********************************

    //********写指令函数***********设置先向1602写入的数据为地址*

    void LCD_write_command(uchar dat)

    {

    LCD_DB=dat;

    LCD_RS=0;//指令

    LCD_RW=0;//写入

    LCD_E=1;//允许

    LCD_E=0;//产生下降沿

    delay_n40us(1);//实践证明,我的LCD1602 上,用for 循环1 次就能完成普通写指令。

    }

    //*******************************

    //********再写数据函数*****向1602中写入数据********

    void LCD_write_data(uchar dat)

    {

    LCD_DB=dat;

    LCD_RS=1;//数据

    LCD_RW=0;//写入

    LCD_E=1;//允许

    LCD_E=0;//产生下降沿

    delay_n40us(1);

    }

    //写入字符串函数

    void writeDataLcd(unsigned char dat)// 写入数据

    {

    LCD_RS=1; //RS置1 (运算后P5=xxx1 xxxx,即RS=1其他位状态不变)

    LCD_RW=0; //RW清0 (运算后P5=xx0x xxxx, 即RW=0其他位状态不变)

    LCD_E=0; //使能E清0 (运算后P5=xxxx 0xxx, 即E=0其他位状态不变)

    P1 = dat; //送数据到P2OUT准备输出进入1602,等E下降沿来即可进入1602.

    LCD_E=1; //使能E置1,P5OUT= xxxx xxxx+0000 1000=xxxx1xxx,E=1.

    delay_n40us(10);

    LCD_E=0; //使能E清0,这样E从1变0,产生一个下降,写入命令到1602。

    }

    //********************************

    //*******显示一个字符函数*********

    void LCD_disp_char(uchar x,uchar y,uchar dat)

    {

    uchar address;

    if(y==1)

    address=0x80+x;

    else

    address=0xc0+x;

    LCD_write_command(address);

    LCD_write_data(dat);

    }

    //********************************

    /*******检查忙函数*************

    voidLCD_check_busy()

    //实践证明,在我的LCD1602 上,检查忙指令通

    过率极低,以至于不能正常使用LCD。因此我没有再用检查忙函数。而使

    do//用了延时的方法,延时还是非常好用的。我试了一下,用//

    {LCD_E=0; //for 循环作延时,普通指令只要1次循就可完成。清屏指令

    LCD_RS=0; //要用200次循环便能完成。

    LCD_RW=1;

    LCD_DB=0xff;

    LCD_E=1;

    while(LCD_DB^7==1);

    ******************************/

    //********延时函数***************

    void delay_n40us(uint n)

    { uint i;

    uchar j;

    for(i=n;i》0;i--)

    for(j=0;j《2;j++); //在这个延时循环函数中我只做了2次循环,

    } //实践证明我的LCD1602 上普

    //通的指令只需1次循环就能可靠完成。

    //*******************************

    //*********主函数*****************

    void main(void)

    {

    while(1)

    {

    uint i=0;

    LCD_init();

    LCD_write_command(0x80);//0x80第一行从顶头开始显示,加n,后移n位显示

    for (i=0;i《25;i++)

    {

    writeDataLcd(ttt[i]);

    delay_n40us(15000);

    }

    delay_n40us(30000);

    delay_n40us(30000);

    delay_n40us(50000);

    LCD_write_command(0x80+64);//0x80+64,第二行从顶头开始显示,加64再加n,第二行从n开始显示。

    for (i=0;i《23;i++)

    {

    writeDataLcd(kkk[i]);

    delay_n40us(15000);

    }

    LCD_write_command(0x80);

    LCD_disp_char(2,1,‘ ’);

    delay_n40us(20000);

    }

    }

    小编推荐阅读:

    打开APP阅读更多精彩内容

    点击阅读全文

    展开全文
  • 由于液晶的光轴与其分子轴相当一致,故可借此产生光学效果,而当加于液晶的电场移除消失时,液晶将借着其本身的弹性及黏性,液晶分子将十分迅速的回撤消来未加电场前的状态。
  • 单片机-lcd1602.zip

    2020-04-21 13:01:58
    本文件为lcd1602库函数,将头文件放入主程序就直接可以用来显示连接单片机上,文件中包含注释,欢迎下载
  • 51单片机控制LCD1602模块

    万次阅读 多人点赞 2018-01-28 22:41:37
    51单片机控制LCD1602模块视频播放:LCD1602视频(1)LCD1602概述先来看看LCD1602什么意思?Liquid Crystal Display(LCD)表示液晶显示,1602 表示一行可以显示16个字符,一共有两行。现在我们来看看如何使用简单的IO...

    51单片机控制LCD1602模块

    视频播放:LCD1602视频

    (1)LCD1602概述

    先来看看LCD1602什么意思?Liquid Crystal Display(LCD)表示液晶显示,1602 表示一行可以显示16个字符,一共有两行。

    现在我们来看看如何使用简单的IO控制和延时来实现操作LCD1602液晶模块。既然是用单片机控制LCD1602,那么根据前面的分析,首先要搞清楚谁是控制对象,谁是被控制对象。很显然,LCD1602是被控制对象,那么我们就先从LCD1602开始分析。所谓控制也可以理解为沟通,比如你与室友沟通,希望他帮你买瓶绿茶,那么就表示至少你的室友能听懂你的“指令”,能知道绿茶是什么,如何去买等等信息。好了,那么如何与LCD1602沟通呢?可以想一想,平时人与人是如何沟通的?沟通之前先要打个招呼吧,比如“你好”之类的,电话里面要先讲个“喂?”,确定通迅正常了之后才进入沟通正题了,很少有人打电话一上来就开始“哇哇”的说,万一说了半天发现信号还没连上呢,那不是白讲了。其实单片机与LCD1602的沟通方式也一样,电话中使用的“喂?”在我们这里其实就叫初始化。后面也会经常碰到这个“初始化”的概念。其实器件也是人设计的,所以他的工作方式从某种程度上讲,也是人的沟通方式。打完招呼后,就开始进入真正主题了。什么主题呢?LCD1602是显示模块,主要作用当然是显示了。既然是显示,我们可以想一想,无非就是两个内容:

    (1)你想要显示什么内容?

    (2)你打算在哪里显示?

    很明显,这两个内容都是来自于单片机的控制,单片机让它显示什么它就显示什么(叁议电子)。这个‘显示什么’就是传送的数据。那么怎么往LCD1602模块传送数据呢?前面讲了,LCD1602表示2行16个字符,也就是有不同的显示地点,那么单片机如何告诉LCD1602的显示地点呢?因此前面的分析可以总结为三个问题,如何初始化;如何传送显示的内容(显示什么);在哪里显示。这三个问题如何解答呢?当然要去看LCD1602说明手册了。

    为了解决这三个问题,我们还是先来看看人与人之间是如何沟通的,如果当面沟通,你的信号(声音)能够直接传到对方,而且能让对方听懂。如果相距比较远,那么就使用电话等通信工具。前者信号传递载体是空气,后者是电话线。那么我们来看看MCU与LCD1602的信号传递载体是什么样的,这就需要去查看原理图了。

    如图3-1所示,LCD1602一共16个引脚,其中引脚1,2,15,16是与电源相关的,我们不去理它。另外引脚3连接到了可调电阻Rv1,用于液晶模块背光调节的,这里也暂且不管。我们现在关心的是与信号传输相关的引脚,很明显与引脚4到引脚14有关。从图中我们看到,单片机通过P4.1,P4.4,P4.5分别与RS,RW,EN连接,P2端口与D0到D7连接,一共10根线。那么也就是说,单片机的所有指令,数据等都是通过这10根线来完成的。怎么样去控制LCD呢,当然是阅读LCD的说明手册。这里来个比喻,房间内一个人规定,敲三下门,屋内的人才把门打开。如果你要进入屋内,就必须敲三下,如果你不知道这个规则,敲了四下,或者大喊大叫,门也开不了。这里要说明什么意思?当你要与某个器件沟通的时候,你必须严格按照这个器件的规则来操作。比如一个德国人只会讲德语,如果你想与他沟通那么你就只能和他讲德语了。如果你讲汉语,他讲德语,这就乱套了,信息无法传递(www.ppptalk.com)。这个时候,你可以选择会讲汉语的德国人沟通,也就是换一个沟通对象。同样的,如果你觉得某个器件操作起来太麻烦,那么你可以更换另外一个具有同样功能能满足你使用要求的器件来代替。但是,一旦你选定了某个器件后,你必须100%的按照“这个器件的使用规则”来操作。不同的外围器件的规则是不一样,也就是说这些规则是多样化的。回到前面讲的开门的例子,也可以这样设计,比如一共敲两下,第一下要敲重一点,第二下要敲轻一点。或者重敲三下,轻敲一下,等等。但是对于我们而言,不需要问为什么,照着做就行了。规则如何设计,那是设计这个器件或者模块的工程师应该思考的工作,我相信这些规则的设计一定有他们的理由。但我们只是从应用层面来思考问题,不管你怎么规定的,我照做就行了。这些规则在哪里呢?查看芯片手册或者官方说明书。罗嗦这么多,其实就为了强调学习这门技术一定要以芯片手册(官方说明资料)为本,而且后面还会继续强调。其实LCD1602包括后面会讲到的其他模块同样如此,你要与它沟通,当然必须按照它的规则来。下面我们就来解读它的规则,来解决前面提到的三个问题,初始化,内容显示,显示地址。

    (2)LCD1602初始化

    关于这一点,LCD1602说明手册上已经明确告诉我们了,想都不要去想,管你这些什么意思,照做即可。

    延时15ms

    写指令38H

    延时5ms

    写指令38H

    写指令08H

    写指令01H

    写指令06H

    写指令0CH

    以上为初始化过程,延时部分好解决,前面讲过了。这里就看如何“写指令”了。问题来了,液晶模块怎么知道单片机给我的是命令还是数据。(叁议电子www.ppptalk.com)LCD1602看到RS为高时,就明白了,哦,你要给我传送数据了;看到RS为低时,就知道你要给我指令了。这个只是选择“命令”还是“数据”,还有一个问题,我们的目的是“写指令”,那么液晶模块怎么知道是“写”还是“读”呢?再来看RW信号,当RW为低的时候,液晶模块就知道了,单片机要给我“写”了;当RW为高的时候,液晶模块也知道了,单片机要“读”了。很明显,我们这里要把RW设置为低。“写/读”和“指令/数据”都知道如何告诉液晶模块了,那么这个指令从怎么传过去呢?通过D0-D7这8根线(也就是P2端口)来传输,比如我要传送的指令为x033,那么就把这个数据0x33放到P2端口,当LCD1602看到“写”和“指令”的时候,就知道把P2端口上的0x33这个指令拿过来了。这样就达到了“写”“指令”“0x33”的目的。

    但是不是这样就能让LCD1602正常执行了。不是的。回到我们前面讲的那个例子,这里加个条件,屋内人听到敲门三下后,判断暗号正确了,但是没有直接开门,而是通知了他的上级,得到上级的授权后,才开门。也就是两个条件,暗号正确和上级授权。LCD1602也一样,收到指令没有立即执行,还要等另外一个信号,就是EN使能信号。此时EN给个一定宽度的脉冲,LCD1602才开始执行。

    这样根据前面的分析很容易的写出写指令的代码:

    void Lcd_Write_Cmd(unsigned char Cmd) {  

        delayMs(5);//注意这里需要延时5ms比较保险 代替判断忙信号  

        RW = 0; 

        P2 = Cmd;        //准备好指令  

        RS=0;         //告诉LCD1602,P0中放的是指令不是数据  

        EN=1;  

        delayUs(5); //根据时序图,脉冲要有一定宽度  

        EN=0;           //使指令有效,开始执行

    同样的道理,以上代码中,只需改一下RS信号为1,就是写数据的代码了

    voidLcd_Write_Data(unsignedcharmData{

        RW = 0;

        delayMs(5);//注意这里需要延时5ms比较保险代替判断忙信号

        P2=mData;//准备好指令

        RS=1;//告诉LCD1602,P0中放的是数据不是指令

        EN=1;

        delayUs(5);//根据时序图,脉冲要有一定宽度

        EN=0;//使指令有效,开始执行

    }

    讲到这里,LCD1602初始化代码应该能写出了。同时我们也已经写出了传递指令的代码,那么现在我们只要知道指令内容就可以了。

    指令1:清显示,指令码01H,光标复位到地址00H位置。

    指令2:光标复位,光标返回到地址00H。

    指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。

    指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。

    指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标。

    指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平时双行显示F:低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。

    指令7:字符发生器RAM地址设置。

    指令8:DDRAM地址设置。

    指令9:读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。

    指令10:写数据。

    指令11:读数据。

    这样你需要给LCD1602什么指令,只需要传递给void write_com(unsigned char Cmd)函数中的Cmd参数就行了。


    (3)LCD1602确定显示位置


    现在我们就来解决前面提到的第二个问题:“在哪里显示?”也就是液晶模块的这32个空格是如何确定的。

    从以上这个图可以看到,一共两行,00到0F和40到4F刚好与LCD1602的32个空格对应。可见,液晶模块的显示位置是通过这个表格对应的码值来确定的。例如第二行第一个字符的地址是40H,那么是不是它的地址就是40H了。注意表3-2中第8条数据存储地址,D7已经被写死了。最终的显示地址应该是40H+10000000B(40H+80H),因此我们只要把这个值传给Cmd,这样LCD1602就知道在第二行第一个位置显示了。

    (4)LCD1602确定显示内容

    前面讲了,如果传送数据就是要显示的内容。比如我要显示字母A,怎么操作呢?

    以上图中可以知道,如果你要显示A,那么数据的高位为0100,低位为0001,因此为01000001。把这个数据传送给LCD1602,它就知道要显示A了。

    这样三个问题都解决了,“初始化”,“写指令”,“写数据”。

    现在回过头来看看,我们在使用单片机控制LCD1602这个过程中用到了单片机的哪些知识。回去看看图1,10根连接线,P4.1,P4.4和P4.5,再加上P2端口,主要是通过P4.1,P4.4和P4.5高低变化来发出指令或数据,P2端口的变化反映指令或数据的内容。可见,这个过程中我们只用到了IO口控制和延时。其他很长的部分我们用在理解1602的使用规则了。注意这里是使用规则,谈不上原理。比如你给LCD1602发送清屏指令时,你明白LCD1602收到这个指令是如何操作清屏的吗?不知道,也没有必要知道。液晶模块说明书也不告诉你。好比你使用手机时,你点击一下某个应用程序就打开了,然后按照它的规则去使用就行了,比如听歌,上网等等,你不用关心它们是怎么实现的。其实手机也是个模块,我们只要学会操作就行了,不管它里面发生了什么事情。

    (5)小结

    现在对以上分析内容小结一下。LCD1602液晶模块的作用就是显示,既然是“显示”,无非就是显示什么内容,在哪里显示。那么如何确定显示的内容呢?通过ASCII码表来确定。如何确定显示的位置呢?通过表格3-3来确定。在单片机控制LCD1602液晶模块时,也就是这两个对象沟通时,一定要先“打招呼”,也就是初始化。如何初始化呢?说明手册中已经给出了具体步骤,照搬即可。理清了这个思路,剩下的就是去实现各个步骤了。里面涉及到如何写指令,写数据以及如何读忙信号。具体查看时序图即可。



    展开全文
  • 这是我上月写的单片机控制LCD12864的keil源文件,里面还有proteus硬件连接LCD12864的控制芯片是KS0108,本程序的作用是让一张图片每隔一秒向上移动一次,直到整个图显示完毕。本程序经过测试成功运行,放在这跟...
  • 51单片机控制LCD1602模块结构图和使用说明,学习LCD1602必备资料!
  • 要想实现人机交互,显示装置是不可...1602共16个 管脚,管脚功能如下:实际应用时,所用液晶模块与单片机连接图如下:其中7~14管脚为IO,与单片机的P0口相接,单片机可通过向P0口发送数据被液晶模块并行接收。4管脚
  • LCD单片机连接电路图和 LCD 显示程序 /LCD 测试程序 3.2.5 LCD 显示电路 液晶显示器简称 LCD显示器它是利用液晶经过处理后能改变光线的传输方向的特性来 显示信息的要使用点阵型 LCD显示器必须有相应的 LCD控制...
  • MSP430单片机LCD1602显示,内含proteus仿真图和源代码,注释详细。
  • JHD161A液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,是武汉博控科技有限公司生产的1行...E为数据接收、发送标志,每当E线向LCD模块发送一个脉冲,LCD模块与单片机之间将进行一次数据交换;R/W为读写选择线,当
  • 2、实验目的:学习通过编程单片机控制LCD1602。 3、实验连接图。 4、实验代码。 #include<reg52.h> #define uint unsigned int #define uchar unsigned char uchar code table[]="Wang xiaoliang"; uchar ...

    1、实验环境:win732位系统,keil2,proteus7.5sp3。
    2、实验目的:学习通过编程单片机控制LCD1602。
    3、实验连接图。
    在这里插入图片描述

    4、实验代码。

    #include<reg52.h>
    #define uint unsigned int
    #define uchar unsigned char
    uchar code table[]="Wang xiaoliang";
    uchar code table1[]="Henan Mengjin";
    sbit lcden=P3^4;
    sbit lcdrs=P3^5;
    uchar num;
    void delay(uint z)
    {
    	uint x,y;
    	for(x=z;x>0;x--)
    		for(y=110;y>0;y--);
    }
    void write_com(uchar com)
    {
    	lcdrs=0;
    	P0=com;
    	delay(5);
    	lcden=1;
    	delay(5);
    	lcden=0;
    }
    void write_data(uchar date)
    {
    	lcdrs=1;
    	P0=date;
    	delay(5);
    	lcden=1;
    	delay(5);
    	lcden=0;
    }
    void init()
    {
    	lcden=0;
    	write_com(0x38);
    	write_com(0x0c);
    	write_com(0x06);
    	write_com(0x01);
    }
    void main()
    {
    	init();
    	write_com(0x80);
    	for(num=0;num<14;num++)
    	{
    		write_data(table[num]);	
    		delay(5);
    	}
    	write_com(0x80+0x40);
    	for(num=0;num<13;num++)
    	{
    		write_data(table1[num]);	
    		delay(5);
    	}
    	while(1);
    }
    
    
    
    

    5、实验结果:
    在这里插入图片描述

    6、实验体会:
    今天,进行了单片机控制LCD1602的实验,了解了LCD1602的使用方法,还学会了连接单片机的最小系统,对单片机的理解进一步加深,有所收获,感觉棒棒哒,继续加油。

    展开全文
  • (一)熟悉 LCD1602 与单片机的电路连接; (二)熟悉 LCD1602 的引脚功能; (三)掌握 LCD1602 的时序; (四)掌握单片机LCD1602 的控制方法。 二、主要仪器设备及耗材: (一)电脑一台; (二)单片机开发板...
  • STM32单片机TFTLCD显示实验:TFTLCD简介

    千次阅读 2020-02-13 21:55:02
    STM32单片机TFTLCD显示实验学习笔记 1、TFTLCD模块接口图 以2.8寸的TFTLCD为例,采用16位的并方式与外界进行连接,模块接口图如下所示: 具有如下一些信号线: CS:TFTLCD片选信号 WR:向TFTLCD写入数据 RD:从TFT...
  • 单片机LCD1602液晶显示

    2014-05-21 11:06:13
    LCD显示的基本原理,单片机LCD1602的连接控制,LCD显示字符的方法
  • PIC16单片机LCD1602的C语言程序 稍加改动引脚即可使用 PIC单片机1602字符型液晶LCD显示实例PIC16F877A+PICC//实验目的:熟悉LCD的使用方法 //LCD循环显示//硬件要求:LCD直接与单片机的A口和D口相连接
  • 包含5个程序,亲测有用。使用单片机控制LCD和热电堆传感器来实现红外测温仪的设计。
  • 单片机LCD1602

    2014-06-29 11:31:48
    很不错的电路连接方法,电路设定上进AVC时间内聚invin为你外甥女
  • 51单片机驱动LCD1602程序设计(C语言)
  • C51单片机_LCD电子时钟

    千次阅读 2019-05-31 14:44:52
    C51单片机_LCD电子时钟 可以手动设置初始时间和修改时间,可以设置闹钟时间,响应时蜂鸣器会响,步进电机会转动 #include <intrins.h> #include <reg52.h> //包含头文件,一般情况不需要改动,头文件...
  • 单片机LCD1602

    千次阅读 2020-02-14 17:12:05
    3. 51单片机驱动LCD1602的电路图+程序 3.1 编程思路: 3.2 仿真电路图 3.2 代码: 1. 参考资料: 本文在此 LCD1602中文资料 的基础上修改完成。 2. 中文资料 2.1. 液晶显示器各种图形的显示原理 2.1.1 ...
  • 51单片机LCD1602接口电路与程序

    千次阅读 2020-04-01 22:21:56
    51单片机LCD1602接口电路与程序 一、工作方式:间接工作方式。 二、实现功能:显示“Hope the epidemic will pass soon”。 三、仿真电路图: 四、程序源码: #include<reg52.h> #define LCD1602_DB P0 ...
  • 51单片机LCD1602液晶显示器的控制要想实现人机交互,显示装置是不可缺少的。这篇文章主要关于如何控制液晶显示,并在此基础上加上定时器的功能,把原来已用数码管显示的定时器搬到液晶屏上来。这里用到的液晶为LCD...
  • 基于51单片机LCD1602的万年历程序

    千次阅读 2019-10-01 22:30:55
    小白 第一次跟新博客 基于51单片机LCD1602的万年历程序 ...LCD1602和51单片机连接方法 RS = P3^5; //数据/命令选择端(H/L)RW = P3^4; //数/写选择端(H/L)EN = P3^3; //使能信号P0 //LCD1602的数据口D0-...
  • 这里将我写的STC12C5A60S2单片机控制LCD2004液晶屏的程序共享一下,如有不足,敬请指出!
  • 51单片机LCD1602液晶显示屏

    千次阅读 2020-05-23 22:39:52
    从上图可以看到,以上给的时间参数全部是 ns 级别的,而 51 单片机的机器周期是 1us,指令周期是 2-4 个机器周期,所以即便在程序里不加延时程序,也可以很好的配合 LCD1602 的时序要求了。 LCD1602 操作步骤如下所...
  • PIC单片机驱动LCD断码屏代码生成工具PIC 16系列单片机部分型号都带有LCD(断码)驱动模块, 在编写这部分代码的过程中发现对驱动管脚赋值逻辑有很大的重复部分。 所以写了一个宏函数,自动生成驱动逻辑。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,227
精华内容 2,090
关键字:

单片机连接lcd