IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 51单片机lcd1602显示(模块) -> 正文阅读

[嵌入式]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);        //动态停机 
}

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

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 11:39:31  更:2021-07-24 11:39:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:29:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码