1602液晶显示屏显示A.docx
- 文档编号:4339279
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:8
- 大小:212.28KB
1602液晶显示屏显示A.docx
《1602液晶显示屏显示A.docx》由会员分享,可在线阅读,更多相关《1602液晶显示屏显示A.docx(8页珍藏版)》请在冰豆网上搜索。
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'); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 1602 液晶显示屏 显示