(Display)LCD1602程序__版本2

发布者:tetsika最新更新时间:2016-12-12 来源: eefocus关键字:LCD1602 手机看文章 扫描二维码
随时随地手机看文章

LCD1602从我接触单片机开始就在用,以前用的时候,有时用RS和EN,RW接地,有时也用四线模式,但是用到最后,我发现还是用8跟数据线,RS,RW,EN都接到单片机上是最好用的......


 

Proteus仿真图:

Lcd1602液晶程序 - 左手握右手 - 小小码农搬砖头

 LCD1602.H代码:


#ifndef _LCD1602_H_
#define _LCD1602_H_

#include
#include "TYPEDEF.H"

//液晶初始化函数:
void LCD1602_Init();

//液晶设置显示位置函数/设置DDRAM位置
void LCD1602_SetPosition( uint8 x, uint8 y );

//液晶写缓存函数
void LCD1602_WriteBuffer( uint8 *buffer );

//液晶写字符串函数
void LCD1602_WriteString( uint8 x, uint8 y, uint8 *str );

//显示数值函数
void LCD1602_WriteNum( uint8 x, uint8 y, uint32 dat );

//显示温度函数
void LCD1602_DispTemp( uint8 x, uint8 y, int8 temp );

//显示两位数函数
void LCD1602_Disp2bit( uint8 x, uint8 y, uint8 dat );

//开启光标函数
void LCD1602_OpenCursor( void );

//关闭光标函数
void LCD1602_CloseCursor( void );

//设定光标位置函数
void LCD1602_SetCursor( uint8 x, uint8 y );


#endif




LCD1602.C代码:


#include "LCD1602.H"
#include "TYPEDEF.H"
#include "CONFIG.H"

//写命令函数
static void LCD1602_WriteCommand( uint8 com );

//判忙函数
static void LCD1602_CheckBusy();

//写数据函数
static void LCD1602_WriteData( uint8 dat );

//将数据转化为字符串
static void Uint32_To_String( uint8 *str, uint32 dat );


//液晶初始化函数
void LCD1602_Init()
{

LCD1602_WriteCommand( 0x38 );//8跟数据线,2行显示,5*8点阵
LCD1602_WriteCommand( 0x06 );//写入数据后光标自动右移
LCD1602_WriteCommand( 0x01 );//清除DDRAM,清屏

LCD1602_WriteCommand( 0x0c );//不显示光标,不闪烁
}

//液晶位置设置函数
void LCD1602_SetPosition( uint8 x, uint8 y )
{
if( x==0 )
LCD1602_WriteCommand( 0X80+y );
else if( x==1 )

LCD1602_WriteCommand( 0X80+0x40+y );
else
{
char Buffer[]={"Pos Error"};
LCD1602_WriteBuffer( Buffer );
while(1);
}
}


//液晶写缓存函数
void LCD1602_WriteBuffer( uint8 *buffer )
{
while( *buffer != '\0' )
{
LCD1602_WriteData( *buffer );
buffer++;
}

}

//写字符串函数

void LCD1602_WriteString( uint8 x, uint8 y, uint8 *str )
{
LCD1602_SetPosition(x,y);
LCD1602_WriteBuffer( str );
}

//显示数值函数
void LCD1602_WriteNum( uint8 x, uint8 y, uint32 dat )
{

uint8 buf[12] = {0};
LCD1602_SetPosition( x, y );
Uint32_To_String( buf, dat );
LCD1602_WriteBuffer( buf );
}

//显示温度函数
void LCD1602_DispTemp( uint8 x, uint8 y, int8 temp )
{
LCD1602_SetPosition( x, y );
if( temp < 0 )
{
temp *= -1;
LCD1602_WriteData('-');

}
else
{
LCD1602_WriteData('+');
}
LCD1602_WriteData( temp/10 + '0' );
LCD1602_WriteData( temp + '0' );
}

//显示两位数函数
void LCD1602_Disp2bit( uint8 x, uint8 y, uint8 dat )
{
LCD1602_SetPosition( x, y );
LCD1602_WriteData( dat/10 + '0' );
LCD1602_WriteData( dat + '0' );
}

//开启光标函数
void LCD1602_OpenCursor( void )
{
LCD1602_WriteCommand( 0x0f ); //显示开,光标闪烁开
}

//关闭光标函数
void LCD1602_CloseCursor( void )
{
LCD1602_WriteCommand( 0X0C ); //显示开,光标关
}

//设定光标位置函数
void LCD1602_SetCursor( uint8 x, uint8 y )
{

LCD1602_SetPosition( x, y );
}

static void LCD1602_WriteCommand( uint8 com )
{

LCD1602_CheckBusy();
rs = L;
rw = L;
en = L;
PORT_DATA = com;
en = H;
en = L;
}

static void LCD1602_CheckBusy()
{

uint8 dat = 0;
rs = L;
rw = H;
en = L;
PORT_DATA = 0xff;
do
{

en = H;
dat = PORT_DATA;
en = L;
}
while( dat&0x80 );
}

static void LCD1602_WriteData( uint8 dat )
{
LCD1602_CheckBusy();
rs = H;
rw = L;
en = L;

PORT_DATA = dat;
en = H;
en = L;
}

//将数值转换为字符串函数
static void Uint32_To_String( uint8 *str, uint32 dat )
{

//uint32 数据的最大值为4294967295,有10位数
uint8 buffer[12] = { 0 };
int8 i = 0, j = 0;
do
{
buffer[i] = dat + '0';
dat /= 10;
i++;

}while( dat != 0 );
buffer[i] = '\0';
i -= 1;
j = 0;
while( i >= 0 )
{
str[j++] = buffer[i--];
}
str[j] = '\0';
}


这个LCD1602中把我平常常用的关于液晶的函数都写到了里面,用的时候直接调用就可以了,很多时候这样写很好,但是有时候,当很多个文件在一起时,每个文件里面都写很多函数,会发现data太大了,超过了RAM空间的大小,发生编译错误,在proteus中无法使用xdata,仿真会发生错误,在实际中可以使用。


关键字:LCD1602 引用地址:(Display)LCD1602程序__版本2

上一篇:(Time)DS1302时钟芯片驱动程序
下一篇:51单片机开发系列五_矩阵按键扫描

推荐阅读最新更新时间:2024-03-16 15:24

LCD1602液晶显示模块深入详解之软件篇(AVR)
LCD1602液晶显示模块的驱动虽然比七段数码管之类的显示要复杂一些,但实际上也并不是很难,最主要的还是初始化,为什么这么说呢?我们在调试一块新液晶屏的时候,都会先初始化看看有没有光标在闪,没有光标前是一番努力(PROTEUS上也是这么做的),光标出来之后就相对很容易了。 那初始化的流程是怎么样的呢?我们还是看看HD44780的数据手册吧,如下图所示: 可以看到,初始化的主要步骤如下: (1)上电:这特么也算是一个步骤么?是的!如果你用的是其它液晶模块,比如LCD12864,会发现有一个复位引脚,LCD1602是没有复位引脚的,HD44780本身已经有内部复位逻辑。上电后复位其实会做很多事情的,主要如下: a. 清除屏
[单片机]
<font color='red'>LCD1602</font>液晶显示模块深入详解之软件篇(AVR)
基于51单片机的酒精浓度监测仪
一.系统概述 系统使用的模块有AT89C51单片机+LCD1602显示屏+MQ-3酒精检测模块+小灯+ADC0832。 本设计采用51单片机为核心控制,通过调节电位器可以模拟MQ-3酒精浓度的变化,MQ-3采集到的模拟电压信号会通过ADC0832转换为数字电压信号,单片机会将电压信号进行处理和分析并得到我们想要的酒精浓度信号,通过LCD1602显示屏显示酒精浓度,当检测到的酒精浓度高于设置的阈值,小灯就会直接进行报警。 二.仿真概述 1.通过LCD1602显示实时检测到的酒精浓度和设置的酒精浓度阈值。 2.通过MQ-3乙醇模块进行酒精浓度的检测。 3.当检测到的酒精浓度值超过设定阈值后就会通过小灯进行报警。 三
[单片机]
基于51单片机的酒精浓度监测仪
基于单片机的LCD1602控制总线程序
    第一行显示"Welcome";第二行显示="Happy day";若要显示其他字符,请直接往数组 LCMLineOne 和LCMLineTwo 填充相应的代码。直接上图,仿真图如下:     源程序如下,可以对比时序方式,理解总线的操作方法。     #include reg51.h //#include absaCC.h #define uchar  unsigned char #define uint  unsigned int #define busy  0x80 uchar  xdata  LCMWriteCOM  _at_ 0x80ff;  //写指令寄存器 uchar  xdata  LCMRea
[单片机]
基于单片机的<font color='red'>LCD1602</font>控制总线程序
AVR单片机控制LCD1602液晶显示
一、字符型LCD1602介绍 详情请进: http://q.163.com/longfei-mcu/ 以上是LCD1602的图片,这是市面上大多数使用的。LCD1602已很普遍了,市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样 字符型LCD的引脚定义如下: 图1 HD44780内置了DDRAM、CGROM和CGRAM。 DDRAM就是显示数据RAM,用
[单片机]
AVR单片机控制<font color='red'>LCD1602</font>液晶显示
LCD1602(以51单片机为例)
介绍 名字含义 LCD1602名字中16代表一行中最多16个字符,2代表两行。 引脚说明 以我的这块LCD1602为例。 VSS: S=series 表示公共连接的意思,通常指电路公共接地端电压。 VDD:D=device 表示器件的意思, 即器件内部的工作电压。 VO:液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,使用时可以通过一个10K的电位器调整对比度,电压越低对比度越高。(自己接线的话需要解决VO口外接电阻的问题,不能直接接地,因为直接接地导致显示不正常) RS:寄存器选择输入端 RS=1:指向数据寄存器 RS=0:指向指令寄存器 LCD1602看到 RS为高时,就明白要给我传送数据了;
[单片机]
<font color='red'>LCD1602</font>(以51单片机为例)
LCD1602在PIC单片机中的使用程序
#include pic.h __CONFIG(0x1832); //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 #define rs RA1 #define rw RA2 #define e RA3 const char web ={' ','W','W','W','.','P','I','C','1','6','.','C','O','M',' 
[单片机]
单片机GPS定位LCD1602液晶显示经纬度海拔及时间日期实物制作
制作出来的实物图如下: 单片机源程序如下: #include main.h #include LCD1602.h #include GPS.h //定义变量 unsigned char KEY_NUM = 0; bit Page = 0; unsigned char xdata Display_GPGGA_Buffer ; unsigned char xdata Display_GPRMC_Buffer ; bit Flag_OV = 0; bit Flag_Calc_GPGGA_OK = 0; bit Flag_Calc_GPRMC_OK = 0; //****************************
[单片机]
单片机GPS定位<font color='red'>LCD1602</font>液晶显示经纬度海拔及时间日期实物制作
LPC2138+LCD1602计数器proteus仿真与源码 添加注释的和改管脚
LPC2138仿真简单计算器的原理图如下(proteus仿真工程文件可到本帖附件中下载)lcd1602液晶显示 LPC2138源程序如下: #define IN_TARGET #include config.h #define LED1 1 18 // P0.18 控制LED1 /********************************************************************************************************* ** 函数名称: IRQ_Exception ** 功能描述: 中断异常处理程序,用户根据需要自己改变程序 *******
[单片机]
LPC2138+<font color='red'>LCD1602</font>计数器proteus仿真与源码 添加注释的和改管脚
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved