我是靠谱客的博主 狂野煎蛋,最近开发中收集的这篇文章主要介绍51单片机lcd1602显示(模块),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

假期自己学习了51单片机,今天刚好学到了LCD602,我也开始在csdn中开始了自己的第一篇文章,因为是刚开始学所以难免不会有错误,但是呢,还是希望能和大家一起学习交流一下。

简介:

作为各类单片机实物设计的常用显示屏,LCD1602是一种专门用于显示字母、数字、符号等点阵式LCD,其1602是指LCD显示的内容为16X2,即可以显示两行,每行16个字符(1个汉字占用2个字符)。这里需要要注意的是lcd1602是不能显示汉字的,它只能显示字母字符。

硬件参数:

1602使用三条控制线:EN、RW、RS。

 他们当中EN的作用其实就是中线的功能,RW和RS指示了读、它写的是写的方向和内容。在读数据(或者Busy标志)期间,EN线必须保持高电平;而在写指令(或者数

据)过程中,EN线上必须送出一个正脉冲。RW、RS的组合一共有四种情况,分别对应四种操作:

RS=0、RW=0——表示向LCD写入指令。

RS=0、RW=1——表示读取Busy标志。

RS=1、RW=0——表示向LCD写入数据。

RS=1、RW=1——表示从LCD读取数据。LCD1602引脚定义如表3.2。
1. 读状态:输入RS=0,RW=1,E=高脉冲。输出:D0—D7为状态字。
2. 读数据:输入RS=1,RW=1,E=高脉冲。输出:D0—D7为数据。
3. 写命令:输入RS=0,RW=0,E=低脉冲。输出:无。(写完置E=高脉冲)
4. 写数据:输入RS=1,RW=0,E=低脉冲。输出:无。

1602引脚信号说明
字符型LCD1602通常分为14条引脚和16引脚两种,16引脚多出来的是背光电源线VCC(15引脚)和地线(16引脚),其控制原理与14引脚LCD完全一样,引脚定义如下表:

引脚号    引脚名    电平    输入/输出    作用
1    Vss            电源地
2    Vcc            电源(+5V)
3    Vee            对比调整电压
4    RS    0/1    输入    0=输入指令;1=输出数据
5    R/W    0/1    输入    0=向LCD写入指令或数据; 1=从LCD读取信息
6    E    1,1->0    输入    使能信号,1时读取信息,1->0(下降沿)执行指令
7    DB0    0/1    输入/输出    数据总线line0(最低位)
8    DB1    0/1    输入/输出    数据总线line1
9    DB2    0/1    输入/输出    数据总线line2
10    DB3    0/1    输入/输出    数据总线line3
11    DB4    0/1    输入/输出    数据总线line4
12    DB5    0/1    输入/输出    数据总线line5
13    DB6    0/1    输入/输出    数据总线line6
14    DB7    0/1    输入/输出    数据总线line7
15    A    +Vcc        LCD背光灯源正极
16    K    接地        LCD背光灯源负极
控制器接口介绍
1、基本操作时许
1.1读状态:输入:RS=L,RW=H,E=H
----输出:D0~D7=状态字
1.2写指令:输入:RS=L,RW=L,D0~D7=指令码
----输出:无
1.3读数据:输入:RS=H,RW=H,E=H
----输出:D0~D7=数据
1.4写数据:输入:RS=H,RW=L,D0~D7=数据,E=高脉冲
----输出:无
2、状态字说明
STA7 D7    STA6 D6    STA5 D5    STA4 D4    STA3 D3    STA2 D2    STA1 D1    STA0 D0
STA0-6    当前数据地址指针的数值    
STA7    读写操作使能    1:禁止 0:允许
对控制器每次进行读写操作前,都必须进行读写检测,确保STA7为0

3、指令说明
初始化设置
显示模式设置


显示开/关光标设置


数据控制
控制器内部没有一个数据地址指针,可以通过他们来访问内部的全部80字节RAM。
其他设置

指令码    功能
01H    显示清屏:1.数据指针清零 2.所有显示清零
02H    显示回车:1.数据指针清零

理论知识应该这么多下面我们直接上代码吧

源代码:

 lcd1602.h

#ifndef __LCD1602_H__
#define __LCD1602_H__
#include<reg52.h>    //包含头文件
#include"intrins.h"
#define uint unsigned int  //预定义
#define uchar unsigned char 

void delay(uint n);
void Busy(void);
void Lcd_WriteCom(uchar com);
void Lcd_WriteData(uchar dat);
void lcd_init();
#endif

 lcd1602.c

#include"lcd1602.h"

sbit rs=P2^6;    //1602的数据/指令选择控制线 
sbit rw=P2^5;        //1602的读写控制线 
sbit en=P2^7;        //1602的使能控制线

void delay(uint n)       //延时函数                       
{ 
    uint x,y;  
    for(x=n;x>0;x--) 
        for(y=110;y>0;y--); 
} 

void Busy(void)
{
	uchar temp=0;
	do
	{
		rw=1;
		rs=0;
		en=0;
		_nop_();
		en=1;
		delay(1);
		en=0;
		temp=P0;
	}while(temp&0x80);
}

void Lcd_WriteCom(uchar com)  //1602写命令函数
{ 
	P0=com;  //把命令字送入P2
	en=0; 
	rs=0;            //选择指令寄存器
    rw=0;            //选择写
    _nop_();//一个机械周期       
    en=1;           //使能线电平变化,命令送入1602的8位数据口 
    delay(1);
	en=0; 
} 

void Lcd_WriteData(uchar dat)        //1602写数据函数       
{ 
    P0=dat;        //把要显示的数据送入P0
	en=0; 
	rs=1;        //选择数据寄存器 
    rw=0;        //选择写 
    _nop_();//一个机械周期   
    en=1;        //使能线电平变化,数据送入1602的8位数据口 
	delay(1);
	en=0; 
} 

void lcd_init()              //1602初始化函数       
{ 
	delay(1);
    Lcd_WriteCom(0x38);       //8位数据,双列,5*7字形       
    Busy();
	Lcd_WriteCom(0x0c);      //开启显示屏,关光标,光标不闪烁 
    Busy();
	Lcd_WriteCom(0x06);    //显示地址递增,即写一个数据后,显示位置右移一位 
    Busy();
	Lcd_WriteCom(0x01);    //清屏 
	Busy();
	Lcd_WriteCom(0x80);   //设置数据指针起点
}

main.c


#include"lcd1602.h"

/*P0口接1602的D0~D7*/ 
uchar code table[]="i love you "; 
//uchar code aabb[]="'1','2','3','4','5','6'";            //要显示的内容放入数组table

void main()            //主函数 
{   
	int i=0;  
    uchar m=0; 
    lcd_init();       //液晶初始化 
    Lcd_WriteCom(0x80);   //显示地址设为80H(即00H,)上排第一位       
    for(m=0;m<10;m++)     //将table[]中的数据依次写入1602显示 
    { 
            Lcd_WriteData(table[m]);           
            //delay(200); 
		//	Lcd_WriteCom(0x40+0x80);

    } 
//	Lcd_WriteCom(0x40+0x80);
//	for(i=0;i<10;i++)
//	{
	// Lcd_WriteDtata('l') ;
	
	
	
//	}


    while(1);        //动态停机 
}

以上代码复制直接可以用,第一次写文章有点小紧张哈,今天写了篇文章希望可以帮助到更多的小伙伴。让我们一起进步吧!。

 

最后

以上就是狂野煎蛋为你收集整理的51单片机lcd1602显示(模块)的全部内容,希望文章能够帮你解决51单片机lcd1602显示(模块)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部