1602液晶显示屏显示A.docx

上传人:b****5 文档编号:29801195 上传时间:2023-07-27 格式:DOCX 页数:10 大小:240.82KB
下载 相关 举报
1602液晶显示屏显示A.docx_第1页
第1页 / 共10页
1602液晶显示屏显示A.docx_第2页
第2页 / 共10页
1602液晶显示屏显示A.docx_第3页
第3页 / 共10页
1602液晶显示屏显示A.docx_第4页
第4页 / 共10页
1602液晶显示屏显示A.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

1602液晶显示屏显示A.docx

《1602液晶显示屏显示A.docx》由会员分享,可在线阅读,更多相关《1602液晶显示屏显示A.docx(10页珍藏版)》请在冰豆网上搜索。

1602液晶显示屏显示A.docx

1602液晶显示屏显示A

1602液晶显示屏显示

一、1602液晶显示屏简介

液晶显示模块具有体积小、功耗低、显示内容丰富等特点,现在字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件了。

本文以常见的1602CD模块为例,介绍该模块的简单使用。

1602可以显示2行16个字符,有8位数据总线D0-D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。

该模块也可以只用D4-D7作为四位数据分两次传送。

这样的话可以节省MCU的I/O口资源。

本文将使用Atmega16并采用四位数据方式来控制1602。

1.11602封装尺寸图

1.21602外观如下图所示

1.31602引脚说明

编号

符号

引脚说明

编号

符号

引脚说明

1

VSS

电源地

9

D2

双向数据口

2

VDD

电源正极

10

D3

双向数据口

3

VL

对比度调节

11

D4

双向数据口

4

RS

数据/命令选择

12

D5

双向数据口

5

R/W

读/写选择

13

D6

双向数据口

6

E

模块使能端

14

D7

双向数据口

7

D0

双向数据口

15

BLK

背光源地

8

D1

双向数据口

16

BLA

背光源正极

注意事项:

从该模块的正面看,引脚排列从右向左为:

15脚、16脚,然后才是1-14脚(线路板上已经标明)。

VDD:

电源正极,4.5-5.5V,通常使用5V电压;

VL:

LCD对比度调节端,电压调节范围为0-5V。

接正电源时对比度最弱,接地电源时对比度最高,但对比度过高时会产生“鬼影”,因此通常使用一个10K的电位器来调整对比度,或者直接串接一个电阻到地;

RS:

MCU写入数据或者指令选择端。

MCU要写入指令时,使RS为低电平;MCU要写入数据时,使RS为高电平;

R/W:

读写控制端。

R/W为高电平时,读取数据;R/W为低电平时,写入数据;

E:

LCD模块使能信号控制端。

写数据时,需要下降沿触发模块。

D0-D7:

8位数据总线,三态双向。

如果MCU的I/O口资源紧张的话,该模块也可以只使用4位数据线D4-D7接口传送数据。

本充电器就是采用4位数据传送方式;

BLA:

LED背光正极。

需要背光时,BLA串接一个限流电阻接VDD,BLK接地,实测该模块的背光电流为50mA左右;

BLK:

LED背光地端。

1.41602操作时序

(1)读操作时序

(2)写操作时序

(3)基本操作时序

二、实例

2.1proteus仿真

2.2程序

*LCD.h文件-------------------------------------------------------------

LCD引脚定义

1---GND 

2---VCC

3---VO

4---RS

5---RW

6---EN

7到14--D0-D7

15--背景灯+

16--背景灯-

-----------------------------------------------------------------*/

#include 

#include 

/*---------------------------------------------------------------

下面是AVR与LCD连接信息

PA2 ->RS

PA3 ->EN

地  ->RW

PA4 ->D4

PA5 ->D5

PA6 ->D6

PA7 ->D7

要使用本驱动,改变下面配置信息即可

-----------------------------------------------------------------*/

#define LCD_EN_PORT    PORTA   //以下2个要设为同一个口

#define LCD_EN_DDR     DDRA

#define LCD_RS_PORT    PORTA   //以下2个要设为同一个口

#define LCD_RS_DDR     DDRA

#define LCD_DATA_PORT  PORTA   //以下3个要设为同一个口

#define LCD_DATA_DDR   DDRA    //一定要用高4位

#define LCD_DATA_PIN   PINA

#define LCD_RS         (1<

#define LCD_EN         (1<

#define LCD_DATA       ((1<

/*------------------------------------------------------------------------------

函数说明

------------------------------------------------------------------------------*/

void LCD_init(void);

void LCD_en_write(void);

void LCD_write_command(unsigned  char command) ;

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 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|=LCD_DATA;   //数据口方向为输出

  LCD_EN_DDR|=LCD_EN;       //设置EN方向为输出

  LCD_RS_DDR|=LCD_RS;       //设置RS方向为输出

  LCD_write_command(0x28); 

  LCD_en_write();

  delay_nus(40);

  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);

  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;         //清高四位

  LCD_DATA_PORT|=command&0xf0; //写高四位

  LCD_en_write();

  command=command<<4;          //低四位移到高四位

  LCD_DATA_PORT&=0x0f;         //清高四位

  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&=0X0f;       //清高四位

  LCD_DATA_PORT|=data&0xf0;  //写高四位

  LCD_en_write();

  data=data<<4;               //低四位移到高四位

  LCD_DATA_PORT&=0X0f;        //清高四位

  LCD_DATA_PORT|=data&0xf0;   //写低四位

  LCD_en_write();

}

void LCD_set_xy( unsigned char x, unsigned char y )  //写地址函数

{

    unsigned char address;

    if (y == 0) address = 0x80 + x;

    else   address = 0xc0 + x;

    LCD_write_command( address);

}

  

void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) //列x=0~15,行y=0,1

{

    LCD_set_xy( X, Y ); //写地址    

    while (*s)  // 写显示字符

    {

      LCD_write_data( *s );

      s ++;

    }

      

}

void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data) //列x=0~15,行y=0,1

{

  LCD_set_xy( X, Y ); //写地址

  LCD_write_data( data);

  

}

=======================================================================

void delay_1us(void)                 //1us延时函数

  {

   asm("nop");

  }

void delay_nus(unsigned int n)       //N us延时函数

  {

   unsigned int i=0;

   for (i=0;i

   delay_1us();

  }

  

void delay_1ms(void)                 //1ms延时函数

  {

   unsigned int i;

   for (i=0;i<1140;i++);

  }

  

void delay_nms(unsigned int n)       //N ms延时函数

  {

   unsigned int i=0;

   for (i=0;i

   delay_1ms();

  }

=========================================================================

#include "LCD.h"

void init_devices(void)

{

  CLI(); //disable all interrupts

  LCD_init();

  MCUCR = 0x00;

  GICR  = 0x00;

  TIMSK = 0x00; //timer interrupt sources

  SEI(); //re-enable interrupts

}

//main.c文件

#include"LCD.h"

void main(void)

{

   init_devices();

   LCD_write_string(1,0,"Hi!

!

");

   for(;;)

   {

   LCD_write_string(0,1,"archeng504");

   LCD_write_char(6,0,'8');   

   }

 

(注:

专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。

可复制、编制,期待你的好评与关注)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1