历史上的今天
返回首页

历史上的今天

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

正在发生

2021年11月25日 | LCD1602动态显示

2021-11-25 来源:eefocus

仿真元原理图如下:
在这里插入图片描述

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

功能:LCD1602局部动态显示

描述:在屏幕的第二行固定位置显示count:

后面接着动态显示按键次数(00 ~ 99)

Author: Zhang Kaizhou

Date: 2019-6-5 10:50:22

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

#include

#include

#define uchar unsigned char

#define uint unsigned int

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

uchar code table1[] = {"Count:00"};

uchar code table2[] = {"0123456789"};

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

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

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

sbit k1 = P1^5;

uchar num, ge = 0, shi = 0;


void init();

void displayInit();

void keyScan();

void writeCommand(uchar command);

void delay(uchar xms);

void writeData(uchar dat);


void main()

{

init();

displayInit();

while(1)

{

keyScan();

}

}


/*初始化LCD1602的设置*/

void init()

{

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

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

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

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

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

}


/*LCD上电界面*/

void displayInit()

{

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);

}

}


/*按键扫描*/

void keyScan()

{

writeCommand(0x80 + 0x40 + strlen(table1) - 0x01);

if(!k1)

{

delay(5);

if(!k1)

{

while(!k1);

ge++;

if(ge == 10)

{

ge = 0;

shi++;

if(shi == 10)

{

shi = 0;

displayInit();

}else{

writeCommand(0x80 + 0x40 + strlen(table1) - 0x02);

writeData(table2[shi]);

writeCommand(0x80 + 0x40 + strlen(table1) - 0x01);

writeData(table2[ge]);

}

}else{

writeData(table2[ge]);

}

}

}

}


/*写指令函数*/

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--);

}

推荐阅读

史海拾趣

上海晶丰明源(BPS)公司的发展小趣事

近年来,晶丰明源在电源管理芯片领域取得了多项技术突破。公司成功研发出多款高性能、低功耗的芯片产品,广泛应用于智能手机、平板电脑、智能家居等领域。同时,公司还积极拓展海外市场,与多家国际知名厂商建立了合作关系,产品出口至全球多个国家和地区。这些技术突破和市场拓展的成果,进一步巩固了晶丰明源在行业内的领先地位。

Celduc Relais公司的发展小趣事

随着公司实力的不断增强,Celduc Relais开始积极拓展国际市场。公司通过参加国际电子展会、建立海外销售渠道以及与当地合作伙伴建立战略合作关系等方式,逐步打开了欧洲、北美和亚洲等多个国家和地区的市场。这一过程中,公司不仅提升了品牌知名度,也积累了丰富的国际业务经验。

驰芯微(CHIPWISE)公司的发展小趣事

驰芯微公司与明然科技的合作是公司在技术创新方面的又一重要突破。双方共同研发的MCU控制芯片成功应用于主动悬架项目,并在奇瑞的星途瑶光、瑞虎9等车型上取得了重要进展。这一合作不仅提升了国产芯片在高端配置车型中的应用水平,也进一步推动了驰芯微在汽车电子领域的发展。

高通(GENITOP)公司的发展小趣事

1964年,超霸电池的前身——金山工业集团在中国香港地区成立,最初专注于生产9伏干电池,以满足当时收音机等电子产品的需求。这一时期的超霸电池以其稳定的质量和可靠的性能迅速在市场上站稳脚跟。随着电子产品的普及,金山工业敏锐地捕捉到市场机遇,逐步扩大生产规模,为后续的发展奠定了坚实基础。

EM Devices Corporation公司的发展小趣事

随着公司的发展,EM Devices Corporation不断加大对研发的投入,致力于推出更具创新性的产品。一次偶然的机会,公司的研发团队发现了一种新型材料,它具有优异的电气性能和稳定性。经过数月的艰苦研发,公司成功将这种材料应用于产品中,并推出了一款性能卓越的新型电子元件。这一创新产品不仅为公司带来了丰厚的利润,还进一步巩固了公司在行业内的领先地位。

3E SECURITY公司的发展小趣事

3E SECURITY公司自创立之初,便以技术创新为核心竞争力。在电子安全领域,公司不断投入研发,推出了一系列具有自主知识产权的安全产品。其中,一款智能安全监控系统凭借其高度集成和智能化特点,迅速在市场上占据了一席之地。通过不断的技术革新,3E SECURITY逐渐在电子安全行业树立了技术领先的形象,吸引了大量合作伙伴和客户的关注。

问答坊 | AI 解惑

单片机的基本功能搞清楚后怎么开始做东西

经过一个暑假,单片机的基本功能搞清楚了。可是还是不知道怎么开始做东西。…

查看全部问答>

窗体WM_PAINT中显示一图片,后来在BUTTON中改了图片路径,但是怎么通知窗体重画呢?

我的窗体WM_PAINT中显示了一图片,后来在某个BUTTON单击中改了图片路径,但是怎么通知窗体重画新的图片呢? WM_PAINT中用SHLoadDIBitmap(L\"路径\\\\windows.bmp\")和Bitblt显示的一个图片 我在一个BUTTON里改变了图片的路径变量, 但是这时候窗体没 ...…

查看全部问答>

PC下的OpenGL跟WINCE下的OpenGL是不是区别很大?整个OpenGL框架是怎么样的?谁封装谁?

PC下的OpenGL跟WINCE下的OpenGL是不是区别很大?整个OpenGL框架是怎么样的?谁封装谁?…

查看全部问答>

MVME5500怎么初始化?

如题。。多谢高手指点。写的详细点。谢谢。…

查看全部问答>

请帮忙解答一下下面程序

static void vSwap_Flashes (void) {   UINT32 ui32a;   UINT32 ui32b;   ui32a = GLOB_prImp->br0;   ui32b = GLOB_prImp->br1;   GLOB_prImp->br0 = ui32b;   GLOB_prImp->b ...…

查看全部问答>

请大家介绍几个Wince 5.0开发的论坛?

wince 5.0的开发都是自学的,最好是有哪位能够提供一份wince 5.0开发的源代码给我,十分感谢!…

查看全部问答>

让数码管显示不同数字

我是个初学者 想知道怎样让8个数码管同时显示不同的数字 我的单片机是没有锁存器的 最好编个程序出来看看 谢谢…

查看全部问答>

STM8S的CAN配置问题

STM8S的CAN配置,如果不用官方的库文件,直接对寄存器进行操作,应该如何配置呢?流程应该是怎么样? 1.启动CAN时钟 2.CAN模块进入初始化模式,配置BTR 3.退出初始化模式,进入工作模式 4.配置过滤器 这个流程对吗? 求高人指点! 如果 ...…

查看全部问答>

ROM的定制

关于ROM的一些小资料…

查看全部问答>