1602液晶显示屏显示AWord文档格式.docx
《1602液晶显示屏显示AWord文档格式.docx》由会员分享,可在线阅读,更多相关《1602液晶显示屏显示AWord文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
电源正极
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<
iom16v.h>
#include<
macros.h>
/*
下面是AVR与LCD连接信息
PA2->
PA3->
EN
地->
RW
PA4->
PA5->
PA6->
PA7->
要使用本驱动,改变下面配置信息即可*/
#defineLCD_EN_PORTPORTA//以下2个要设为同一个口
#defineLCD_EN_DDRDDRA
#defineLCD_RS_PORTPORTA//以下2个要设为同一个口
#defineLCD_RS_DDRDDRA
#defineLCD_DATA_PORTPORTA//以下3个要设为同一个口
#defineLCD_DATA_DDRDDRA//一定要用高4位
#defineLCD_DATA_PINPINA
#defineLCD_
(1<
<
PA2)//0x04
portA2
out
PA3)//0x08
portA3
#defineLCD_DATA((1<
PA4)|(1<
PA5)|(1<
PA6)|(1<
PA7))//0xf0portA4/5/6/7out
/*函数说明
*/
voidLCD_init(void);
voidLCD_en_write(void);
voidLCD_write_command(unsignedcharcommand);
voidLCD_write_data(unsignedchardata);
voidLCD_set_xy(unsignedcharx,unsignedchary);
voidLCD_write_string(unsignedcharX,unsignedcharY,unsignedchar*s);
voidLCD_write_char(unsignedcharX,unsignedcharY,unsignedchardata);
voiddelay_nus(unsignedintn);
voiddelay_nms(unsignedintn);
#include"
LCD.h"
voidLCD_init(void)//液晶初始化
{
//数据口方向为输出设置EN方向为输出设置RS方向为输出
位显示
显示开
清屏
LCD_DATA_DDR|=LCD_DATA;
LCD_EN_DDR|=LCD_EN;
//LCD_RS_DDR|=LCD_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);
voidLCD_en_write(void)//液晶使能
LCD_EN_PORT|=LCD_EN;
delay_nus
(1);
LCD_EN_PORT&
=~LCD_EN;
}
voidLCD_write_command(unsignedcharcommand)//
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;
=0x0f;
低四位移到高四位
清高四位
//写低四位
voidLCD_write_data(unsignedchardata)//写数据{
LCD_RS_PORT|=LCD_RS;
//RS=1
LCD_DATA_PORT|=data&
写高四位
data=data<
//低四位移到高四位LCD_DATA_PORT&
//清高四位LCD_DATA_PORT|=data&
//写低四位LCD_en_write();
voidLCD_set_xy(unsignedcharx,unsignedchary)//
写地址函数
unsignedcharaddress;
if(y==0)address=0x80+x;
elseaddress=0xc0+x;
LCD_write_command(address);
}
voidLCD_write_string(unsignedcharX,unsignedcharY,unsignedchar*s)//列x=0~15,{
LCD_set_xy(X,Y);
//写地址
while(*s)//写显示字符
LCD_write_data(*s);
s++;
行y=0,1
voidLCD_write_char(unsignedcharX,unsignedcharY,unsignedchardata)//
列x=0~15,行y=0,1
LCD_write_data(data);
voiddelay_1us(void)//1us
asm("
nop"
);
voiddelay_nus(unsignedintn)//Nus
unsignedinti=0;
for(i=0;
i<
n;
i++)
delay_1us();
voiddelay_1ms(void)//1ms
unsignedinti;
1140;
i++);
voiddelay_nms(unsignedintn)//Nms
延时函数
delay_1ms();
voidinit_devices(void)
CLI();
//disableallinterrupts
LCD_init();
MCUCR=0x00;
GICR=0x00;
TIMSK=0x00;
//timerinterruptsources
SEI();
//re-enableinterrupts
//main.c文件
voidmain(void)
init_devices();
LCD_write_string(1,0,"
Hi!
!
"
for(;
;
)
LCD_write_string(0,1,"
archeng504"
LCD_write_char(6,0,'
8'