还剩4页未读,继续阅读
文本内容:
了解LCD液晶显示屏.___人生重要的不是所站的位置,而是所朝的方向不要用自己的需求去衡量别人的给予,否则永远是抱怨本文由shixiaoming08贡献pdf文档可能在WAP端浏览体验不佳建议您优先选择___,或下载源文件到本机查看第一节了解LCD液晶显示屏来源http://___.natiem.com(朗腾电子__)__程敬锋一字符型点阵式LCD液晶显示屏LCD的应用很广泛,简单如手表上的液晶显示屏,仪表仪器上的液晶显示器或者是电脑笔记本上的液晶显示器,都使用了LCD在一般的办公设备上也很常见,如传真机,复印机,以及一些娱乐器材玩具等也常常见到LCD的足迹本站要介绍的LCD为字符型点阵式LCD模块(liquidCrystalDisplayModule简称LCM,或者是字符型LCD字符型液晶显示模块是一类专门用于显示字母,数字,符号等的点阵式液晶显示模块在显示器件上的电极图型设计,它是由若干个5*7或5*11等点阵符位组成每一个点阵字符位都可以显示一个字符点阵字符位之间有一空点距的间隔起到了字符间距和行距的作用目前市面上常用的有16字*1行,16字*2行,20字*2行和40字*2行等的字符模块组这些LCM虽然显示字数各不相同,但是都具有相同的输入输出界面本章将以WINTECH16*2字符型液晶显示模块WM-C1602N为例,详细介绍字符兴高采烈晶显示模块的应用技术一般字符LCD模块的控制器为__日立新华通讯社司的HD44780及其替代集成电路,驱动器为HD44100及其替代的集成电路以下将会略做介绍一般初学者由字符型LCD入手比较简单,学完之后,再进一步控制图案型LCD模块图
1.1所示为16*2地的外观,表
1.2为LCM的接脚及功能图
1.1a液晶显示模块WM-C1602N背后图
1.1b:液晶显示模块WM-C1602N丰姿图
1.1c液晶显示模块WM-C1602N规格表
1.2液晶显示模块WM-C1602N的接脚及功能应用液晶显示模块WM-C1602N那得先对她的内部结构有所了解,下一节我将会带大家进一步的了解液晶显示模块WM-C1602N第二节LCD液晶显示屏的内部结构来源http://___.natiem.com(朗腾电子__)__程敬锋液晶显示模块WM-C1602N的内部结构可以分成三部份一为LCD控制器,二为LCD驱动器,三为LCD显示装置,如图示
2.1所示图
2.1LCM内部方块图目前大多数的LCD液晶显示器的控制器都有采用一颗型号为HD44780的集成电路作控制器HD44780是集控制器,驱动器于一体,专用于字符显示控制驱动集成电路HD44780是字符型液晶显示控制器的代表电路HD44780集成电路的特点1HD44780不仅作为控制器而且还具有驱动40*16点阵液晶像素的能力,并且HD44780的驱动能力可通过外接驱动器扩展360列驱动2HD44780的显示缓冲区及用户自定义的字符发生器CGRAM全部内藏在芯片内3HD44780具有适用于M6800系列MPU的接口,并且接口数据传输可为8位数据和4位数据传输两种方式4HD44780具有简单而功能较强的指令集,可实现字符__,闪烁等显示功能由于HD44780的DDRAM容量所限,HD44780可控制的字符高达每行80个字,也就是5*80=400点,HD44780内藏有16路行驱动器和40路列驱动器,所以HD44780本身就具驱动有16*40点阵LCD能力(即单行16个字符或两行8个字符)如果在外部加一HD44100外扩展多40路/列驱动,则可驱动16*2LCDHD44780内藏的字符发生存储器(CGROM已经存储了160个不同的点阵字符图形,如表
2.3所示,这些字符有___数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码比如数字“1”的代码是00110001B(31H)又如大写的英文字母“A”的代码是0_____01B,(41H)表
2.3液晶显示模块WM-C1602N的CGRAM字符图形代码对应表液晶显示模块WM-C1602N在显示“1”时,则我们只需将ASCII码31H存入DDRAM即可显示时模块把地址31H中的点阵字符图形显示出来,我们就能看到数字“1”了DDRAM有80bytes空间,共可显示80个字,地址与实际显示位置的排列顺序跟LCD的型号有关,液晶显示模块WM-C1602N的显示地址如图
2.2所示图
2.2地址映射图基本了解液晶显示模块WM-C1602N的内部结构后!让我们再去熟悉指令的用法跟我来继续学习第三节字符LCD液晶屏控制器的指令来源http://___.natiem.com(朗腾电子__)__程敬锋字符LCD的指令共有11条,如表
3.1所示已有详细功能和用法表
3.1LCD的指令表注表中的*表示可以为0或1大家熟悉指令后,下一节大家来跟我做个实验用液晶显示字母“A”第四节让LCD液晶显示屏显示字母“A”实例来源http://___.natiem.com(朗腾电子__)__程敬锋做这实验之前我们得先准备好以下器材1WM-C1602N液晶显示模块一个,2AT__C51芯片一片,3编程器一台,编程器软件,4当然少不了电脑一台现在你可以按图
4.1的驱动LCD电路做个电路板图
4.1:用__C51驱动LCD的电路其中VSS为地电源,VDD接5V正电源,图
4.1中的VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器RW为读写__线,高电平时进行读操作,低电平时进行写操作当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙__,当RS为高电平RW为低电平时可以写入数据E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令DB0~DB7为8位双向数据线,BLK和BLA是背光灯电源大家可用万用板按图
4.1中的原理去做,做好如图
4.2图
4.2上一课我们已经知道了字母“A”的代码是0_____01B了,怎么!还不明白?你自己去查一下其实现在有很多软件可以查出内码的可以在本站找到,不过我还是要让大家去理解为好以下是显示字母“A”的程序;********************************;让LCD显示字母“A”的程序;朗腾电子;*******************************RSBITP
3.0RWBITP
3.1EBITP
3.5DB0_DB7DATAP1;********************************ORG00HAJMPSTARTORG000BHAJMPINSE;********************************ORG50HSTART:MOVTMOD#0MOVTL0#0MOVTH0#0SETBEASETBET0SETBTR0MOVR5#50MOVSP#60HACALLINITMOVA#_____000B;写入显示地址为第一行第一位ACALLWriteMOVA#0_____01B;字母“A”的代码ACALLWriteDDRLOOP:AJMPLOOP;*******************************INSE:MOVTL0#0;中断服务子程序MOVTH0#0DJNZR5NOMOVR5#50NO:RETI;******************************INIT:MOVA#00111000B;使用8Bits汇流排,显示两行,使用5*7的字型LCALLWriteMOVA#00001110B;显示器开,光标开,光标闪烁LCALLWriteMOVA#00000110B;字符不动,光标自动右移一格LCALLWriteRET;*******************************CheckBusy:;检查忙碌子程序PUSHACCCB_Loop:CLRRSSETBRWCLRESETBEMOVADB0_DB7CLREJBACC.7CB_LoopPOPACCACALLDELAYRET;********************************Write:;写入IR寄存器子程序ACALLCheckBusyCLRECLRRSCLRRWSETBEMOVDB0_DB7ACCCLRERET;********************************WriteDDR:;写入DR寄存器子程序ACALLCheckBusyCLRESETBRSCLRRWSETBEMOVDB0_DB7ACCCLRERET;**********************************DELAY:;延时子程序MOVR6#5D1:MOVR7#248DJNZR7$DJNZR6D1RETEND以上程序书写时用二进制目的是为了方便大家去理解将上面的程序编译好后用编程器将程序写入AT__C51芯片,然后将写好的AT__C51芯片插入刚才做好的实验板上,通电运行,OK!哈哈字母“A”出来了!!!做完实验后是不是觉得很有趣呢?好了!让我们熟悉指令的用法第五节字母“B”显示在二行的实例来源http://___.natiem.com(朗腾电子__)__程敬锋上一课我们已经实验了液晶显示屏显示字母“A”了如图
5.1所示,字母“B”显示在第二行第六位你现在可以写出它的程序吗?还是我带大家来做个实验吧!!!现在先来介绍用软件查出字符“B”内码的方法,先你下载内码查询软件,__下载解压后,__图标启动软件,如图
5.2所示,输入字符“B”图
5.2__“内码显示”按钮,42就是字符“B”的内码了,简单吧?以下是显示字母“B”的程序;********************************;让LCD显示字母“B”的程序;朗腾电子;*******************************RSBITP
3.0RWBITP
3.1EBITP
3.5DB0_DB7DATAP1;********************************ORG00HAJMPSTARTORG000BHAJMPINSE;********************************ORG50HSTART:MOVTMOD#0MOVTL0#0MOVTH0#0SETBEASETBET0SETBTR0MOVR5#50MOVSP#60HACALLINITMOVA#C6H;写入显示地址为第二行第六位ACALLWriteMOVA#42H;字母“B”的代码ACALLWriteDDRLOOP:AJMPLOOP;*******************************INSE:MOVTL0#0;中断服务子程序MOVTH0#0DJNZR5NOMOVR5#50NO:RETI;******************************INIT:MOVA#38H;使用8Bits汇流排,显示两行,使用5*7的字型LCALLWriteMOVA#0EH;显示器开,光标开,光标闪烁LCALLWriteMOVA#06H;字符不动,光标自动右移一格LCALLWriteRET;*******************************CheckBusy:;检查忙碌子程序PUSHACCCB_Loop:CLRRSSETBRWCLRESETBEMOVADB0_DB7CLREJBACC.7CB_LoopPOPACCACALLDELAYRET;********************************Write:;写入IR寄存器子程序ACALLCheckBusyCLRECLRRSCLRRWSETBEMOVDB0_DB7ACCCLRERET;********************************WriteDDR:;写入DR寄存器子程序ACALLCheckBusyCLRESETBRSCLRRWSETBEMOVDB0_DB7ACCCLRERET;**********************************DELAY:;延时子程序MOVR6#5D1:MOVR7#248DJNZR7$DJNZR6D1RETEND上面的程序运行结果如下图下一节我给大家介绍建立液晶显示屏显相关子程序第六节建立LCD相关的子程序来源http://___.natiem.com(朗腾电子__)__程敬锋掘指数数都有半年多没有更新__了,这些日子里收到很多网友的____崔促完成文章,部份网友提及WM-C1602N液晶显示模块液晶显示模块__难的问题在此真诚感激这些支技我们的朋友,为了不失众望,今晚就为期待已久的朋友抽空写少少吧!!至于WM-C1602N液晶显示模块__并不困难,各电子商场均的售,并不一定是要WM-C1602N液晶显示屏,其实是1602或162就“OK”,只不过是生产商不同而已好了,闲话休提上几课我们已经实验了液晶显示屏显示字母了,其实大家亦不难理解上几个例子的源程序,只不过是由几个子程序构成以下介绍常用到的六个子程序1查看忙碌子程序2写指令到IR寄存器的子程序3写指令到DR寄存器的子程序4清除LCD显示器的子程序5启动LCD子程序6延时子程序现在就给出__液晶屏建立相关LCD规范的子程序1查看忙碌子程序;*******************************CheckBusy:;检查忙碌子程序PUSHACC;将A的内容放到堆栈区内,在此这句可能没有意义,但在实际应用中ACC是频繁使用;所以在进入子程序之前先把ACC的内容放入堆栈中,的,以免破坏原来在ACC的内容CB_Loop:CLRRS;选择指令暂存器SETBRW;选择读模式CLRE;禁能LCDSETBE;使能LCDMOVADB0_DB7;LCD的DB0-DB7的资料经由P1口存入ACC中,将以便查对第7位元BF是否为0CLRE;禁能LCDJBACC.7CB_Loop;判断由LCD读入资料的第7元位及BF是否为1,若为1表示LCD忙碌中POPACC;将累加器ACC的内容从堆栈区取出ACALLDELAY;调用延时程序RET;返回2写指令到IR寄存器的子程序;********************************Write:;写入IR寄存器子程序ACALLCheckBusy;检查忙碌CLRE;禁能LCDCLRRS;选择指令暂存器CLRRW;选择写模式SETBE;使能LCDMOVDB0_DB7ACC;将存在ACC内的指令码经由P1口输出到期LCDCLRE;禁能LCDRET;返回3写指令到DR寄存器的子程序;********************************WriteDDR:;写入DR寄存器子程序ACALLCheckBusy;检查忙碌CLRE;禁能LCDSETBRS;选择资料寄存器CLRRW;选择写模式SETBE;使能LCDMOVDB0_DB7ACC;将存在ACC内的指令码经由P1口输出到期LCDCLRE;禁能LCDRET;返回4清除LCD显示器的子程序;************************CLS:;清除LCD显示器程序MOVA#01H;将01H放入ACCACALLWrite;写指令到IR寄存器RET;返回5启动LCD子程序;******************************INIT:MOVA#38H;使用8Bits汇流排,显示两行,使用5*7的字型LCALLWrite;写指令到IR寄存器MOVA#0EH;显示器开,光标开,光标闪烁LCALLWrite;写指令到IR寄存器MOVA#06H;字符不动,光标自动右移一格LCALLWrite;写指令到IR寄存器RET;返回6延时间为R6*500us子程序:;**********************************DELAY:;延时子程序MOVR6#5D1:MOVR7#248DJNZR7$DJNZR6D1RET以上常用LCD应用的相关子程序,下一节介绍如何用LCD液晶显示屏显示字符串第七节用LCD显示屏显示字符串来源http://___.natiem.com(朗腾电子__)__程敬锋以下程序是要LCD液晶显示屏显示“Natiem实验来加深对LCD显示屏的应用和理解Electron”及“natiem@21cn.com”,大家不妨动手图
7.1程序流程图;********************************;让LCD显示字符串的程序;*******************************RSBITP
3.0RWBITP
3.1EBITP
3.5DB0_DB7DATAP1;********************************ORG00HAJMPSTARTORG000BHAJMPINSE;嵌入;********************************ORG50HSTART:MOVTMOD#0MOVTL0#0MOVTH0#0SETBEASETBET0SETBTR0MOVR5#50MOVSP#60HACALLINITACALLCLSMOVA#80HACALLWriteMOVDPTR#L1ACALLPR_STRINGMOVA#C0HACALLWriteMOVDPTR#L2ACALLPR_STRINGLOOP:AJMPLOOPL1:DB20h4eh61h74h69h65h6dh20h45h6ch65h63h74H72h6fh6eh00hL2:DB7eH6Eh61H74H69H65H6DH40H32H31H63H6eH2eH63H6fH6dH00H;*******************************INSE:MOVTL0#0MOVTH0#0DJNZR5NOMOVR5#50NO:RETI;******************************INIT:MOVA#38HLCALLWriteMOVA#0EHLCALLWriteMOVA#06HLCALLWriteRET;*******************************CheckBusy:PUSHACCCB_Loop:CLRRSSETBRWCLRESETBEMOVADB0_DB7CLREJBACC.7CB_LoopPOPACCACALLDELAYRET;********************************Write:ACALLCheckBusyCLRECLRRSCLRRWSETBEMOVDB0_DB7ACCCLRERET;********************************WriteDDR:ACALLCheckBusyCLRESETBRSCLRRWSETBEMOVDB0_DB7ACCCLRERET;**********************************CLS:MOVA#01HACALLWriteRET;**********************************PR_STRING:PUSHACCPR_LOOP:CLRAMOVCA@A+DPTRJZEND_PRACALLWriteINCDPTRAJMPPR_LOOPEND_PR:POPACCRET;**********************************DELAY:MOVR6#5D1:MOVR7#248DJNZR7$DJNZR6D1RETEND将以上程序编译后写入单片机效果如下:第八节用LCD显示屏显示图形来源http://___.natiem.com(朗腾电子__)__程敬锋上一节介绍了LCD液晶显示屏显示字符串那么字符型LCD液晶显示屏能够显示图形吗?答案是肯定的现就让字符型LCD液晶显示屏显示图形的方法作一介绍记得开始时同大家说过,字符产生器RAM(CGRAM)可由使用者设计8个5*7点阵字型或图形一个5*7的字型或图形须用到8bytes的存储空间,每bytes的bit5bit6bit7都是无效位元,LCD内部的CGRAM的地址的6位元的长度,即A0--A5,而每一个字型或图形须占用8bytes,所以此区域只能存8个字型或图形如果你已经在CGRAM造好字型或图形,要让LCD显示你的图形时,只需要在DDRAM写入00H--07H的地址,即可显示DDRAM所对应的资料了下面举个例子好让大家去理解,就让LCD液晶显示屏显示一座宝殿的图形吧!在程序设之前你必须将设计好的图形用二进制代码找出来,图
8.1是图形与地址的对应图图
8.1前面已提到,一个字型或图形为8bytes的资料,而且每一个资料的7,6,5元位是无效位,因为它是5*7的点阵,要将图形转为二进制码,你必需将图形分解成8个图形,分别将每个图形用二进制代码表示,如图
8.2--
8.9图
8.2DDRAM的地址07H的图形代码为00H,00H,00H,00H,01H,03H,03H图
8.3DDRAM的地址08H的图形代码为04H,04H,0EH,1FH,1FH,1FH,0AH图
8.4DDRAM的地址09H的图形代码为00H,00H,00H,00H,10H,18H,18H图
8.5DDRAM的地址46H的图形代码为00H,00H,17H,10H,17H,17H图
8.6DDRAM的地址47H的图形代码为07H,0AH,15H,03H,1CH,1FH,1FH图
8.7DDRAM的地址48H的图形代码为1FH,1FH,0EH,1FH,0EH,1FH,1FH图
8.8DDRAM的地址49H的图形代码为1CH,0AH,15H,1FH,07H,1FH,1FH图
8.9DDRAM的地址4AH的图形代码为00H,00H,00H,1DH,01H,1DH,1DH图
8.10程序流程图以下是显示宝殿图形的程序;********************************;让LCD显示图形程序;********************************RSBITP
3.0RWBITP
3.1EBITP
3.5DB0_DB7DATAP1;********************************ORG00HAJMPSTARTORG000BHAJMPINSE;嵌入;********************************ORG50HSTART1:MOVTMOD#0MOVTL0#0MOVTH0#0SETBEASETBET0SETBTR0MOVR5#50CLRP
3.2SETBP
3.1START MOVSP#60HACALLINITACALLCLSACALLS__E_FONTMOVA#_____111BACALLWriteMOVR1#0OUT_DDRAM1:MOVACCR1ACALLWriteLCDINCR1CJNER1#3OUT_DDRAM1MOVACC#11000110BACALLWriteMOVR1#3OUT_DDRAM2:MOVACCR1ACALLWriteLCDINCR1CJNER1#8OUT_DDRAM2LOOP:JMPLOOP;*******************************INIT:MOVA#38HLCALLWriteMOVA#0EHLCALLWriteMOVA#06HLCALLWriteRET;*******************************CheckBusy:PUSHACCCB_Loop:CLRRSSETBRWCLRESETBEMOVADB0_DB7CLREJBACC.7CB_LoopPOPACCACALLDELAYRET;********************************Write:ACALLCheckBusyCLRECLRRSCLRRWSETBEMOVDB0_DB7ACCCLRERET;********************************WriteLCD:ACALLCheckBusyCLRESETBRSCLRRWSETBEMOVDB0_DB7ACCCLRERET;**********************************CLS:MOVA#01HACALLWriteRET;**********************************S__E_FONT:MOVACC#0_____00BACALLWriteMOVR4#64MOVDPTR#USER_PATTERNPUT_LOOP:CLRACCMOVCA@A+DPTRACALLWriteLCDINCDPTRDJNZR4PUT_LOOPMOVA#_____000BACALLWriteRET;***********************************USER_PATTERN:DB00H00H00H00H01H03H03H00HDB04H04H0EH1FH1FH1FH0AH00HDB00H00H00H00H10H18H18H00HDB00H00H00H17H10H17H17H00HDB07H0AH15H03H1CH1FH1FH00HDB1FH1FH0EH1FH0EH1FH1FH00HDB1CH0AH15H1FH07H1FH1FH00HDB00H00H00H1DH01H1DH1DH00H;*******************************INSE:MOVTL0#0MOVTH0#0DJNZR5NOMOVR5#50CPLP
3.2CPLP
3.1NO:RETI;**********************************DELAY:MOVR6#5D1:MOVR7#248DJNZR7$DJNZR6D1RETEND好了!!经过几节的学习与实践,大家对LCD液晶显示屏亦有了解,文章到此亦要暂告一段落由于笔者也只是菜鸟一只,文章难免错漏,不妥之处请诸位大虾不吝赐教在此感谢大家对我的支持在日后的文章将会介绍一些应用实例,欢迎网友投稿,互相交流,学习,共同发展!!!转载请注明出处____1李维缇郭强,《液晶显示器件应用技术》1999年2何立民,《单片机应用技术选编》1998年图
7.21。