概述
假期自己学习了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显示(模块)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复