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显示

1.原理:

?1602 液晶也叫 1602 字符型液晶,它能显示 2 行字符信息,每行又能显示 16 个字符。
?它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由若 干个 5x7 或者?
?5x10 的点阵字符位组成,每个点阵字符位都可以用显示一个字符, 每位之间有一个点
?距的间隔,每行之间也有间隔,起到了字符间距和行间距的作 用,正因为如此,所以它
?不能很好的显示图片

? ?(1)引脚:

(2)其地址 和屏幕的对应关系如下:
? ? ?? ?
要显示字符时 要先输入显示字符地址,也就是告诉模块在哪里显示字符,例如第二行第一个字 符的地址是 40H,那么是否直接写入 40H 就可以将光标定位在第二行第一个字
符的位置呢?这样不行,因为写入显示地址时要求最高位 D7 恒定为高电平 1
所以实际写入的数据应该是 01000000B(40H)+10000000B(80H)=11000000B(C0H)

也就是说:第一行地址为:0x40? ?第二行地址为:0xC0

(3)常用指令:

? ?清屏置零:0x01

1.清除液晶显示器,即将 DDRAM 的内容全部填入"空白"的 ASCII 码 20H;
2.光标归位,即将光标撤回液晶显示屏的左上方;
3.将地址计数器(AC)的值设为 0。

?

? 模式设置指令 :

功能:设定每次写入 1 位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。
I/D:0=写入新数据后光标左移? ? ? ? 1=写入新数据后光标右移
S:? 0=写入新数据后显示屏不移动? ?1=写入新数据后显示屏整体右移 1 个字符

?显示开关控制指令

功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。
D:0=显示功能关? ?1=显示功能开
C:0=无光标? ? 1=有光标
B:0=光标闪烁 1=光标不闪

功能设定指令

功能: 设定数据总线位数、显示的行数及字型。
DL:0=数据总线为 4 位? ?1=数据总线为 8 位
N:? 0=显示 1 行? ? ? ? ? ? ? 1=显示 2 行
F:? 0=5×7 点阵/每字符? ?1=5×10 点阵/每字符

(4) 写指令与写数据:

① 当要写指令字,设置 LCD1602 的工作方式时:需要把 RS 置为低电平 RW
? ? 置为低电平 ,然后将 数据送到数据口 D0~D7 ,最后 E 引脚一个高脉冲 将数据写入。
/*写指令函数*/
void write_con(u8 con){
? ? ? P0=con; ? ? ? ? ? //送出指令
?? ? ?RS=0;RW=0;EN=1; ?//写指令时序
?? ? ?delay(200);
?? ? ?EN=0;
}

?
② 当要写入数据字,在 1602 上实现显示时:需要把 RS 置为高电平 RW 置
为低电平 ,然后将 数据送到数据口 D0~D7 ,最后 E 引脚一个高脉冲 将数据写入
/*写数据函数*/
void write_dat(u8 dat){
? ? ?P0=dat;?? ??? ? ? ? //送出数据
?? ? RS=1;RW=0;EN=1;//写数据时序
?? ? delay(200);
?? ? EN=0;
}

?2.电路原理图(普中A2开发板):

?3.程序说明:

? ?利用LCD1602显示"Hello World"字符

?4.源程序:

#include <reg51.h>

typedef unsigned char u8;
typedef unsigned int u16;

sbit RW=P2^5;
sbit RS=P2^6;
sbit EN=P2^7;
u8 code table[15]="Hello World";

/*延时函数*/
void delay(u16 i)
{
   while(i--);

}
/*写指令函数*/
void write_con(u8 con){
    P0=con;           //送出指令
	  RS=0;RW=0;EN=1;  //写指令时序
	  delay(200);
	  EN=0;
}
/*写数据函数*/
void write_dat(u8 dat){
   P0=dat;		     //送出数据
	 RS=1;RW=0;EN=1;//写数据时序
	 delay(200);
	 EN=0;
}
/*LCD初始化函数*/
void LcdInit(){
   write_con(0x01);//清屏
	 write_con(0x38);//设置16*2显示
	 write_con(0x0c);//开显示
	 write_con(0x06);//写入数据时光标右移1位
}

/*LCD显示函数*/
void LcdDisplay(u8  table[]){
    u8 i=0;
	write_con(0x80);   //起点为第一行
	while(table[i]!='\0'){
	   write_dat(table[i]);
	   delay(100);
	   i++;
	 }
	/*
	  i=0;
	write_con(0xc0);  //起点为第二行
	while(table[i]!='\0'){
	   write_dat(table[i]);
	   delay(100);
	   i++;
	 }
	 i=0;
	 */
}

/*主函数*/
void main()
{
   LcdInit();
	 while(1)
	 {
   LcdDisplay(table);
	 }
}

5.开发板运行结果:

?


以上就是51单片机的LCD1602实验了?

想要了解更多的单片机实验,请查看我的51单片机专栏

?

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

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