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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 第八讲:1602液晶(郭天祥) -> 正文阅读

[嵌入式]第八讲:1602液晶(郭天祥)

说明:此文章仅是我学习过程中的一些记录,如有侵权,请联系我删除,文章中难免有遗漏错误之处,欢迎指出。

一、1602液晶介绍

液晶属于扩展内容,但是,很多时候都会用到,毕竟需要一个可视化的结果提供给用户,所以我们需要掌握液晶的使用。

1602型号的液晶,其中16表示1行可以显示16个字符,02表示共有2行。

类似的,还有1601、0801、0802...

还有一些型号是12864、12232这种图形液晶,例如12864就是横的有128个点,竖的有64个点,由这些点构成一个图形。而前面提到的是字符液晶,只能显示字符。这些都可以在说明文档里了解到。

注:老师说,既然已经学会液晶了,那么能用液晶就尽量不用数码管了,因为相比较而言,液晶更简单,并且更有趣。

二、通过文档学习如何操作1602液晶

1.老师发的资料里有一个中文的文档,先看液晶的引脚功能:

再看开发板的连接图:

可以看到第5引脚直接连接着地,因为这里我们仅需往液晶里写数据,并不需要读数据。所以只需操纵第4和第6引脚即可。

2.接着再往下看详细的接口说明:

之所以要确保STA7 = 0,是因为STA7是读写操作使能,只有处于允许位了,才能进行读写操作。在单片机中由于晶振的频率不是很高,因此也不需要太过考虑。主要是液晶写数据是需要一定时间的,而在使用DSP、嵌入式芯片等高速运行时,有时候上一次液晶还没显示完全,下一次显示请求就到来了,而如果不管读写操作使能,则可能导致显示数据的丢失。因此我们要通过读写检测来进行相应处理。

注:

高脉冲:由低到高到低就是一个高脉冲。

低脉冲:反过来,高低高则是一个低脉冲。

3.接着我们详细看写操作时序:

由前面的文档说明知道,RS的不同代表的是写指令以及写数据的不同。

而R/W我们已经默认接地。所以通过对RS、E的操作可以实现指令或者数据的写入。

因此我们编写两个函数,分别用来写指令以及写数据:

写指令函数如下:?

void write_com(uchar com)//写指令/命令
{
	lcdrs = 0;
	//RW = 0;//开发板已经默认接地了
	P0 = com;//com代表指令
	delay(5);
	lcden = 1;
	delay(5);
	lcden = 0;
}

写数据函数如下:

void write_data(uchar date)//写数据
{
	lcdrs = 1;
	//RW = 0;//开发板已经默认接地了
	P0 = date;//date代表数据
	delay(5);
	lcden = 1;
	delay(5);
	lcden = 0;
}

因为对实时性的要求不高,所以时序参数只用简单的delay函数替代即可,实际开发过程可能需要注意。

还有就是上面提到的读写检测,在简单的单片机程序中也可以不进行,我们仅需简单的delay函数延时,延时的时间大于液晶写的速度即可。

4.RAM地址映射图

其中每一格代表一个地址,往该地址中写数据内容,则内容会显示到该地方。而后面的第一行的10到27以及第二行的50到67不属于显示内容,但是我们可以选择先把内容写在这后面,然后进行整屏移动,把这后面的内容移动到屏幕上。

5.指令说明:

在开始前要先送指令,来设置显示模式。在中文文档中只有这一个模式,应该在详细的英文文档中会有其他的指令,实际开发中我们应尽量按照原文档来写程序。

? ? ? ??? ??

然后是显示开关及光标设置。

注意上面的N=1时的当读或写一个字符后地址指针加一,是因为后面将要提到的数据指针,我们需要设置数据指针,然后内容会显示在该数据指针指向的位置,当我们想要写一行数据时,我们需要设置多次数据指针,而如果地址指针会自动加1,我们就不用设置了,只要把数据写进行就好了。

数据指针的设置,写数据前的准备工作。

其他的一些设置,还有很多很多设置,可以在文档中找到。

三、使用1602液晶,第一行显示“I AM hong!”,第二行显示“I LIKE MCU!”

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit lcden = P3^4;
sbit lcdrs = P3^5;
sbit dula = P2^6;
sbit wela = P2^7;
void delay(uint z);
uchar num;
uchar code table[]="I AM hong!";
uchar code table1[]="I LIKE MCU!";
void write_com(uchar com)//写指令/命令
{
	lcdrs = 0;
	//RW = 0;//开发板已经默认接地了
	P0 = com;
	delay(5);
	lcden = 1;
	delay(5);
	lcden = 0;
}
void write_data(uchar date)//写数据
{
	lcdrs = 1;
	//RW = 0;//开发板已经默认接地了
	P0 = date;
	delay(5);
	lcden = 1;
	delay(5);
	lcden = 0;
}
void init()
{
	dula = 0;
	wela = 0;//关闭数码管
	lcden = 0;
	write_com(0x38);//显示模式设置
	write_com(0x0c);//显示开/关及光标设置
	write_com(0x06);//地址指针加1,N=1,S=0
	write_com(0x01);//显示清屏,因为默认有个数据在里面,屏幕有个黑块
	write_com(0x80);//数据指针设置
}
void main()
{
	init();
	for(num = 0;num < 10;num++)
	{
		write_data(table[num]);
		delay(200);
	}
	write_com(0x80+0x40);//第二行
	for(num = 0;num < 11;num++)
	{
		write_data(table1[num]);
		delay(200);
	}
	while(1);
}

void delay(uint z)  //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
{					//delay(500);大约延时500ms.
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);	
}

?

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-02-14 21:20:17  更:2022-02-14 21:22:26 
 
开发: 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/26 9:32:56-

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