历史上的今天
返回首页

历史上的今天

今天是:2024年10月20日(星期日)

正在发生

2021年10月20日 | 【自学51单片机】12 --- 1602液晶初步认识

2021-10-20 来源:eefocus

1、1602液晶硬件接口介绍

1602液晶技术参数

说明:(1) 工作电流:在5v工作电压下液晶的工作电流为2mA,仅仅指液晶,不包括背光。


1602液晶接口原理图及引脚功能

  • 接口原理图

引脚功能

说明:(1) 引脚3:液晶显示偏压信号。用来调整显示黑点与不显示黑点的对比度。(2) 4引脚:数据命令选择引脚。置高电平1,为读写数据,置低电平0,为读写命令。(3) 5引脚:读写选择引脚。置高电平1,为读数据或命令,置低电平0,为写数据或命令。(4) 6引脚:使能信号引脚。高电平有效,低电平无效。(5) 7~14引脚:8个数据引脚。因为总电流不大,直接接到PO口上,不用通过74HC245。


2、1602的读写时序介绍

液晶内部自带80字节的显示RAM,用来存储发送的数据,内部RAM如下图

说明:(1) 1603字符液晶是显示字符的,字符要跟ASCII码字符表对应,比如液晶显示字符’1’, 就要向对应地址发送数据字符‘1’或十六进制31,或十进制49。(2) 第一行的地址0x00 ~ 0x27,第二行的地址0x40 ~ 0x67。第一行的0x00 ~ 0x0F与液晶第一行16个字符显示地址对应。第二行的0x40 ~ 0x4F与液晶第二行16个字符显示地址对应.每行多出来的地址用于显示移动字幕。


1602液晶基本操作有四个时序,理解,运用1602液晶查阅即可


读状态:RS = L(0), R/W = H(1),E= H(1);

单片机读1602液晶的状态,是通过读取液晶里的状态字字节内容,来了解液晶内部情况,液晶状态字字节如下表12-5,

说明:(1) 状态字节有八位,最高位表示当前液晶是否在 ‘忙’ (给液晶写数据或命令,液晶需先保存到缓存,然后再写到液晶内部寄存器或RAM中,这个需要一定时间),1表示液晶在忙,在忙时禁止读者读写数据或命令操作,0则可以。低七位表示当前数据指针的位置,一般低七位很少用到。(2) 单片机读外设状态时,需要保证接收状态信息的引脚为高电平。所以在读取液晶状态时,P0口要先保证为高电平。(3) 因其他外设和液晶都共用P0口总线,若读完液晶状态仍保持液晶E使能信号引脚为高电平,则液晶会继续输出状态值,因状态值在P0口输入,将会干扰到其他外设的P0口总线的数据,所以读完液晶状态要拉低E使能信号引脚来释放P0总线。

以上说明,在单片机读取液晶状态程序部分体现,见下程序。


#define LCD1602_DB  P0

sbit LCD1602_RS = P1^0;//引脚声明

sbit LCD1602_RW = P1^1;

sbit LCD1602_E = P1^5;


//等待液晶准备好

void  LcdWaitReady()

{

unsigned char  sta;


LCD1602_DB = 0xFF;

LCD1602_RS = 0;

LCD1602_RW = 1;


do{

LCD1602_E = 1;

sta = LCD1602_DB; //读取状态字

LCD1602_E = 0;//bit7等于1表示液晶正在忙,重复检测直到其等于0为止

}while(sta & 0x80);

}


读数据:RS = H(1),RW = H(1),E = H(1), 读数据不常用。


写指令:RS = L(0),RW = L(0),D0 ~ D7 = 指令码,E = 高脉冲。

说明:(1) E = 高电平:E使能引脚先从低到高,再从高到低,形成一个高脉冲。


写数据:RS = H(1),RW = L(0),D0 ~ D7 = 指令码,E = 高脉冲

说明:(1) 液晶内部有一个指针,它指向哪里,我们写的数据就会送到相应的那个地址。


3、1602液晶的指令介绍

单片机给液晶写指令有5种设置,理解,查阅1602液晶手册


显示模式设置

说明:固定0x38即可


显示开/关以及光标设置

数据指针及移动设置

清屏指令

RAM地址设置指令

说明:该指令最高位为1,低七位为RAM地址,十六进制0x80+地址码,在程序中用 (0x80 | 地址码)来表示该指令。在读写程序中先设置地址,然后进行数据的读写操作。


4、1602液晶简单示例

//160LCD显示指定字符

#include


#define Lcd1602_DB P0

sbit Lcd1602_RS = P1^0;

sbit Lcd1602_RW = P1^1;

sbit Lcd1602_E = P1^5;


void InitLcd1602();

void Lcdwritecmd(unsigned char cmd);

void LcdWaitReady();

void LcdShowstr(unsigned char x, unsigned char y, unsigned char *str);

void Lcdcursor(unsigned char x, unsigned char y);

void LcdWritedat( unsigned char str);


void main()

{

InitLcd1602();

LcdShowstr(5, 0, "L Z Y");

LcdShowstr(3, 1, "come on!!!");

while(1);

}

//初始化1602液晶

void InitLcd1602()

{

Lcdwritecmd(0x38);//16*2显示,5*7点阵,8位数据口

Lcdwritecmd(0x0C); //显示器开,光标关闭

Lcdwritecmd(0x06);//文字不动,地址自动加+1

Lcdwritecmd(0x01);//清屏

}

 //向LCd1602写入一个一字节命令,cmd为待写入命令值

void Lcdwritecmd(unsigned char cmd)

{

LcdWaitReady();

Lcd1602_RS = 0;

Lcd1602_RW = 0;

Lcd1602_DB = cmd;

Lcd1602_E = 1;

Lcd1602_E = 0;

}

//等待液晶准备好

void LcdWaitReady()

{

unsigned char sta;

Lcd1602_DB = 0xFF;

Lcd1602_RS = 0;

Lcd1602_RW = 1;

do{

   Lcd1602_E = 1;

   sta = Lcd1602_DB;//读取状态字

   Lcd1602_E = 0;

}while(sta & 0x80);//bit7等于1表示液晶正忙,重复检测直到其等于0为止

}

//在液晶上显示字符串,(x,y)为对应屏幕上的起始坐标,str为字符指针

void LcdShowstr(unsigned char x, unsigned char y, unsigned char *str)

{

Lcdcursor(x, y);//设置起始地址

while(*str != '')//连续写入字符串数据,直到检测到结束符

{

LcdWritedat(*str++);//先取str指向的数据,然后str自加1

}

}

//设置显示RAM起始地址,亦即光标位置,(x,y)为对应屏幕上的字符坐标

void Lcdcursor(unsigned char x, unsigned char y)

{

  unsigned char addr;

  if(y == 0)//由输入的屏幕坐标计算显示RAM的地址

  {

  addr = 0x00 + x; //第一行字符坐标地址从0x00起始

  }

  else  

  {

  addr = 0x40 +  x;//第二行字符地址从0x40起始

  }

  Lcdwritecmd(addr | 0x80);//设置RAM地址

}

//向液晶写入一个一字节数据,dat为待写入数据值

void LcdWritedat(unsigned char str)

{

LcdWaitReady();

Lcd1602_RS = 1;

Lcd1602_RW = 0;

Lcd1602_E = 1;

Lcd1602_DB = str;

Lcd1602_E = 0;

}


说明:(1) 读写数据或指令程序,每次都必须进行 '忙‘ 判断。(2) 1602使能引脚E高电平时,如果不使用液晶,会影响P0进而影响其他外设。所以在程序开始写一句Lcd1602_DB = 0;可以避免影响其他外设,上面程序没有该语句,是因KST-51开发板上该引脚有下拉电阻,下拉电阻可以保证上电后该引脚默认为低电平。

推荐阅读

史海拾趣

AMI Semiconductor公司的发展小趣事

AMI Semiconductor,全称为Analog Mixed-Signal Interface Semiconductor,是一家在模拟、混合信号和接口领域提供集成电路解决方案的公司。以下是关于AMI Semiconductor公司发展的五个相关故事:

  1. 公司成立与初期发展:AMI Semiconductor公司成立于1966年,总部位于美国爱达荷州普克斯。公司最初专注于生产模拟集成电路和混合信号集成电路,为各种应用领域提供解决方案。在成立初期,AMI Semiconductor致力于技术创新和产品质量,赢得了客户的信任和认可。

  2. 技术创新和产品多样化:AMI Semiconductor不断进行技术创新,推出了一系列高性能、高可靠性的集成电路产品。公司的产品涵盖了模拟信号处理、数据转换、传感器接口、通信接口等多个领域,广泛应用于汽车电子、工业自动化、医疗设备等行业。

  3. 公司并购与扩张:为了拓展业务和加强市场竞争力,AMI Semiconductor进行了一系列并购和合并。这些并购使得公司能够快速扩大规模、拓展产品线,并进入新的市场领域。例如,2008年,AMI Semiconductor被ON Semiconductor收购,成为其子公司,加强了在模拟和混合信号领域的领先地位。

  4. 全球布局与市场拓展:AMI Semiconductor在全球范围内建立了广泛的销售网络和生产基地,实现了全球化发展战略。公司在美国、欧洲、亚洲等地设有研发中心、生产基地和销售办事处,为客户提供及时的技术支持和服务。这种全球布局有助于拓展市场份额,满足不同地区客户的需求。

  5. 持续创新与发展:AMI Semiconductor持续致力于技术创新和产品研发,以满足不断变化的市场需求。公司不断投入资金和人力资源,加强与客户的合作,开发定制化的解决方案,提升产品性能和竞争力。AMI Semiconductor不断追求卓越,致力于成为行业领先的模拟和混合信号集成电路供应商。

这些故事展示了AMI Semiconductor公司从成立初期到如今在技术创新、产品多样化、并购与扩张、全球布局和持续发展等方面取得的重要进展。

骅讯(Cmedia)公司的发展小趣事

骅讯(Cmedia)公司成立于1991年,起初是一家专注于音频芯片设计的公司。在成立初期,骅讯就凭借其PCI多通道芯片在市场上取得了初步的成功。这种芯片为电脑提供了更为丰富的音频体验,从而帮助骅讯在音频芯片设计领域崭露头角。

Dynawave Incorporated公司的发展小趣事

随着技术的成熟,Dynawave开始寻求市场拓展。公司高层决定,将目标市场锁定在智能家居和物联网领域。他们与多家知名厂商合作,将自己的无线传输技术应用到各类智能设备中。通过不断的技术优化和市场推广,Dynawave的产品逐渐得到了市场的认可,销售额稳步增长。

Hittite Microwave(ADI)公司的发展小趣事

随着市场的扩大,Dynawave面临着产品质量管理的挑战。为了确保产品的稳定性和可靠性,公司决定引入国际先进的质量管理体系。他们聘请了专业的质量管理团队,对生产流程进行严格的监控和把控。同时,公司还加大了对员工的培训力度,提高了员工的质量意识。这些措施有效地提升了产品的质量水平,增强了客户的信任度。

Densitron公司的发展小趣事

为了扩大市场份额,Densitron公司制定了一系列市场拓展策略。公司首先分析了市场需求和竞争态势,确定了目标市场。然后,通过加强品牌宣传、优化销售渠道、提高客户服务质量等手段,不断提升品牌知名度和客户满意度。此外,公司还积极开展国际合作,与全球知名电子企业建立了紧密的合作关系,共同开拓市场。这些策略的实施,使得Densitron公司的市场份额逐年上升,成为行业内的领军企业。

Ferroxcube公司的发展小趣事

在全球经济一体化的背景下,Ferroxcube公司意识到拓展国际市场的重要性。为了进一步扩大业务范围,公司决定在欧洲、亚洲和北美等地设立分支机构,以更好地服务当地客户。

通过在各地设立销售和服务中心,Ferroxcube成功地打入了多个国际市场。公司的产品和服务得到了越来越多国际客户的认可和赞赏。同时,公司也积极与当地的研究机构和高校合作,共同推动磁性元件技术的创新和发展。

这些国际市场的成功拓展不仅为Ferroxcube带来了更多的业务机会和收入来源,还进一步提升了公司在全球电子行业中的地位和影响力。如今,Ferroxcube已经成为了全球知名的磁性元件供应商之一,为电子行业的发展做出了重要贡献。

问答坊 | AI 解惑

一款仪表的电源电路希望大家能用到

一款仪表的电源电路希望大家能用到…

查看全部问答>

方波无刷电动机的倍频PWM控制方法

方波无刷电动机的倍频PWM控制方法…

查看全部问答>

温度控制器电路工作原理

温度控制器电路工作原理:本例介绍的间歇控制器,能自动控制电热器、加湿器、单相交流电动机等用电设各,使之处于间歇工作状态。 该间歇控制器电路由电源电路、定时器和控制执行电路组成,如图所示。   元器件选择   R1~R4、R6和R7均选用1 ...…

查看全部问答>

window mobile中 static text控件透明问题

  在非windows mobile 下一般通过修改消息映射函数WM_CTLCOLOR,返回一个HOLLOW_BRUSH实现背景透明,为何在window mobile下死活不行。    Static text空间放在对话框上,对话框上通过StrchBit贴上了背景图,在非windows mobil ...…

查看全部问答>

VS2005支持WinCE4.2吗?

VS2005支持WinCE4.2吗?是不是VS2005环境下开发的嵌入式软件不能在WinCE4.2下运行的呀?…

查看全部问答>

可用的Windows CE下的java虚拟机

请问,目前在Windows CE中开发java程序比较好用的JVM是哪个? 我在网上找了一下,都说IBM的J9VM可以,但是去IBM官网找不到可以下载的。在WebSphere Everyplace Micro Environment中有,但是这款软件一直找不到哪里可以下载,是不是IBM已经不支持了 ...…

查看全部问答>

ICL7106系列有高手相助吗?

ICL7106说明书,全英文,头都大了,有熟悉他的高手请指教1、2。…

查看全部问答>

PIC16F882配置位的问题

最近要用PIC16F882做一个项目,再看手册的时候发现它的配置位有两个寄存器CONFIG1和CONFIG2,那我是否要写成这样: ——CONFIG1(0xXXXX); ——CONFIG2(0xXXXX); 我是用C写的,请各位解答一下…

查看全部问答>

下午参加完STM的深圳研讨会回来

比较感兴趣的就2点。 1、下一代的STM32F-2系列的mcu明年可以量产,达到120MHz,号称Cortex-M3核极速芯片(说Cortex-M3核不可能做得比这个快了。。。)。管脚跟现在的STM32F1系列兼容。 2、RF的EEPROM比较有意思。。。…

查看全部问答>