当前位置:首页 > 电源 > 数字电源
[导读]要想实现人机交互,显示装置是不可缺少的。这篇文章主要关于如何控制液晶显示,并在此基础上加上定时器的功能,把原来已用数码管显示的定时器搬到液晶屏上来。这里用到的液

要想实现人机交互,显示装置是不可缺少的。这篇文章主要关于如何控制液晶显示,并在此基础上加上定时器的功能,把原来已用数码管显示的定时器搬到液晶屏上来。

这里用到的液晶为LCD1602,能够同时显示16x02即32个字符(16列2行)。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号等,直接向其写入ASCII码即可显示相应字符。1602共16个 管脚,管脚功能如下:

 

 

实际应用时,所用液晶模块与单片机的连接图如下:

其中7~14管脚为IO,与单片机的P0口相接,单片机可通过向P0口发送数据被液晶模块并行接收。

4管脚为数据命令选择端,与单片机P3^5口相连。故可通过控制P3^5口的电平高低,向液晶模块写入命令或数据。由数据手册得知,

写指令时,RS=L,RW=L,D0~D7为指令码,E管脚为一高电平脉冲;

写数据时,RS=H,RW=L,D0~D7为数据,E管脚也为一高电平脉冲。

P3^4与液晶模块6管脚相连,控制液晶模块使能。

首先介绍液晶模块的指令。

初始化指令0x38:设置液晶为16x2显示。

显示开关及光标设置:

00001DCB D=1,开显示;

C=1。显示光标;

B=1,光标闪烁。

000001NS N=1,读写一个字符后地址指针加1,光标加1;

N=0,读写一个字符后地址指针减1,光标减1

S=1,写一个字符时,整屏显示向左移动(N=1)或右移(N=0)

S=0,不移动

数据写入控制指令:

LCD模块中的RAM地址映射如下

 

 

要想把数据写入X地址,则先要输入指令0x80+X;

例如想让字符显示在第二行的第一个,则在将字符传入前,要写入指令write_command(0x80+0x40)

此外,0x01H表示显示清屏,数据指针清零,所有显示清零;

0x02H表示显示回车,数据指针清零。

了解了这些之后,可以知道如果我们想要控制液晶的显示,就要先学会怎样向液晶写指令和写数据。

写指令函数

//向LCD1602写指令

voidwrite_com(ucharcom)

{

lcdrs=0;//RS=L

P0=com;//P0口输出

delay(5);//延时

lcden=1;//E=H

delay(5);

lcden=0;//延时后,E变为L,造成了一个高电平脉冲,P0口高低电平被写入

}

写数据的方法与此类似,照葫芦画瓢即可:

//向LCD1602写数据

/*

只需要将RS置高即可,

其他语句与写指令函数相同

*/

voidwrite_date(uchardate)

{

lcdrs=1;//RS=H

P0=date;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

有了这两个函数,我们就可以向液晶模块里面写入指令和数据,从而实现对其的控制了。

为了实现一个完整的对LCD1602功能的封装体现,我们还要再写一个初始化的函数,用于对LS1602的初始化工作

voidInital()

{

lcden=0;//先不使能

write_com(0x38);//写入初始化指令

write_com(0x0e);//显示开,光标显示但不闪烁

write_com(0x06);//读写后指针加1,光标加1

write_com(0x01);//显示清屏,指针清零

}

至此,就完成了对LCD1602的功能封装,在其他的程序中,就可以使用这些函数用于液晶显示,例如下面实现的用1602显示计时器。

计时器量程为1小时,显示格式为XX:XX(前面为分,后面为秒)

用到了单片机中的计时器0,工作方式1,。50ms发生一次中断,使一个用于计数的number自增一次。number初值设为1,故number自增至20时,说明计时1s已到,可以Do Something,也就是把处理函数加进来了。

C文件如下:

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitlcden=P3^4;

sbitlcdrs=P3^5;

ucharnum=1;

ucharmiao=0;

ucharfen=0;

voidInital();

voidInital_Time();

voidwrite_com(ucharcom);

voidwrite_date(uchardate);

voiddelay(ucharTIme);

voidClock();

voidDisplay(ucharx,uchary);

voidmain()

{

Inital_TIme();

Inital();

TR0=1;

while(1)

{

if(num》=20)//1s

{

//DoSomething

Clock();

Display(fen,miao);

}

}

}

//在LCD上显示分,秒

voidDisplay(ucharx,uchary)

{

//本例中,x为分钟,y为秒

ucharxshi,xge,yshi,yge;

xshi=x/10;

xge=x%10;

yshi=y/10;

yge=y%10;

write_com(0x01);

write_date(xshi+‘0’);

write_date(xge+‘0’);

write_date(‘:’);

write_date(yshi+‘0’);

write_date(yge+‘0’);

}

//1s到时对计时器(也就是fen,miao变量)的处理函数

voidClock()

{

num=1;

miao++;

//1min

if(miao》=60)

{

fen++;

miao=0;

}

//1h,重新开始

if(fen》=60)

{

fen=0;

miao=0;

}

}

//中断服务函数,num自增,重新装载初值

voidser_TImer0()interrupt1

{

num++;

TH0=0x4c;

TL0=0x00;

}

//LCD1602初始化

voidInital()

{

lcden=0;//先不使能

write_com(0x38);//写入初始化指令

write_com(0x0e);//显示开,光标显示但不闪烁

write_com(0x06);//读写后指针加1,光标加1

write_com(0x01);//显示清屏,指针清零

}

//定时器初始化

voidInital_TIme()

{

TR0=0;

//设置定时器工作方式

TMOD=0x01;

//开定时器中断

EA=1;

ET0=1;

//装填初值

TH0=0x4c;

TL0=0x00;

}

//向LCD1602写指令

voidwrite_com(ucharcom)

{

lcdrs=0;//RS=L

P0=com;//P0口输出

delay(5);//延时

lcden=1;//E=H

delay(5);

lcden=0;//延时后,E变为L,造成了一个高电平脉冲,P0口高低电平被写入

}

//向LCD1602写数据

/*

只需要将RS

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭