液晶显示屏显示A_第1页
液晶显示屏显示A_第2页
液晶显示屏显示A_第3页
液晶显示屏显示A_第4页
液晶显示屏显示A_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1602液晶显示屏显示一、1602液晶显示屏简介液晶显示模块具有体积小、功耗低、显示内容丰富等特点,现在字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件了。本文以常见的1602CD模块为例,介绍该模块的简单使用。1602可以显示2行16个字符,有8位数据总线D0-D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。该模块也可以只用D4-D7作为四位数据分两次传送。这样的话可以节省MCU的I/O口资源。本文将使用Atmega16并采用四位数据方式来控制1602。1.1 1602封装尺寸图1.2 1602外观如下图所示1.3 1602引脚说明编号符号引

2、脚说明编号符号引脚说明1VSS电源地9D2双向数据口2VDD电源正极10D3双向数据口3VL对比度调节11D4双向数据口4RS数据/命令选择12D5双向数据口5R/W读/写选择13D6双向数据口6E模块使能端14D7双向数据口7D0双向数据口15BLK背光源地8D1双向数据口16BLA背光源正极注意事项:从该模块的正面看,引脚排列从右向左为:15脚、16脚,然后才是114脚(线路板上已经标明)。VDD:电源正极,4.55.5V,通常使用5V电压;VL:LCD对比度调节端,电压调节范围为05V。接正电源时对比度最弱,接地电源时对比度最高,但对比度过高时会产生“鬼影”,因此通常使用一个10K的电位

3、器来调整对比度,或者直接串接一个电阻到地;RS:MCU写入数据或者指令选择端。MCU要写入指令时,使RS为低电平;MCU要写入数据时,使RS为高电平;R/W:读写控制端。R/W为高电平时,读取数据;R/W为低电平时,写入数据;E:LCD模块使能信号控制端。写数据时,需要下降沿触发模块。D0D7:8位数据总线,三态双向。如果MCU的I/O口资源紧张的话,该模块也可以只使用4位数据线D4D7接口传送数据。本充电器就是采用4位数据传送方式;BLA: LED背光正极。需要背光时,BLA串接一个限流电阻接VDD,BLK接地,实测该模块的背光电流为50mA左右;BLK: LED背光地端。1.4 1602操

4、作时序(1)读操作时序(2)写操作时序(3)基本操作时序二、实例2.1 proteus仿真2.2 程序*LCD.h文件- LCD引脚定义 1-GND  2-VCC 3-VO 4-RS 5-RW 6-EN 7到14-D0-D7 15-背景灯+ 16-背景灯- -*/ #include <iom16v.h> #include <macros.h> /*- 下面是AVR与LCD连接信息 PA2 ->RS PA3 ->EN 地  ->RW PA4 ->D4 PA5 

5、->D5 PA6 ->D6 PA7 ->D7 要使用本驱动,改变下面配置信息即可 -*/ #define LCD_EN_PORT    PORTA   /以下2个要设为同一个口 #define LCD_EN_DDR     DDRA #define LCD_RS_PORT    PORTA   /以下2个要设为同一个口 #define

6、60;LCD_RS_DDR     DDRA #define LCD_DATA_PORT  PORTA   /以下3个要设为同一个口 #define LCD_DATA_DDR   DDRA    /一定要用高4位 #define LCD_DATA_PIN   PINA #define LCD_RS     &

7、#160;   (1<<PA2) /0x04   portA2       out #define LCD_EN         (1<<PA3) /0x08   portA3       out #define L

8、CD_DATA       (1<<PA4)|(1<<PA5)|(1<<PA6)|(1<<PA7) /0xf0   portA4/5/6/7 out /*- 函数说明 -*/ void LCD_init(void); void LCD_en_write(void); void LCD_write_command(unsigned  char command) 

9、 void LCD_write_data(unsigned char data); void LCD_set_xy (unsigned char x, unsigned char y); void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s); void LCD_write_char(unsigned char 

10、;X,unsigned char Y,unsigned char data); void delay_nus(unsigned int n); void delay_nms(unsigned int n); = #include "LCD.h" void LCD_init(void)         /液晶初始化   LCD_DATA_DDR|=L

11、CD_DATA;   /数据口方向为输出   LCD_EN_DDR|=LCD_EN;       /设置EN方向为输出   LCD_RS_DDR|=LCD_RS;       /设置RS方向为输出   LCD_write_command(0x28);    LCD_en_write();   delay_nus(40)

12、;   LCD_write_command(0x28);  /4位显示   LCD_write_command(0x0c);  /显示开   LCD_write_command(0x01);  /清屏   delay_nms(2); void LCD_en_write(void)  /液晶使能   LCD_EN_PORT|=LCD_EN;   delay_nus(1);  &#

13、160;LCD_EN_PORT&=LCD_EN; void LCD_write_command(unsigned char command) /写指令   delay_nus(16);   LCD_RS_PORT&=LCD_RS;        /RS=0   LCD_DATA_PORT&=0X0f;        

14、; /清高四位   LCD_DATA_PORT|=command&0xf0; /写高四位   LCD_en_write();   command=command<<4;          /低四位移到高四位   LCD_DATA_PORT&=0x0f;         /清高四位

15、  LCD_DATA_PORT|=command&0xf0; /写低四位   LCD_en_write();    void LCD_write_data(unsigned char data) /写数据   delay_nus(16);   LCD_RS_PORT|=LCD_RS;       /RS=1   LCD_DATA_PORT&=

16、0X0f;       /清高四位   LCD_DATA_PORT|=data&0xf0;  /写高四位   LCD_en_write();   data=data<<4;               /低四位移到高四位   LCD_DATA_PORT&

17、;=0X0f;        /清高四位   LCD_DATA_PORT|=data&0xf0;   /写低四位   LCD_en_write(); void LCD_set_xy( unsigned char x, unsigned char y )  /写地址函数     unsigned

18、0;char address;     if (y = 0) address = 0x80 + x;     else   address = 0xc0 + x;     LCD_write_command( address);    void LCD_write_string(

19、unsigned char X,unsigned char Y,unsigned char *s) /列x=015,行y=0,1     LCD_set_xy( X, Y ); /写地址         while (*s)  / 写显示字符         

20、   LCD_write_data( *s );       s +;             void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data) /列x=015,行y=0,1   LCD

21、_set_xy( X, Y ); /写地址   LCD_write_data( data);    = void delay_1us(void)                 /1us延时函数       asm("nop");    v

22、oid delay_nus(unsigned int n)       /N us延时函数       unsigned int i=0;    for (i=0;i<n;i+)    delay_1us();       void delay_1ms(void)  

23、60;              /1ms延时函数       unsigned int i;    for (i=0;i<1140;i+);       void delay_nms(unsigned int n)       /N ms延时函数       unsigned int i=0;  &#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论