| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 1602液晶显示屏工作原理引脚电路图51单片机 -> 正文阅读 |
|
[嵌入式]1602液晶显示屏工作原理引脚电路图51单片机 |
这一节讲解1602液晶屏的操作,搭建的proteus仿真图如下图。 . 1602液晶屏有16只引脚,其含义为: VDD引脚是电源脚,1602液晶屏最佳工作电压是5V; VO引脚用于调整1602显示的对比度,一般会外接电位器用以调整偏压信号(该引脚电压为0时对比度最高); RS引脚为数据/命令选择端,该引脚高电平时1602操作的是数据,而低电平时1602操作的是命令。数据就是我们要让1602液晶屏显示的具体内容,而命令就是对1602的设置(比如光标是否闪烁等); R/W引脚为读写选择端,该此脚高电平可对1602进行读数据操作,而低电平时进行写数据操作。由于实际应用1602时我们基本上都是对1602进行写操作,所以很多板子都是直接将该引脚拉低。若需要对1602进行读操作,在实际设计PCB时可以接一个排针,通过跳帽来选择高低电平; E引脚是使能信号,跟1602的读写操作时序有关,产生一个高脉冲有效; D0~D7引脚是8位并行数据口,使得对1602的数据读写大为方便。 . 1602液晶屏是字符型液晶屏,其内置含128个字符的ASCII字符集字库,只能显示ASCII码字符,每行显示16个字符,总共能显示两行。如实物图所示,第一行第一列显示了“A”,那如何写程序才能做到呢?首先我们得知道1602液晶屏内部带有80B的RAM缓冲区,其中第一行的地址从00H0FH,第二行的地址从40H4FH都是能显示的,若超出地址范围则必须通过移屏指令,移入到00H0FH或者40H4FH范围内才能显示,其次1602液晶屏内部的地址指针从80H开始。回到刚才的问题,我们需要设置数据地址指针为(80H+00H),并把字符‘A’写入1602液晶屏,那么1602液晶屏的第一行第一列就显示字符A了。 . 说了这么多,那么我们怎样才能将“数据”或者“指令”写入1602呢?这里就需要理解1602液晶屏的时序了。时序,通俗的说就是芯片设定好的引脚电平状态和时间的关系,只有根据这个关系芯片才能完成制定的工作。实际操作中一般只对1602进行写操作,写操作的时序图如下所示。 . 时序图看起来很复杂,其实我们只要抓住关键的几个点就可以了。根据时序图, 第一步:确定是写指令还是写数据:如果我们要向1602写命令,那么RS引脚拉低;若向1602写数据,那么RS引脚拉高; 第二步:将RW引脚拉低(写操作,若是读操作RW引脚拉高); 第三步:DB0~DB7的数据才是有效数据“Valid Data”,此时我们把数据或者指令赋值给DB0~DB7; 第四步:E引脚给一个高脉冲,持续时间tpw最小值为150ns,然后E引脚再次拉低。 通过上述四个步骤就可以对1602进行一次写操作了。由于1602时序图时间是ns级,而AT89C52单片机指令周期是us级,所以即使不在程序里加延时程序,也应该可以很好的配合1602的时序要求,不过为了液晶显示的稳定,最好加上短延时,大家可以在仿真的时候试试不同值的延时。 好了,到这里就可以开始写程序了,让1602液晶屏第一行显示“Toutiao:”,第二行显示“di ya dian qi”。 uchar code DISPLAY1[] = “Tou tiao:”; //1602液晶屏第一行显示的内容 uchar code DISPLAY2[] = “di ya dian qi”; //1602液晶屏第二行显示的内容 sbit lcd_RS = P2^0; sbit lcd_RW = P2^1; sbit lcd_EN = P2^2; sfr DBPort = 0x80; //1602液晶屏8位并行口D0~D7连接单片机P0口 void delayxms(uint xms) { uint i,j = 0; for(i = xms;i > 0;i–) for(j = 110;j > 0;j–); } //LCD_Write函数的代码,大家要对照着时序图看就明白了。 void LCD_Write(bit style, unsigned char input) { lcd_RS = style;//RS高电平表示写数据,低电平表示写命令 lcd_RW = 0; //RW低电平表示写操作 nop(); //延时一个机器周期 DBPort = input; //向P0口赋值,也就是向1602的D0~D7这8位并行口赋值 nop(); lcd_EN = 1; //E引脚拉高 nop(); lcd_EN = 0; //延时之后E引脚再拉低,表示给E引脚一个高脉冲 delayxms(1);//这个延时很关键,保证向1602不断的写数据时E引脚能实现一个高脉冲 } void LCD_Initial() { lcd_EN = 0;//初始化时E引脚拉低,为后续给E引脚高脉冲做好准备 LCD_Write(LCD_COMMAND,0x38); //设置16*2显示 LCD_Write(LCD_COMMAND,0x0C); //设置开显示,光标不显示且不闪烁 LCD_Write(LCD_COMMAND,0x06); //写一个字符后地址指针+1 LCD_Write(LCD_COMMAND,0x01); //显示清零,数据地址指针清零 } void main(void) { uint index1,index2 = 0;//第一行和第二行要显示的内容的序号 LCD_Initial(); LCD_Write(LCD_COMMAND,0x80);//光标定位在第一行第一列 for(index1 = 0;index1 < 9;index1++) { LCD_Write(LCD_DATA,DISPLAY1[index1]);//依次写入“Toutiao:” delayxms(1);//每写完一个字符后延时,使得1602显示稳定 } LCD_Write(LCD_COMMAND,0x80+0x40);//光标定位在第二行第一列 for(index2 = 0;index2 < 13;index2++) { LCD_Write(LCD_DATA,DISPLAY2[index2]);//依次写入““di ya dian qi” delayxms(1); } while(1);//程序死循环,1602静态显示 } 最终的效果如图所示,下一节继续讲下1602的初始化设置方面的内容,以及移入显示的效果。 http://www.buffalotone.com/?p=3163 复制上面链接到浏览器,即可打开下载 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 22:43:40- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |