1、目录1技术要求12设计方案及原理13实现方案33.1LM016L基本资料33.2硬件连接图74源程序代码85调式过程及结果145.1调式过程145.2结果146心得体会157参考文献16 液晶显示广告牌的设计1 技术要求在日常生活中,经常可见各种广告牌,本设计要求利用单片机控制液晶显示屏显示相关的信息,需完成下列任务:(1) 利用LCD显示某一条固定语句;(2) 能够通过按键对固定语句的显示方式进行修改,比如按一次按键,显示的字符少一个,一直到最后所有字符完全消失;或者按一次按键所有字符显示的位置左移一格等。2 设计方案及原理让LCD显示固定语句在C语言环境下只需将字符串直接赋给LCD即可,让
2、LCD显示的字符方式进行修改就得给LCD传递相关指令。第一步利用LCD显示某一条固定语句。LCD显示字符的时候,是一个一个字符显示,显示一个字符后, 光标加一或减一表示下一个字符显示的位置。因此显示固定语句的时候,我们可以先将固定语句存在一个字符串数组,光标操作为当写一个字符后地址指针加一。选择好初始地址后,利用一个循环结构程序将整个字符串数组内容显示出来。第二步让LCD显示的字符串显示方式进行修改。鉴于LCD自身就能将字符串以不同方式的显示出来,因此我们只需将对应指令语句传递给LCD即可,通过外部按键产生中断,让LCD来响应对应指令语句。方案流程图如图1所示。判断jishu值固定显示字符串系
3、统初始化开始中断返回变量jishu加1并对3取余按键中断产生按键中断右移左移闪烁120图1 程序流程图3 实现方案3.1 LM016L基本资料3.1.1 引脚说明LM016L为字符型液晶显示器LCD,其图形符号、引脚及属性如图2所示。引脚说明如下:数据线D7D0控制线(有3根:RS、RW、E)1根地线Vss一根电源线(VDD) 图2 LCD图形符号和引脚3.1.2 LM016L属性及RAM地址:LM016L的属性设置如下:每行的字符数为16,行数为2;时钟为250KHz;行1的字符地址为80H8FH行2的字符地址为C0HCFH 3.1.3 基本操作时序其具体时序见表1。表1 LM016L信号真
4、值表RSR/WE功能00下降沿写指令代码01高电平读忙标志和AC值10下降沿写数据11高电平读数据3.1.4 LCD指令集(1) 清屏指令RSR/WDB7DB6DB5DB4DB3DB2DB1DB00000000001功能: 清除液晶显示器,即将DDRAM的内容全部填入“空白”的字符码20H; 光标归位,即将光标撤回液晶显示屏的左上方; 将地址计数器(AC)的值设为0。(2) 光标归位指令RSR/WDB7DB6DB5DB4DB3DB2DB1DB0000000001*功能: 把光标撤回到显示器的左上方; 把地址计数器(AC)的值设置为0; 保持DDRAM的内容不变 (3) 输入模式指令设置RSR/
5、WDB7DB6DB5DB4DB3DB2DB1DB000000001I/DS功能:设定每次写入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。其中:I/D=1:数据读、写操作后,AC自动增一; I/D=0:数据读、写操作后,AC自动减一; S=1:数据读、写操作,画面平移; S=0:数据读、写操作,画面不动。(4) 显示开关控制指令RSR/WDB7DB6DB5DB4DB3DB2DB1DB00000001DCB功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。其中:D表示显示开关:D=1为开,D=0为关; C表示光标开关:C=1为开,C=0为关; B表示闪烁开关;B=1为开,B
6、=0为关。(5) 设定显示屏或光标移动方向指令RSR/WDB7DB6DB5DB4DB3DB2DB1DB0000001S/CR/L*功能:使光标移位或使整个显示屏幕移位。其中:S/C=1:画面平移一个字符位; S/C=0:光标平移一个字符位; R/L=1:右移; R/L=0:左移。(6) 功能设定指令RSR/WDB7DB6DB5DB4DB3DB2DB1DB000001DLNF*功能:设定数据总线位数、显示的行数及字型。其中:DL=1,8位数据接口;DL=0,4位数据接口; N=1,两行显示;N=0,一行显示; F=1,510点阵字符;F=0,57点阵字符。(7) 设定DDRAM地址指令RSR/W
7、DB7DB6DB5DB4DB3DB2DB1DB0000A6A5A4A3A2A1A0功能:设定下一个要存入数据的CGRAM的地址。(8) 读取忙信号或AC地址指令RSR/WDB7DB6DB5DB4DB3DB2DB1DB001BFAC6AC5AC4AC3AC2AC1AC0功能: 读取忙碌信号BF的内容,BF=1表示液晶显示器忙,暂时无法接收单片机送来的数据或指令; 当BF=0时,液晶显示器可以接收单片机送来的数据或指令; 读取地址计数器(AC)的内容。(9) 数据写入DDRAM或CGRAM指令RSR/WDB7DB6DB5DB4DB3DB2DB1DB010数据功能: 将字符码写入DDRAM,以使液晶
8、显示屏显示出相对应的字符; 将用户自己设计的图形存入CGRAM。(10) 从CGRAM或DDRAM读出数据的指令RSR/WDB7DB6DB5DB4DB3DB2DB1DB011数据功能:读取DDRAM或CGRAM中的内容。3.1.5 控制器接口时序说明3.1.5.1 读操作时序 图3 读操作时序 3.1.5.2 写操作时序 图4 写操作时序3.2 硬件连接图了解完LM016L基本资料,现在我们可以将LCD与单片机接在一起。实现方案时,将89C51单片机的P1口与LCD数据口连接起来 ,P3口接液晶控制端口及按键。具体的硬件连接图如图5所示。 图5 液晶广告牌硬件设计图4 源程序代码#includ
9、e #include /库函数头文件,代码中引用了_nop_()函数/ 定义控制信号端口sbit RS=P30; /P3.0sbit RW=P31; /P3.1sbit E= P32; /P3.2int jishu=0;/ 声明调用函数void lcd_w_cmd(unsigned char com); /写命令字函数void lcd_w_dat(unsigned char dat); /写数据函数unsigned char lcd_r_start(); /读状态函数void int1(); /LCD初始化函数void delay(unsigned char t); /可控延时函数void d
10、elay1(); /软件实现延时函数,5个机器周期void main() /主函数 unsigned char lcd=i am the best one mei bang si wei te; unsigned char lcd1=i am yu yang yi from whut; unsigned char i; EA=1; /全局中断开 EX1=1; /外部中断0开 IT1=1; /边沿触发,IT1=0表示电平触发 P1=0xff; /送全1到P0口 int1(); /初始化LCD delay(255); lcd_w_cmd(0x80); /设置显示位置 delay(255); for
11、(i=0;i36;i+) /显示字符串 lcd_w_dat(lcdi); delay(200); lcd_w_cmd(0xc0); / 设置显示位置 delay(255); for(i=0;i25;i+) / 显示字符串 lcd_w_dat(lcd1i); delay(200); while(1)switch(jishu) case 0 : for(i=0;i1;i+) / 闪烁 lcd_w_cmd(0x08); delay(200); lcd_w_cmd(0x0d); delay(200); break;case 1: for(i=0;i1;i+) /左移 lcd_w_cmd(0x1c);
12、delay(200); break;case 2: for(i=0;i1;i+) /右移 lcd_w_cmd(0x18); delay(200); break;void ISR_Key(void) interrupt 2 using 1 jishu+; jishu=jishu%3 ;/函数名:delay/函数功能:采用软件实现可控延时 /形式参数:延时时间控制参数存入变量t中/返回值:无void delay(unsigned char t) unsigned char j,i; for(i=0;it;i+) for(j=0;j50;j+); /函数名:delay1/函数功能:采用软件实现延时,
13、5个机器周期 /形式参数:无/返回值:无void delay1() _nop_(); _nop_(); _nop_();/函数名:int1/函数功能:lcd初始化 /形式参数:无/返回值:无void int1() lcd_w_cmd(0x3c); / 设置工作方式 lcd_w_cmd(0x0d); / 设置光标 lcd_w_cmd(0x01); / 清屏 lcd_w_cmd(0x06); / 设置输入方式 lcd_w_cmd(0x80); / 设置初始显示位置/函数名:lcd_r_start/函数功能:读状态字 /形式参数:无/返回值:返回状态字,最高位D7=0,LCD控制器空闲;D7=1,L
14、CD控制器忙unsigned char lcd_r_start() unsigned char s; RW=1;/RW=1,RS=0,读LCD状态 delay1(); RS=0; delay1(); E=1;/E端时序 delay1(); s=P1;/从LCD的数据口读状态 delay1(); E=0; delay1(); RW=0; delay1(); return(s); /返回读取的LCD状态字/函数名:lcd_w_cmd/函数功能:写命令字/形式参数:命令字已存入com单元中/返回值:无void lcd_w_cmd(unsigned char com) unsigned char i;
15、 do / 查LCD忙操作 i=lcd_r_start(); / 调用读状态字函数 i=i&0x80; / 与操作屏蔽掉低7位 delay(2); while(i!=0); / LCD忙,继续查询,否则退出循环 RW=0; delay1(); RS=0; / RW=1,RS=0,写LCD命令字 delay1(); E=1; /E端时序 delay1(); P1=com; /将com中的命令字写入LCD数据口 delay1(); E=0; delay1(); RW=1; delay(255);/函数名:lcd_w_dat/函数功能:写数据/形式参数:数据已存入dat单元中/返回值:无void l
16、cd_w_dat(unsigned char dat) unsigned char i; do / 查忙操作 i=lcd_r_start(); / 调用读状态字函数 i=i&0x80; / 与操作屏蔽掉低7位 delay(2); while(i!=0); / LCD忙,继续查询,否则退出循环 RW=0; delay1(); RS=1;/ RW=1,RS=0,写LCD命令字 delay1(); E=1; / E端时序 delay1(); P1=dat; / 将dat中的显示数据写入LCD数据口 delay1(); E=0; delay1(); RW=1; delay(255);5 调式过程及结果
17、5.1 调式过程 第一步显示固定语句,硬件图连接好,且程序编译通过没有错,生成.hex文件后下载到protues单片机进行仿真,点开始后,液晶屏亮,但是液晶屏只有第一行有显示,原本设定的第二行显示未能如期实现。检查程序后,发现初始化时候没有给第二行设置显示的物理地址,设定好第二行物理地址后第二行便出现了预期的显示字符。第二步通过按键修改显示方式,按照预期想法,在第一次按下按键后,字符串便呈闪烁状态,在没有再次按下按键之前,LCD应该保持之前闪烁状态,可是实际情况确实再完成一次闪烁后程序自动进行下一个模式即循环左移一次,左移完成之后又进入循环右移,再而回到闪烁状态,并在这三个状态间持续循环。分析
18、后认为是程序段用了switch循环,这个循环将每个case语句顺序执行,于是在每个case语句后加上break语句,重新生成HEX文件执行后果真这个问题得到解决,并且没有新的问题。5.2 结果调试完成后,最终仿真运行结果。第一步,显示固定内容。即仿真开始后,不进行任何操作,LCD显示设置好的字符并按照默认的显示方式(闪烁)进行显示。如图6。图6 显示固定语句第二步,通过按键修改显示方式。按键一次后字符循环左移,再次按下按键后字符串循环右移,图7为字符串左移到最右端状态。图7 字符串左移到最右边状态6 心得体会在选定课题与液晶显示器件相关后便上网搜集了一些芯片的资料,熟悉了一下芯片的使用说明,这
19、次是学习单片机以来第一次接触字符型LCD,之前实验课中接触的都是数码管显示芯片,直接通过芯片管脚电平的赋值便可以显示出相应字符,但这次是要显示出字符串,请教同学后,才知道每次输入字符其实原理跟数码管相似,不过每个字符是分别输入的,即89C51按照顺序将字符分别传送到LCD中,汇编中用查表的方法来实现,而C语言直接将字符串赋值就行。在阅读了液晶芯片的使用手册后,发现字符串不同的显示方式几经内置于芯片中,我们所需要做的就是利用89C51来将对应实现相关功能的指令写入到芯片中,课程的难点不是让LCD如何显示字符串而是如何合理巧妙的控制好液晶芯片来实现其自身所原有的显示功能,并让系统稳定工作。本次课程
20、设计主要是对液晶的相关应用。在拿到一块芯片的时候,首先要看它的说明书,操作手册之类的资料,要从头到尾都了解清楚了,才能开始运用它。我们需要知道各个引脚的功能,才能正确的与单片机相连。液晶有读写操作时有指令与数据之分,了解写指令时的时序,该怎样操作才能把指令写进去,什么指令是什么功能。同样写数据时也一样。在写程序是,必须严格按照操作时序图,先做什么,后做什么。这样才能设计出稳定运行的系统。通过这次课程设计,我深刻理解到像单片机这种课程,如果一味专研课本,盲目记忆指令,这样得来的知识是表层的,是肤浅的,是不能灵活运用于实际生活中去的。只有在掌握相关理论只是后,配以相应实践练习,多动手锻炼自己,不但加深了对理论知识的理解,还让自己对这门课程产生了浓厚的兴趣。而且看到了自己学习的知识在现实生活中的应用。7 参考文献1揣锦华.面向对象程序设计与VC+实践.西安电子科技大学出版社.2005.2高锋.单片微型计算机原理与接口技术(第二版).科学出版社,200716
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922