项目六 1602液晶显示计数器制作_第1页
项目六 1602液晶显示计数器制作_第2页
项目六 1602液晶显示计数器制作_第3页
项目六 1602液晶显示计数器制作_第4页
项目六 1602液晶显示计数器制作_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目六

1602液晶显示计数器制作1602液晶简介所谓1602就是指它的显示内容为16X2,即显示两行,每行16个字符。1602LCD模块带有背光光源,并行接口,可以与单片机I/O口直接相连。项目纲要任务一1602液晶显示字符任务二1602液晶显示计数器制作任务一1602液晶显示字符(一)任务要求

使用YL-236单片机实训考核装置显示模块中的1602LCD,上电后液晶屏第一行居中显示字符Welcome,第二行居中显示字符2013-05-01。显示界面如下图所示。任务一1602液晶显示字符实现本任务的方法:可以采用前面LED点阵显示的方法,建立显示缓冲区,将要显示的内容在显示缓冲区中定义,扫描函数负责将显示缓冲区中的内容送入DDRAM,其余全部由显示屏内部电路进行扫描显示。实现的方法这种方法看起来是多进行了一次缓冲(因为1602LCD已经有内部的显存了),但比较直观,容易理解;还有一种方法就是直接根据字符的位置,由显示函数直接将要显示的字符送入缓存中相应的位置。本项目采用前面一种方法。(二)任务分析任务一1602液晶显示字符2.1602液晶显示模块知识(1)模块外形及引脚

YL-236装置上1602液晶结构示意图数据总线接口DB0-DB7液晶电源开关控制引脚任务一1602液晶显示字符2.1602液晶显示模块知识(1)模块外形及引脚1602液晶引脚及其功能引脚号名称输入/输出作用1Vss电源负端(0V)2Vdd电源正端(+5V)3V0对比度调节4RS输入数据/指令寄存器选择端RS=0,输入指令;RS=1,输入数据。5R/W输入读写选择端R/W=0,写操作;R/W,读操作。6E输入使能信号,下降沿触发7-14DB0-DB7输入/输出数据总线从低位到高位15LEDA背光电源正端(+5V)16LEDK背光电源负端(0V)任务一1602液晶显示字符2.1602液晶显示模块知识(2)模块显示字符原理

模块内部由三部分组成,控制器和驱动器往往由专用的集成电路完成,大部分都是HD44780或其兼容的芯片。HD44780主要由DDRAM、CGROM等部分组成。任务一1602液晶显示字符2.1602液晶显示模块知识(2)模块显示字符原理

DDRAM为数据显示RAM(DataDisplayRAM),用以存放要LCD显示的数据,能存储80个字符。只要将标准的ASCⅡ码放入DDRAM,内部控制线路就会自动将数据传送到显示器上,并显示出该ASCⅡ码对应的字符。显示位置序号1234567。。。。。。3940DDRAM地址第一行00010203040506。。。。。。2627第二行40414243444546。。。。。。6667注:如果要在LCD1602屏幕的第一行第二列显示一个"P"字,就要向DDRAM的01H地址写入“P”字的代码0X50就行了。那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了。第二行也一样用前16个地址,所以在后面写程序的时候注意第二行的位置是从40开始的。另外需要注意的是:我们往DDRAM里的01H地址处送一个数据,如0x50(P的代码)并不能显示P出来,原因就是如果你要想在DDRAM的01H地址处显示数据,则必须将01H加上80H,即81H,若要在DDRAM的02H处显示数据,则必须将02H加上80H即82H。依次类推。任务一1602液晶显示字符2.1602液晶显示模块知识(2)模块显示字符原理

CGROM为字符产生器ROM(CharacterGeneratorROM),它存储了由8位字符码生成的192个5点阵字符和32种5×10点阵字符。8位字符编码和字符的对应关系(内置字符集)如图所示。每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(0X41),显示时模块把地址0X41中的点阵字符图形显示出来,我们就能看到字母“A”了。任务一1602液晶显示字符2.1602液晶显示模块知识模块与单片机硬件接口电路(3)模块的使用——硬件接口电路任务一1602液晶显示字符2.1602液晶显示模块知识(3)模块的使用——模块控制指令指令名称控制信号指令代码功能RSR/WD7D6D5D4D3D2D1D0显示模式设置0000111000设置16X2,5X7点阵,8位数据显示开关控制0000001DCB设置显示、光标、闪烁开关:D:为1开显示;为0关显示C:为1显示光标;为0不显示光标B:为1光标闪烁;为0不显示光标输入模式控制00000001NS设置光标、显示画面移动方向N:为1,读写一个字符后,地址指针加1,光标加1;为0,读写一个字符后地址指针减1,光标减1。S:为1,写入一个字符后整屏左移(N=1)或右移(N=0);为0,写一个字符整屏显示不动。读数据11数据从DDRAM中读取数据写数据10数据对DDRAM进行写数据清屏0000000001清除显示器的内容,光标到左上角光标归位设定000000001*地址计数器清0,DDRAM数据不变。*表示为0或1。数据指针设置0080H+地址码(0-27H,40-47H)设置数据地址指针忙碌标志01BF指示LCD目前的工作情况。BF为1,LCD忙,不接收单片机送过来的数据;为0,表示已准备好接收指令或数据任务一1602液晶显示字符2.1602液晶显示模块知识(3)模块的使用——模块指令操作时序任务一1602液晶显示字符2.1602液晶显示模块知识(3)模块的使用——驱动函数voiddelay(uintus);//短延时函数声明voiddelay_ms(uintms);//毫秒级延时函数声明voidwcmd_1602(ucharcmd);//写命令到LCD函数声明voidwdat_1602(uchardat);//写数据到LCD函数声明voidinit_1602();//初始化函数声明voiddisp_one(ucharx,uchary,uchardispbuf);//到指定位置显示单个字符的函数声明voiddisp_mul(ucharx,uchary,ucharcode*dispbuf);//到指定的位置显示多个字符的函数声明任务一1602液晶显示字符2.1602液晶显示模块知识(3)模块的使用——驱动函数/******向LCD写入命令********/voidwcmd_1602(ucharcmd){delay(60);//延时,不检测忙信号E=0;//初始状态E=0RS=0;//初始状态RS=0

RW=0;//初始状态RW=0

_nop_();//极短延时

DATAPORT=cmd;//单片机给出有效的指令数据

_nop_();//极短延时_nop_();

E=1;//产生E下降沿执行命令写入_nop_();_nop_();_nop_();E=0;

_nop_();}任务一1602液晶显示字符2.1602液晶显示模块知识(3)模块的使用——驱动函数/******到指定的位置显示字符*******************/voiddisp_one(ucharx,uchary,uchardispbuf){

y&=0x01;//限制行数y不能大于1 x&=0x0f;//限制1行字符数x不能大于15 if(y==1)//如果在第二行则字符地址从0x40 x|=0x40; x|=0x80;//设置地址指针 wcmd_1602(x);//写地址码 wdat_1602(dispbuf);//写数据}任务一1602液晶显示字符2.1602液晶显示模块知识(3)模块的使用——驱动函数/******到指定的位置显示多个字符****************/voiddisp_mul(ucharx,uchary,ucharcode*dispbuf){ ucharlen,i; len=strlen(dispbuf);//计算要显示的字符串长度 y&=0x01;//限制X,Y位置 x&=0x0F; if(x<=0x0F)//X坐标小于一行执行显示

{ for(i=0;i<len;i++) {

disp_one(x,y,dispbuf[i]);//显示单个字符 x++; }

}

}任务一1602液晶显示字符3.C51的库函数简介

C51强大功能及其高效率的重要体现之一在于其丰富的可直接调用的库函数,要使用库函数,则必须将用到的每个库函数都在相应的头文件(.H)中给出了函数原型声明,即用#include,将有关的头文件包含进来,然后再用户的源文件中就可以直接使用包含的头文件中的库函数了。(1)专用寄存器库函数REG××.H专用寄存器库函数REG××.H中定义了所有8052的SFR及其位,定义时都用大写字母。任务一1602液晶显示字符3.C51的库函数简介(2)字符串函数STRING.H

该文件中包括了对字符的复制、比较、移动等函数,使用这些函数可以很方便地对字符串进行处理。例如:strlen函数的函数原型为intstrlen(char*src);其功能是返回字符串src中的字符个数,包括结束符。(3)内部函数INTRINS.H该文件提供了几个最常用的移位操作函数以及空操作等函数。例如:_nop_函数的原型为void_nop_(void),其功能是产生一个MCS-51单片机的NOP(空)指令,实现短暂的延时。任务一1602液晶显示字符(三)硬件电路1602液晶显示字符电路原理图任务一1602液晶显示字符(三)硬件电路硬件模块接线图任务一1602液晶显示字符(四)参考程序#include<reg52.h>#include"1602LCD.h"/******变量定义***************/ucharcodeOnedisp1[] ={"Welcome!"}; //待显示的字符串ucharcodeOnedisp2[] ={"2013-05-01"}; //待显示的字符串/******主函数**************/voidmain() //定义主函数{init_1602();

//LCD初始化

delay(50); //延时等待稳定disp_mul(0,0,Onedisp1);//第一行显示Welcome!

disp_mul(0,1,Onedisp2); //第二行显示2013-05-01while(1); //无限循环}任务一1602液晶显示字符(五)任务实施步骤1.硬件电路连接;2.打开KEIL软件,通过菜单“项目/新建项目”,新建立一个工程项目1602LCD1,然后再建一个文件名为1602LCD1.C的源程序文件,将上面的参考程序输入并保存,同时将该文件添加到项目中;3.对源程序进行编译和链接,产生目标代码并使用下载器将目标代码写入单片机;4.通电观察运行结果,如果不能实现任务要求,则修改程序、调整和检查硬件连接,直到1602液晶显示正常;5.进行扎线,整理。谢谢!任务二1602液晶显示计数器制作(一)任务要求

使用YL-236单片机实训考核装置显示模块中的1602LCD制作一个计数器,显示界面如图所示。该计数器具体要求如下:1.计数器上电后第一行显示“Count:000”(在Count:后空一格,然后是三位计数器的显示数值从000-999)。第二行显示功能操作键提示字符“S1:+S2:-S3:R”。2.计数器使用三个按键对计数器进行控制。其中:S1键为计数值加键,每按一次,显示的计数值加1;S2为计数值减键,每按一次键,显示的计数值减1;S3键为复位键,按一次,计数器复位,显示的计数值为000。任务二1602液晶显示计数器制作与本项目的第一个任务相比,LCD1602在显示上的最大区别是第一行中的计数值会随着计数的进行而实时改变;而第一行的count:和第二行显示的字符是固定不变的,这些可以采用与第一个任务相同的方法,调用到指定的位置显示字符的子函数,将要显示的内容送到显示缓冲区。而计数值因为是变量,所以必须定义变量,显示时只要将该变量的实时值拆分后送到相应的显示位置就可以显示所需的内容了。按键等部分实现比较简单,这里就不再多述。(二)任务分析任务二1602液晶显示计数器制作(三)硬件电路液晶显示计数器电路原理图任务二1602液晶显示计数器制作(三)硬件电路液晶显示计数器电路模块接线图任务二1602液晶显示计数器制作(四)参考程序主函数流程图任务二1602液晶显示计数器制作/******变量定义***************/ucharOnedisp1[]={"Count:"};//待显示的字符串ucharcodeOnedisp2[]={"S1:+S2:-S3:P"};//待显示的字符串ucharcodedisp_tab[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x20};//0-9,不显示uintcount=0;//设置计数变量(四)参考程序/******计数变量处理***************/Onedisp1[11]=disp_tab[count/100];//取计数百位数值送缓冲区Onedisp1[12]=disp_tab[(count%100)/10];//取

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论