历史上的今天
返回首页

历史上的今天

今天是:2025年06月25日(星期三)

正在发生

2018年06月25日 | 基于51单片机的LCD1602液晶驱动实现

2018-06-25 来源:eefocus

本文的主要内容目录:

一、LCD1602的基本介绍

二、LCD1602液晶驱动的实现


    根据对现有的LCD1602液晶的驱动进行分析,总感觉写的有些乱,有些麻烦,说白了就是不好用,这里打算自己写一个,既简单又实用的。

一、LCD1602的基本介绍

开发环境:keil, 睿智51开发板

LCD1602的液晶原理图如下:

引脚对应关系:

    P2.0  : 状态引脚,为0时表示指令或者状态,为1时表示数据

    P2.1  :读写引脚,为0时表示写,为1时表示读

    P2.2  :使能引脚,为1时使能

    P0.0 ~ P0.7 :数据引脚,用来传输数据

经过分析,整个液晶时序的核心就是两个:写命令、写数据,它们的时序如下:

寄存器的设置以及如何使用请参考LCD1602的芯片手册,这里主要说驱动的实现。


二、LCD1602液晶驱动的实现

    通过上面的分析可以看出,整个驱动的核心就是实现写命令和写数据这两个部分。

1、写命令,具体实现函数如下:

/* 写命令的函数 */  

void lcd1602_write_cmd(unsigned char cmd)  

{  

    RS = 0;  

    RW = 0;  

    P0 = cmd;   /* 写入的命令 */  

    delay_us(1);  

    EN = 1;  

    delay_us(2);  

    EN = 0;  

    RW = 1;  

}  

2、写数据,具体的实现如下:


/* 写数据的函数 */  

void lcd1602_write_data(unsigned char dat)  

{  

    RS = 1;  

    RW = 0;  

    P0 = dat;   /* 要写入的数据 */  

    delay_us(1);  

    EN = 1;  

    delay_us(2);  

    EN = 0;  

    RW = 1;  

    RS = 0;  

}  

3、LCD1602的初始化函数,主要是通过写命令、写数据来实现。


/* lcd1602的初始化函数 */  

void lcd1602_init()  

{  

    delay_us(200);  

    lcd1602_write_cmd(0x38);    /* 设置显示模式 */  

    delay_us(50);  

    lcd1602_write_cmd(0x38);  

    delay_us(50);  

    lcd1602_write_cmd(0x38);  

    delay_us(50);  

    lcd1602_write_cmd(0x0C);    /* 打开显示和设置光标 */  

    delay_us(50);  

    lcd1602_write_cmd(0x06);    /* 显示光标移动设置 */  

    delay_us(50);  

    lcd1602_write_cmd(0x01);    /* 清屏 */  

    delay_us(50);  

}  


4、实现一个具体的LCD1602液晶显示的例子:在液晶屏上面显示一个字符串,完整的代码如下所示。


#include  

  

/* 定义与LCD1602液晶相连的引脚 */  

sbit RS = P2^0;     // 状态引脚,为0时表示状态或指令,为1时表示数据  

sbit RW = P2^1;     // 读写引脚,为0时表示写,为1时表示读  

sbit EN = P2^2;     // 使能引脚,为1时使能  

  

/*  进行一段时间的软件延时,满足LCD1602液晶的时序需要 

 */  

void delay_us(int us)  

{  

    int i = 0;  

    int j = 0;  

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

        for(j = 0; j < 12; j++);  

}  

  

/* 写命令的函数 */  

void lcd1602_write_cmd(unsigned char cmd)  

{  

    RS = 0;  

    RW = 0;  

    P0 = cmd;   /* 写入的命令 */  

    delay_us(1);  

    EN = 1;  

    delay_us(2);  

    EN = 0;  

    RW = 1;  

}  

  

/* 写数据的函数 */  

void lcd1602_write_data(unsigned char dat)  

{  

    RS = 1;  

    RW = 0;  

    P0 = dat;   /* 要写入的数据 */  

    delay_us(1);  

    EN = 1;  

    delay_us(2);  

    EN = 0;  

    RW = 1;  

    RS = 0;  

}  

  

/* lcd1602的初始化函数 */  

void lcd1602_init()  

{  

    delay_us(200);  

    lcd1602_write_cmd(0x38);    /* 设置显示模式 */  

    delay_us(50);  

    lcd1602_write_cmd(0x38);  

    delay_us(50);  

    lcd1602_write_cmd(0x38);  

    delay_us(50);  

    lcd1602_write_cmd(0x0C);    /* 打开显示和设置光标 */  

    delay_us(50);  

    lcd1602_write_cmd(0x06);    /* 显示光标移动设置 */  

    delay_us(50);  

    lcd1602_write_cmd(0x01);    /* 清屏 */  

    delay_us(50);  

}  

  

/* 在LCD1602液晶上显示字符串的函数 */  

void lcd1602_show_string(unsigned char *str)  

{  

    int i = 0;  

  

    lcd1602_write_cmd(0x00 + 0x80);  

    for(i = 0; str[i] != '\0'; i++)  

        lcd1602_write_data(str[i]);  

}  

  

/* 程序的入口函数 */  

void main()  

{  

    lcd1602_init();     /* 液晶的初始化函数 */  

  

    lcd1602_show_string("TECH-PRO");    /* 在液晶上显示字符串:TECH-PRO */  

  

    while(1);  

}  


推荐阅读

史海拾趣

CANOPUS公司的发展小趣事

CANOPUS公司最初由创始人Shinichi Usuda于1977年创立,当时他经营着一家乐器商店。他深知音乐的力量和乐器的重要性,于是决定将自己的商店逐渐转型为专注于鼓类乐器的制造与销售。经过几年的努力,CANOPUS逐渐在乐器市场上崭露头角,赢得了音乐爱好者的青睐。

Andon Electronics公司的发展小趣事

随着业务的不断拓展,CANOPUS开始专注于鼓的制造研究。在1984年,公司推出了其标志性产品——整木掏空榉木军鼓。这款鼓的独特之处在于其鼓腔是由整个树干挖空处理而成,导角也做了特有的设计。这一创新使得CANOPUS的鼓在音质和外观上都与众不同,迅速在市场上获得了认可。

天二科技(EVER OHMS)公司的发展小趣事

进入90年代,随着电子技术的快速发展,市场对电阻器的要求也越来越高。天二科技紧跟行业趋势,投入大量资源进行技术研发和产品创新。1996年,公司成功推出贴片电阻器,这一产品凭借其优良的性能和稳定的品质,迅速赢得了市场的认可。此后,天二科技又陆续推出了耐高温电阻器、超薄贴片电阻器等一系列新产品,进一步丰富了公司的产品线。

BAHCO公司的发展小趣事

随着市场的不断变化和消费者需求的多样化,BAHCO也在不断调整和优化产品线。除了传统的五金工具外,BAHCO还积极开发新的产品领域,如电动工具、测量仪器等。这些新产品的推出不仅丰富了公司的产品线,也满足了不同消费者的需求。同时,BAHCO还注重产品的环保性能和可持续性发展,致力于为消费者提供更加环保、高效的产品解决方案。

EMMICRO公司的发展小趣事

EMMICRO公司非常注重国际化战略的实施。公司积极参加国际展览和交流活动,与全球范围内的合作伙伴建立了良好的合作关系。同时,公司还通过引进国际先进的生产技术和管理经验,不断提升自身的核心竞争力和国际化水平。在海外市场拓展方面,EMMICRO公司也取得了显著的成果,为公司的长期发展奠定了坚实的基础。

Fortiming Corporation公司的发展小趣事

背景:在电子行业,成本控制和供应链管理是企业竞争力的重要体现。

发展:Fortiming不断优化供应链管理流程,与上游供应商建立长期稳定的合作关系,确保原材料的稳定供应和质量可靠。同时,公司还通过技术创新和工艺改进,降低生产成本,提高产品竞争力。这些措施使得Fortiming在激烈的市场竞争中保持了良好的盈利能力。

问答坊 | AI 解惑

基于at89c51的可燃性气体报警器毕业设计

这有全套额基于at89c51的可燃性气体报警器毕业设计,需要的话联系我,QQ:363028096,       电话:13571841736 …

查看全部问答>

雪天跪地求助:朋友们谁了解ip通信的都进来说说

我们公司100多人,要把目前使用的传统电话系统换成ip的。调研了很多,思科和Avaya东西是不错,可是老板批的钱有限,受用不起,国内一些小厂商的东西又担心稳定性太低。近期朋友推荐一款据说整体性价比还可以的美国捷思锐的中小企业语音通 ...…

查看全部问答>

0402封装的排阻的尺寸是?

我想用0402封装的排阻,但是不知道具体的尺寸和型号,请各位前辈知道的告诉我下,谢谢了!…

查看全部问答>

关于SET命令无法保存?

我用open release Directory in build window命令打开的命令行窗口。然后用SET命令添加了两个环境变量: SET BSP_NOI2C=0 SET BSP_NOBATTERY=1 然后用SET命令产看,环境变量可以看到这两个值。 但是当我关闭后再打开在用SET查看。 就只能看到B ...…

查看全部问答>

vxworks下如何建立文件啊?

我想在FLASH里面创建一个文件进行读写,请问该怎么实现啊?…

查看全部问答>

【求助】AD采集Pt100和温度信号如何处理?

AD采集Pt100和温度信号如何处理? 如何应用内部测温来实现冷端补偿? 高手指导以下c的程序啊!…

查看全部问答>

下面这个简单的延迟函数延迟大概多少

void Delay(vu32 nCount){  for(; nCount != 0; nCount--);}   这个延迟函数大概延迟多少? 我要延迟1s的话,delay()?里面填多少呢?谢谢各位大侠了…

查看全部问答>

win8系统安装IAR的福音

如果你是win8系统,                             那么,你有过安装IAR时的纠结吗?有过安装后无法操作的苦恼吗?有过仿真时无法下载的痛楚吗? 福 ...…

查看全部问答>