历史上的今天
返回首页

历史上的今天

今天是:2024年11月24日(星期日)

正在发生

2021年11月24日 | LCD1602显示总结

2021-11-24 来源:eefocus

仿真原理图如下:

在这里插入图片描述

1.LCD1602正常显示两行数据


/*------------------------

功能:LCD1602显示两行数据

Author: Zhang Kaizhou

Date: 2019-6-3 12:42:22

------------------------*/

#include

#define uchar unsigned char

#define uint unsigned int

uchar code table0[] = {"0123456789ABCDEF"}; // 每行的字符数据

uchar code table1[] = {"0123456789abcdef"};

sbit lcdrs = P1^2; // LCD数据/命令选择端

sbit lcdrw = P1^3; // LCD读写选择端

sbit lcden = P1^4; // LCD使能端,高脉冲有效

uchar num;


void init();

void writeCommand(uchar command);

void delay(uchar xms);

void writeData(uchar dat);


void main()

{

init();

writeCommand(0x80); // 将数据指针定位到第一行的首地址

for(num = 0; num < 16; num++)

{

writeData(table0[num]);

delay(5);

}

writeCommand(0x80 + 0x40); // 将数据指针定位到第二行的首地址

for(num = 0; num < 16; num++)

{

writeData(table1[num]);

delay(5);

}

while(1);

}


/*初始化LCD1602的设置*/

void init()

{

lcden = 0; // 拉低使能端,准备产生使能高脉冲信号

writeCommand(0x38); // 显示模式设置(16x2, 5x7点阵,8位数据接口)

writeCommand(0x0c); // 开显示,不显示光标

writeCommand(0x06); // 写一个字符后地址指针自动加1

writeCommand(0x01); // 显示清零,数据指针清零

}


/*写指令函数*/

void writeCommand(uchar command)

{

lcdrs = 0; // 命令选择

lcdrw = 0;

P0 = command;

delay(5);

lcden = 1; // 产生一个正脉冲使能信号

delay(5);

lcden = 0;

}


/*写数据函数*/

void writeData(uchar dat)

{

lcdrs = 1; // 数据选择

lcdrw = 0;

P0 = dat;

delay(5);

lcden = 1;

delay(5);

lcden = 0;

}


/*延时函数*/

void delay(uchar xms)

{

uint i, j;

for(i = xms; i > 0; i--)

for(j = 110; j > 0; j--);

}


2.整屏左移显示


/*------------------------

功能:LCD1602整屏左移显示

Author: Zhang Kaizhou

Date: 2019-6-3 12:35:23

------------------------*/

#include

#define uchar unsigned char

#define uint unsigned int

uchar code table0[] = {"0123456789ABCDEF"}; // 每行的字符数据

uchar code table1[] = {"0123456789abcdef"};

sbit lcdrs = P1^2; // LCD数据/命令选择端

sbit lcdrw = P1^3; // LCD读写选择端

sbit lcden = P1^4; // LCD使能端,高脉冲有效

uchar num;


void init();

void writeCommand(uchar command);

void delay(uchar xms);

void writeData(uchar dat);


void main()

{

init();

writeCommand(0x80 + 0x10); // 将数据指针定位到第一行的非显示存储区

for(num = 0; num < 16; num++)

{

writeData(table0[num]);

delay(5);

}

writeCommand(0x80 + 0x50); // 将数据指针定位到第二行的非显示存储区

for(num = 0; num < 16; num++)

{

writeData(table1[num]);

delay(5);

}

for(num = 0; num < 16; num++) // 循环整屏左移

{

writeCommand(0x1c); // 整屏左移

delay(100);

}

while(1);

}


/*初始化LCD1602的设置*/

void init()

{

lcden = 0; // 拉低使能端,准备产生使能高脉冲信号

writeCommand(0x38); // 显示模式设置(16x2, 5x7点阵,8位数据接口)

writeCommand(0x0c); // 开显示,不显示光标

writeCommand(0x06); // 写一个字符后地址指针自动加1

writeCommand(0x01); // 显示清零,数据指针清零

}


/*写指令函数*/

void writeCommand(uchar command)

{

lcdrs = 0; // 命令选择

lcdrw = 0;

P0 = command;

delay(5);

lcden = 1; // 产生一个正脉冲使能信号

delay(5);

lcden = 0;

}


/*写数据函数*/

void writeData(uchar dat)

{

lcdrs = 1; // 数据选择

lcdrw = 0;

P0 = dat;

delay(5);

lcden = 1;

delay(5);

lcden = 0;

}


/*延时函数*/

void delay(uchar xms)

{

uint i, j;

for(i = xms; i > 0; i--)

for(j = 110; j > 0; j--);

}


3.刷屏显示多行字符


/*----------------------------

功能:LCD1602刷屏显示多行字符

Author: Zhang Kaizhou

Date: 2019-6-4 16:15:43

-----------------------------*/

#include

#include

#define uchar unsigned char

#define uint unsigned int

uchar code table0[] = {"0123456789ABCDEF"}; // 每行的字符数据

uchar code table1[] = {"0123456789abcdef"};

uchar code table2[] = {"Welcome to here!"};

uchar code table3[] = {"I'm ZKZ!"};

uchar code table4[] = {"Life is nice!"};

uchar code table5[] = {"Tomorrow is OK!"};


sbit lcdrs = P1^2; // LCD数据/命令选择端

sbit lcdrw = P1^3; // LCD读写选择端

sbit lcden = P1^4; // LCD使能端,高脉冲有效

uchar num;


void init();

void writeCommand(uchar command);

void delay(uint xms);

void writeData(uchar dat);


void main()

{

init();

/*第一屏*/

writeCommand(0x80); // 将数据指针定位到第一行首

for(num = 0; num < strlen(table0); num++)

{

writeData(table0[num]);

delay(5);

}

writeCommand(0x80 + 0x40); // 将数据指针定位到第二行首

for(num = 0; num < strlen(table1); num++)

{

writeData(table1[num]);

delay(5);

}

delay(2000);

writeCommand(0x01);

/*第二屏*/

writeCommand(0x80); // 将数据指针定位到第一行首

for(num = 0; num < strlen(table2); num++)

{

writeData(table2[num]);

delay(5);

}

writeCommand(0x80 + 0x40); // 将数据指针定位到第二行首

for(num = 0; num < strlen(table3); num++)

{

writeData(table3[num]);

delay(5);

}

delay(2000);

writeCommand(0x01);

/*第三屏*/

writeCommand(0x80); // 将数据指针定位到第一行首

for(num = 0; num < strlen(table4); num++)

{

writeData(table4[num]);

delay(5);

}

writeCommand(0x80 + 0x40); // 将数据指针定位到第二行首

for(num = 0; num < strlen(table5); num++)

{

writeData(table5[num]);

delay(5);

}

while(1);

}


/*初始化LCD1602的设置*/

void init()

{

lcden = 0; // 拉低使能端,准备产生使能高脉冲信号

writeCommand(0x38); // 显示模式设置(16x2, 5x7点阵,8位数据接口)

writeCommand(0x0c); // 开显示,不显示光标

writeCommand(0x06); // 写一个字符后地址指针自动加1

writeCommand(0x01); // 显示清零,数据指针清零

}


/*写指令函数*/

void writeCommand(uchar command)

{

lcdrs = 0; // 命令选择

lcdrw = 0;

P0 = command;

delay(5);

lcden = 1; // 产生一个正脉冲使能信号

delay(5);

lcden = 0;

}


/*写数据函数*/

void writeData(uchar dat)

{

lcdrs = 1; // 数据选择

lcdrw = 0;

P0 = dat;

delay(5);

lcden = 1;

delay(5);

lcden = 0;

}


/*延时函数*/

void delay(uint xms)

{

uint i, j;

for(i = xms; i > 0; i--)

for(j = 110; j > 0; j--);

}

推荐阅读

史海拾趣

Eureka Microelectronics Inc公司的发展小趣事

Eureka一直重视研发实力的提升和技术创新。公司拥有一支专业的研发团队,致力于新技术的研发和应用。近年来,Eureka在人工智能、物联网等领域取得了多项技术突破,推出了一系列具有竞争力的新产品。这些技术的突破和应用,不仅提升了Eureka的产品性能和质量,也推动了公司在行业内的领先地位。

极海半导体(Geehy)公司的发展小趣事

Eureka在追求经济效益的同时,也积极履行社会责任。公司注重环保和可持续发展,致力于减少生产过程中的能源消耗和废弃物排放。同时,Eureka也积极参与公益活动,为社会做出积极贡献。这些努力不仅提升了公司的社会形象,也促进了公司的可持续发展。

请注意,以上故事仅为虚构,并非Eureka公司的实际历史。如有需要,请查阅相关公开资料或联系Eureka公司以获取准确信息。

General Dynamics SATCOM Technologies公司的发展小趣事

Eureka公司自1995年成立以来,一直致力于电子技术的研发和创新。在早期阶段,公司凭借一款具有创新性的液晶显示驱动IC产品,成功打入市场。随着技术的不断进步,Eureka逐步拓展了产品线,推出了包括类比-数位混合信号处理器、系统应用完整方案等一系列产品。这些产品的推出,不仅丰富了Eureka的产品线,也提升了公司在行业内的竞争力。

ANYSOLAR LTD.公司的发展小趣事

ANYSOLAR始终关注企业的社会责任和可持续发展。在生产过程中,公司严格遵守环保法规,采用先进的环保技术和设备,确保生产过程中的废弃物排放达到国家标准。同时,公司还积极参与社会公益活动,捐赠光伏产品支持贫困地区的能源建设。

此外,ANYSOLAR还致力于推动清洁能源的普及和应用,通过技术研发和市场推广等方式,降低清洁能源的使用成本,提高其在能源结构中的占比。这些举措不仅体现了ANYSOLAR的社会责任感,也为公司的可持续发展奠定了坚实的基础。

以上便是关于ANYSOLAR LTD.的五个发展故事。虽然这些故事是虚构的,但它们基于电子行业的常见趋势和企业发展的普遍规律,旨在展示一个企业在发展过程中可能面临的挑战和机遇。希望这些故事能够为您提供一些启发和参考。

Defense Logistics Agency公司的发展小趣事

在成功整合供应链之后,DLA开始拓展其业务领域。除了为美军提供后勤保障服务外,DLA还开始向各州、当地政府组织、外国政府和国际组织提供后勤保障服务。这一拓展不仅拓宽了DLA的业务范围,也增强了其国际影响力。

Condor公司的发展小趣事

随着军事现代化的推进,DLA意识到整合与优化供应链的重要性。于是,DLA开始着手整合各个军事部门的后勤系统,实现资源的集中管理和统一调配。通过引入先进的供应链管理技术,DLA大幅提高了物资采购、存储、运输和分发的效率,确保了美军在全球范围内的作战需求得到及时、准确的满足。

问答坊 | AI 解惑

最早的手机

本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑 手机从问世到现在已经有20多年的历史了,从巨型大哥大到现在的直板,滑盖,翻盖,旋盖等造型并存,手机的外形越来越小巧,而造型则是越来越时尚,我们一起来回顾一下最早的手机: …

查看全部问答>

噪声问题

  --------------------------------------------------------------------------------     我的收音机用的是cl6017s,它在收听到电台的时候总是有类似于单片机(MSP430F135)扫描键盘那种节奏的嘟嘟声噪音,我用示波器亮了 ...…

查看全部问答>

6410的otg怎么配置成host使用?

6410的otg怎么配置成host使用?…

查看全部问答>

windML3.0 的编译错误问题

安装了Tornado2.2.1(for MIPS)和windML3.0 编译WindML库文件时遇到下面的错误。请高手分析一下。谢谢 子目录或文件 D:\\Tornado2.2_MIPS\\target\\lib\\mips\\MIPS64\\gnule\\objwndml 已经存在。 make.exe[4]: [checkdir] Error 0x1 (ignored ...…

查看全部问答>

求助 flash烧写

pxa271的芯片能用flashpgm烧写bootloader么?如果不能,应该用什么烧写工具呢?…

查看全部问答>

【号外】STM32F101也有USB

刚做的东西给几个小MM去贴片,把101当103贴上去了,居然USB也可以联机。但操作偶尔有问题,手工复位一般可以解决掉。听小道消息说,101是阉割的103,就像奔腾的cache有瑕疵变成赛扬一样。…

查看全部问答>

RTC校准应用笔记中文版,望置顶

                                 我翻译的,大家多多指教!…

查看全部问答>

正弦波振荡器,求解释

小弟菜菜~在学模拟电子,看了正弦波振荡器就尝试自己做了一个~但是输出的波形却是下面这个图上的   望路过的各位大大们能解释下,小弟感激不敬啊~~…

查看全部问答>

AD633应用

本帖最后由 dontium 于 2015-1-23 13:12 编辑 各位帮忙看一下。用AD633搭的一个乘法电路,实现两个郑玄信号的相乘。正弦信号相位相同。按说最后只会剩下直流分量与和频分量的合成曲线,但是用滤波器想过滤掉交变分量,只剩直流分量。可是滤波后得 ...…

查看全部问答>

在DSP系统的设计初期,是否需要CPLD来增加布线灵活性

在DSP系统的设计初期,是否需要CPLD来增加布线灵活性?之前做过几个板遇到IO端口设计不合理导致板子要重做的情况。增加CPLD成本就自然增加了。 [ 本帖最后由 weipingying 于 2012-12-26 08:43 编辑 ]…

查看全部问答>