微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > lcd1602显示程序

lcd1602显示程序

时间:09-18 来源:电子发烧友网 点击:

  液晶显示简介

  ①液晶显示原理

  液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。

  ②液晶显示器的分类

  液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(StaTIc)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(AcTIve Matrix)三种。

  ③液晶显示器各种图形的显示原理:

  线段的显示

  点阵图形式液晶由M&TImes;N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16&TImes;8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。

  字符的显示

  用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为"1",其它的为"0",为"1"的点亮,为"0"的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。

  汉字的显示

  汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5……右边为2、4、6……根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节……直到32B显示完就可以LCD上得到一个完整汉字。

  1602LCD主要技术参数:

  显示容量:16×2个字符

  芯片工作电压:4.5—5.5V

  工作电流:2.0mA(5.0V)

  模块最佳工作电压:5.0V

  字符尺寸:2.95×4.35(W×H)mm

  引脚说明

  第1脚:VSS为地电源。

  第2脚:VDD接5V正电源。

  第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生"鬼影",使用时可以通过一个10K的电位器调整对比度。
  第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
  第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。

  第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
  第7~14脚:D0~D7为8位双向数据线。
  第15脚:背光源正极。
  第16脚:背光源负极。

  用51单片机编写lcd1602显示程序

  #include 《reg51.h》

  #define uchar unsigned char

  #define uint unsigned int

  sbit LCD_E=P3^5; //定义接口

  sbit LCD_RW=P3^6;

  sbit LCD_RS=P3^7;

  #define LCD_Data P1 //数据接口

  uchar up[]={"IvU,hupeixian"};

  uchar code down[]={"_by fu "}

  /*************************延时函数*****************************/

  void Delay_ms(uint time)

  {

  uint i,j;

  for(i = 0;i 《 time;i ++)

  for(j = 0;j 《 930;j ++);

  }

  /**********************检测状态************************************/

  uchar LCD_ReadStatus(void)

  {

  LCD_Data = 0xFF;

  LCD_RS = 0;

  LCD_RW = 1;

  LCD_E = 1;

  LCD_E = 1;

  LCD_E = 0;

  while (LCD_Data & 0x80); //检测忙信号

  return(LCD_Data);

  }

/************************写数

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top