历史上的今天
返回首页

历史上的今天

今天是:2025年01月14日(星期二)

正在发生

2021年01月14日 | 51单片机对LCD液晶显示器的控制

2021-01-14 来源:eefocus

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


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


51单片机对LCD液晶显示器的控制


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


其中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地址映射如下


51单片机对LCD液晶显示器的控制


要想把数据写入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写数据


推荐阅读

史海拾趣

国芯佳品公司的发展小趣事

机顶盒,全称为数字视频变换盒,是现代家庭娱乐中不可或缺的重要设备。它作为连接电视机与外部信号源的桥梁,不仅承担着接收数字电视信号并将其转换为适合电视播放格式的基本任务,还通过技术的不断演进,极大丰富了用户的视听体验。

从专业角度来看,机顶盒经历了从模拟到数字的飞跃,涵盖了多种类型,如DVB-S(数字卫星机顶盒)、DVB-C(有线电视数字机顶盒)、IPTV机顶盒等。这些机顶盒通过不同的传输介质(如有线电缆、卫星天线、宽带网络)接收信号,并借助内部高效的解码器,将数字信号转换成高质量的音视频流,实现了高清乃至4K超高清的播放效果。

在科普层面,机顶盒的普及极大地推动了家庭娱乐的多元化。它不仅让用户能够收看更多样化的电视节目,还能通过连接互联网,提供电子节目指南、在线视频、网页浏览、社交媒体互动等增值服务。此外,一些先进的机顶盒还集成了智能语音助手、家庭影院功能,甚至支持存储个人媒体文件,让用户的娱乐体验更加个性化、便捷化。

随着5G、云计算、人工智能等技术的不断发展,机顶盒正朝着更高清、更智能、更互动的方向迈进。它不仅将继续作为电视内容的接收和展示终端,更将成为智能家居生态系统中的重要一环,为用户带来更加丰富、沉浸的娱乐享受。

Anadigm公司的发展小趣事

Anadigm是一家曾经存在的半导体公司,专注于可编程模拟信号处理器(PASP)技术。以下是Anadigm公司发展的相关故事:

  1. 公司成立与初期发展:Anadigm公司成立于1997年,总部位于美国加利福尼亚州圣塔莫尼卡市。公司的创始人致力于开发一种新型的可编程模拟信号处理器(PASP),以应对传统模拟电路设计的局限性。通过引入数字技术,Anadigm旨在提供更灵活、高性能的模拟信号处理解决方案。

  2. PASP技术的推出与市场应用:Anadigm公司于2000年推出了其首款可编程模拟信号处理器产品系列。这些器件具有灵活的可编程性和高度集成的特点,能够适应多种应用场景,包括电力管理、医疗设备、汽车电子和工业控制等领域。Anadigm的PASP技术受到了行业的关注,并在市场上取得了一定的成功。

  3. 技术创新与产品优化:Anadigm公司不断投入研发,致力于改进其PASP技术并推出更先进的产品。公司持续与客户合作,了解市场需求并进行技术创新,以满足不断变化的行业需求。Anadigm的产品不断优化,性能不断提升,赢得了客户的信赖和市场份额的扩大。

  4. 合并与收购:尽管Anadigm公司在PASP技术方面取得了一定的成就,但面临着激烈的市场竞争和资金压力。在公司运营一段时间后,Anadigm于2008年被美国半导体公司Exar Corporation收购。此次收购使得Anadigm成为Exar的全资子公司,继续在模拟信号处理领域发展。

  5. 最终终止业务:然而,随着时间的推移,Anadigm在市场上的地位逐渐下滑,未能在激烈的竞争中保持竞争优势。最终,Exar Corporation于2014年宣布终止Anadigm的业务,并关闭其产品线。这标志着Anadigm作为一个独立的实体在半导体行业的终结。

以上是Anadigm公司发展的一些主要故事,展示了该公司从创立到终止业务的发展历程。

风华(FH)公司的发展小趣事

随着光伏胶膜业务的快速发展,福斯特面临着仓库管理和存储的巨大挑战。光伏胶膜成品体积大、重量重,传统人工作业方式效率低下且劳动强度大。为了应对这一挑战,福斯特引入了智能仓储系统,与亨通智能合作打造自动化立库系统。该系统通过堆垛机、RGV、缠绕膜等设备的配合使用,实现了库内产品的全面自动化搬运、存储与管理。这不仅大大提高了仓库的运营管理效率,还确保了产品的先进先出和库存盘点的准确性。这一智能化改造不仅提升了福斯特自身的竞争力,也为整个光伏行业的数字化转型树立了标杆。

ELPIDA公司的发展小趣事

ELPIDA公司成立于1999年,是日本在DRAM(动态随机存取存储器)领域的重要企业。它的成立是对当时日本半导体产业的一次重要整合,由NEC、日立、三菱电机等公司的DRAM业务合并而成。这一举措旨在振兴日本在DRAM领域的竞争力,并保护国内DRAM产业。

艾迈斯(AMASS)公司的发展小趣事

在产品研发和技术创新的同时,艾迈斯(AMASS)公司也注重品牌建设和市场推广。公司积极参加各种行业展会和交流活动,与业界同行建立了广泛的合作关系。同时,艾迈斯还通过广告宣传、媒体报道等多种方式提升品牌知名度和影响力。这些努力使得艾迈斯在电子行业中的地位逐渐提升,成为了业内颇具影响力的品牌之一。

AEMC Instruments公司的发展小趣事

除了提供优质的产品外,AEMC Instruments公司还注重服务升级和客户关怀。公司建立了完善的客户服务体系,提供售前咨询、售后技术支持等全方位服务。同时,公司还定期举办技术培训和交流活动,帮助客户更好地使用和维护产品。这些举措不仅提高了客户的满意度和忠诚度,也促进了公司与客户的长期合作关系。

以上五个故事是基于AEMC Instruments公司的发展情况所做出的概括性描述,旨在展示公司在电子行业中的成长历程和取得的成就。当然,具体的发展故事还需要根据公司的实际情况和历史记录来深入挖掘和呈现。

问答坊 | AI 解惑

清华大学王爽老师的《汇编语言〉第二版

清华大学王爽老师的《汇编语言〉第二版 非常不错的教材,循序渐进的带你教你运用汇编语言。 以前学汇编觉得很难,看了这本书,突然眼前开阔了,好多疑问都打开了 强烈推荐 [ 本帖最后由 madokaaukawa 于 2009-10-16 00:13 编辑 ]…

查看全部问答>

关于d12的某些基础问题??

这几天想学usb,就看了些usb协议方面的东西,pdiusbd12芯片,现在也基本能看懂网上的一些程序,但是有几个问题还是搞不大懂,望各位在座高手指点一二,谢谢~~ 1.D12到底何时产生中断   就是什么时候int_n会产生低电平呢? 2.Setup包 ...…

查看全部问答>

请大家的帮忙! 嵌入式开发新手 请指点一下吧!

做医疗设备的嵌入式开发到底需要一个什么样的编程情况?还有就是自己要一个什么样的编程环境? 我以前是做VC的数据库与网络开发的,所以想急切了解一下这方面的情况?明天就要去上班了,有点不知所措了,请高手指教! 请你们给我介绍一下做医疗设备的嵌 ...…

查看全部问答>

请教高手:一个关于全局变量随机变化的问题

在一个源文件中定义了一个普通的全局变量,该变量在同一个PROJECT的多个源文件中被调用. 可以通过按键改变这个全局变量InputSelection的值,从而选择不同的输入源. 前期调试中切换正常.但是现在发现一个奇怪的问题,该变量的值总是莫名其妙随机的 ...…

查看全部问答>

msp430 定时中断问题

我的程序大概如下 void main() {    .... //初始化     ..... } 在我的主函数里我调用一个函数,这个函数产生变量m=1 现在我想进入中断定时 #pragma vector = TIMERA0_VECTOR __interrupt void Timer_A0(void) { &n ...…

查看全部问答>

哪位大侠用EVC做过symbol mc1000的开发?

要求很简单,就是每扫一个条码,就在一个UP.TXT里写入一行,再扫条码在第二行写入,一直到不扫条码,哪位大侠能帮做一个,另开贴送分, 我的MAIL:lijixue@163.com…

查看全部问答>

mos管开关电路(求助)

外话:         也逛了很久论坛了,我就是那种典型的双子座,兴趣广泛,却从不深究。每当在论坛看到别人发的电路的时候,就随眼看看,然后似懂非懂的告诉自己,这个我会的。在编程方面,每次拿到开发板,都是 ...…

查看全部问答>

FPGA Editor应用技巧

利用FPGA Editor,你可以察看完成的设计并确定是否在FPGA构造一级真正实现了设计意图 – 而这对于任何工程师或现场应用工程师来说都是非常需要的。假设你拿到协作者的设计,需要对其进行修改,但他们的HDL源代码非常难于理解,或者根本没有任何注释 ...…

查看全部问答>

【晒经典】电视机方格产生器电路图

本帖最后由 dontium 于 2015-1-23 13:27 编辑 电视机的行频,场频,振荡器及调幅振荡器       IC1及其外围电路组成8位行频振荡器,IC2组成6倍场频振荡器,并由VT1调幅及后序电路组织输出。     …

查看全部问答>