液晶LCD1602驱动代码

液晶LCD1602简介

LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。不同厂家生产的LCD1602芯片可能有所不同,但使用方法都是一样的。为了降低成本,绝大多数制造商都直接将裸片做到板子上。

液晶LCD1602技术参数

1、显示容量:16×2个字符。

2、芯片工作电压:4.5~5.5V。

3、工作电流:2.0mA(5.0V)。

4、模块最佳的工作电压:5.0V。

5、字符尺寸:2.95mm×4.35mm(宽×高)。

液晶LCD1602引脚功能

LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明见下表。

各引脚的功能介绍如下。

1、引脚1:VSS为地电源。

2、引脚2:VDD接5V正电源。

3、引脚3:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”现象,使用时可以通过一个10kQ的电位器调整其对比度。

4、引脚4:RS为寄存器选择脚,高电平时选择数据寄存器、低电平时选择指令寄存器。

5、引脚5:R/W为读/写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或显示地址;当RS为低电平,R/W为高电平时,可以读忙信号;当RS为高电平,R/W为低电平时,可以写入数据。

6、引脚6:E端为使能端,当E端由高电平跳变为低电平时,液晶模块执行命令。

7、引脚7~14:D0~D7为8位双向数据线。

8、引脚15:背光源正极。

9、引脚16:背光源负极。

液晶LCD1602驱动源代码

/***********************LCD驱动基本代码*********************

* 单片机:51单片机

* 开发环境:keil uVision3

* 名称:1602驱动基本代码

**************************************************************/

#include<reg51.h> //包含头文件

#include<intrins.h>

#define LCD_Data P0

#define Busy 0x80

sbit LCD_RS = P1^0;

sbit LCD_RW = P1^1;

sbit LCD_E = P2^5;

unsigned char code welcome[] = {"YOU ARE WELCOME"};

unsigned char code mcu[] = {"SL-51A"};

void Delay5Ms(void);

void WriteDataLCD(unsigned char WDLCD);

void WriteCommandLCD(unsigned char WCLCD,BuysC);

unsigned char ReadDataLCD(void);

unsigned char ReadStatusLCD(void);

void LCDInit(void);

void DisplayOneChar(unsigned char X, unsigned char Y, unsignedchar DData);

void DisplayListChar(unsigned char X, unsigned char Y, unsignedchar code *DData);

void Info_display(void);

/*************************5ms延时函数***************************/

void Delay5Ms(void)

{

unsigned int TempCyc =3552;

while(TempCyc--);

}

/**************************写数据函数***************************/

void WriteDataLCD(unsigned char WDLCD)

{

ReadStatusLCD(); //检测忙

LCD_Data = WDLCD;

LCD_E = 0; //若晶振速度太高可以在这后加小的延时

LCD_E = 0; //延时

LCD_RS = 1;

LCD_RW = 0;

LCD_E = 1;

LCD_E = 0;

}

/*************************写指令函数****************************/

void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测

{

if (BuysC) ReadStatusLCD(); //根据需要检测忙

LCD_Data = WCLCD;

LCD_E = 0;

LCD_E = 0;

LCD_RS = 0;

LCD_RW = 0;

LCD_E = 1;

LCD_E = 0;

}

/**************************读状态函数***************************/

unsigned char ReadStatusLCD(void)

{

LCD_Data = 0xFF;

LCD_RS = 0;

LCD_RW = 1;

LCD_E = 0;

LCD_E = 0;

LCD_E = 1;

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

return(LCD_Data);

}

/***************************LCD初始化***************************/

void LCDInit(void) //LCD初始化

{

LCD_Data = 0;

WriteCommandLCD(0x38,0); //三次显示模式设置,不检测忙信号

Delay5Ms();

WriteCommandLCD(0x38,0);

Delay5Ms();

WriteCommandLCD(0x38,0);

Delay5Ms();

WriteCommandLCD(0x38,1); //显示模式设置, 开始要求每次检测忙信

WriteCommandLCD(0x08,1); //关闭显示

WriteCommandLCD(0x01,1); //显示清屏

WriteCommandLCD(0x06,1); //显示光标移动设置

WriteCommandLCD(0x0C,1); //显示开及光标设置

}

/**********************按指定位置显示一个字符*********************/

void DisplayOneChar(unsigned char X, unsigned char Y, unsignedchar DData)

{

Y &= 0x1;

X &= 0xF; //限制X不能大于15,Y不能大于1

if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;

X |= 0x80; //算出指令码

WriteCommandLCD(X,0); //这里不检测忙信号,发送地址码

WriteDataLCD(DData);

}

/***********************按指定位置显示一串字符********************/

void DisplayListChar(unsigned char X, unsigned char Y, unsignedchar code *DData)

{

unsigned char ListLength;

ListLength = 0;

Y &= 0x1;

X &= 0xF; //限制X不能大于15,Y不能大于1

while(DData[ListLength]>=0x20) //若到达字串尾则退出

{

if (X <= 0xF) //X坐标应小于0xF

{

DisplayOneChar(X, Y,DData[ListLength]); //显示单个字符

ListLength++;

X++;

}

}

}

void main(void)

{

LCDInit();

DisplayListChar(5,0,mcu);

DisplayListChar(0,1,welcome);

while(1){;}

}

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
/************************ *************************************************** 程序名称:LCD.C 程序功能:LCD1602驱动程序 ****************************************************************************/ #include #include sbit RS = P2^0; sbit RW = P2^1; sbit E = P2^2; sbit DPORT = P0; const unsigned char NoDisp = 0; //无显示 const unsigned char NoCur = 1; //有显示无光标 const unsigned char CurNoFlash = 2; //有光标但不闪烁 const unsigned char CurFlash = 3; //有光标且闪烁 void LcdPos( unsigned char, unsigned char ); //确定光标位置 void LcdWd(unsigned char); //写字符 void LcdWc(unsigned char); //送控制字(检测忙信号) void LcdWcn(unsigned char); //送控制字子程序(不检测忙信号) void mDelay(unsigned char); //延时,毫秒数由j决定 void WaitIdle(); //正常读写操作之前检测LCD控制器状态 void SetCur(unsigned char para); //设置光标的4种状态 void WriteString(unsigned char *s, unsigned char xPos, unsigned char yPos); //向光标处写字符串 void LcdWc( unsigned char c ); //清屏 void WriteChar(unsigned char c, unsigned char xPos, unsigned char yPos); //向光标出处写字符 void RstLcd(); //LCD复位函数 /************************************************************** 函数名称:void WaitIdle() 功能:正常读写操作之前检测LCD控制器状态 **************************************************************/ void WaitIdle() { unsigned char temp; //定义临时变量 RS = 0; //RS=0输入指令,RS=1输入数据 RW = 1; //RW=1从LCD读取信息,RW=0向LCD写入指令或数据 E = 1; //E=1读取信息,E在下降沿从1到0执行指令 _nop_(); for(; ;) { temp = DPORT; temp &= 0x80; if ( temp == 0 ) //DB0--DB7全都是0 { break; } } E = 0; //执行指令 } /************************************************************** 函数名称:void mDelay(unsigned char j) 功能:延时程序,延时时间有变量j决定 **************************************************************/ void mDelay( unsigned char j ) { unsigned int i = 0; for( ; j>0; j-- ) { for (i=0; i<

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式硬件与代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值