您好,欢迎访问三七文档
实验三点阵显示屏的控制一、实验目的1、熟悉KeiluVision2软件的使用;2、掌握单片机并行I/O口应用及点阵模块的控制;3、掌握查表指令、循环程序结构;4、掌握程序与流程图的对应关系。二、实验设备及仪器KeilμVision2软件;单片机开发板;PC机一台三、实验原理及内容1、点阵模块电路原理图,如图3.1所示。行(高)列控制(低电平有效)U4U9图3.1点阵模块原理图U4、U9的74HC573芯片是8位三态输出锁存器,分别作为点阵的行、列输入端。根据1088BS点阵模块的内部结构(如图3.2),对应的行为高电平控制,对应的列为低电平控制。P1.1点阵列、数码管位控制端(74HC573锁存器U9)P1.3点阵行控制端(74HC573锁存器U4)图3.21088BS点阵模块内部结构2、实验内容点阵显示有多种形式,例如固定显示、闪烁显示、滚动显示、交替显示等,先从最简单的固定显示一个字符做起。训练内容一:“大”字的静态显示。(1)设计思路:先选中点阵的某一行,然后通过查表指令得到这一行对应的字型码(列锁存器的输出,控制这一行要点亮的状态),延时1ms后,选中下一行,再传送对应列的字型码,重复上述过程,直至完成8行的扫描。然后,再从第一行开始循环。利用视觉驻留效应,人眼看到的是一个静态的显示效果。上述逐行扫描显示过程示意图,如下:第1行显示,其他7行熄灭,时间约为1ms第2行显示,其他7行熄灭,时间约为1ms第8行显示,其他7行熄灭,时间约为1ms…一个循环周期约为8ms程序流程图,如图3.3所示。初始化:DPTR表首地址R0行初始值01HR1列字型码初始偏移地址00HR3一个周期内循环扫描次数08H选中某一行:P0R0行值更新(RL),准备选中下一行查表获取列字型码并显示更新列字型码的偏移地址延时1ms8行扫描完即R3-1=0?开始NY图3.3静态显示“大”字的程序流程图(2)列字型码的编排:“大”字显示字型码示意图,如图3.4。P0.0P0.1……P0.7P0.0P0.1P0.7……P0.0P0.1……P0.7P0.0P0.1P0.7……行:高电平有效列:低电平有效图3.4“大”字型码示意图根据“大”字显示字型码示意图和查表指令中表格数据的构建原则,将字型码依次存放在表格TAB1所指定的ROM单元中。TAB1:DB11110111B,11110111B,10000000B,11110111B,11101011BDB11011101B,10111110B,11111111B或写成TAB1:DB0F7H,0F7H,80H,0F7H,0EBH,0DDH,0BEH,0FFH(3)静态显示“大”字的参考程序如下:ORG00HAJMPMAINMAIN:SETBP1.0;数码管段控制(锁存器U8输入端有效)SETBP1.2;LED流水灯模块控制(锁存器U7输入端有效)MOVP0,#0FFH;关闭LED灯CLRP1.2;关闭LED流水灯模块(锁存器U7输入端高阻态)MOVP0,#0;关闭数码管段CLRP1.0;关闭数码管段模块(锁存器U8输入端高阻态)LOOP:MOVDPTR,#TAB1;列字型码的表首地址MOVR0,#01H;行号MOVR1,#00H;列号MOVR3,#08H;一个周期内扫描8行NEXT:SETBP1.3;点阵行锁存器U4的输入端有效MOVA,R0MOVP0,A;选中某一行RLAMOVR0,A;更新行号CLRP1.3;点阵行锁存器U4的输入端处于高阻态SETBP1.1;点阵列锁存器U9的输入端有效MOVA,R1MOVCA,@A+DPTRMOVP0,AINCR1;修改列号LCALLDELAY;延时1msCLRP1.1;点阵列锁存器U9的输入端处于高阻态DJNZR3,NEXT;判断是否完成8行扫描SJMPLOOP;循环显示DELAY:MOVR4,#250;实现延时1ms子程序D1:NOPNOPDJNZR4,D1RETTAB1:DB0F7H,0F7H,80H,0F7H,0EBH,0DDH,0BFH,0FFH;列字型码END问1:若将程序中的SJMPLOOP改为SJMP$,将会出现什么现象?问2:若要显示“小”字,如何修改程序?训练内容二:“大”字的滚动显示(从一个方向出现,滚动到另一个方向消失,并不断重复该过程)。(1)滚动显示原理根据滚动显示的特点,滚动显示实际上是多屏循环显示。需要分两步实现:①确定出每一屏的字型码;为了实现“大”字从右到左滚动显示效果,第1屏显示的应该只是“大”字最左边一列,如图3.5(a)所示。第2、3屏显示,如图3.5(b)、(c)所示。P0.0P0.1……P0.7P0.0P0.1P0.7……11111111B,即0FFHP0.0~P0.711111111B,即0FFH01111111B,即7FH11111111B,即0FFH11111111B,即0FFH11111111B,即0FFH01111111B,即7FH11111111B,即0FFH(a)第1屏显示P0.0P0.1……P0.7P0.0P0.1P0.7……11111111B,即0FFHP0.0~P0.711111111B,即0FFH00111111B,即3FH11111111B,即0FFH11111111B,即0FFH01111111B,即7FH10111111B,即0BFH11111111B,即0FFH(b)第2屏显示P0.0P0.1……P0.7P0.0P0.1P0.7……11111111B,即0FFHP0.0~P0.711111111B,即0FFH00011111B,即1FH11111111B,即0FFH01111111B,即7FH10111111B,即0BFH11011111B,即0DFH11111111B,即0FFH(c)第3屏显示图3.5第1~3屏显示及列字型码从“大”字从右边出现,到“大”字从左边消失,总共需要15屏。8个字型码一屏,15屏需要定义15×8个字型码,图3.5中的1~3屏字型码的定义如下:TAB1:DB0FFH,0FFH,7FH,0FFH,0FFH,0FFH,7FH,0FFH;第1屏DB0FFH,0FFH,3FH,0FFH,0FFH,7FH,0BFH,0FFH;第2屏DB0FFH,0FFH,1FH,0FFH,7FH,0BFH,0DFH,0FFH;第3屏利用查表指令读取每一屏的数据:读取第1屏的数据时,MOVDPTR,#TAB读取第2屏的数据时,DPTR+8DPTR读取第3屏的数据时,在第2屏的基础上DPTR+8DPTR依次类推。由于MCS-51系列单片机是8位单片机,没有16位的加法指令,且加法指令的第一操作数必须是累加器A,因此DPTR+8DPTR只能分步实现:DPLAA+8AADPLDPHAA+CYAADPH②确定每一屏显示需保持时间(滚动时间的快慢)。每一屏变换时间必须要大于人眼视觉驻留时间,否则眼睛无法识别。根据静态显示实验,每屏显示一次需要时间大概8ms,若每屏要显示50次,即每屏的显示时间约为50×8ms=0.4s,显然改变每屏显示的次数就可以改变每屏显示的时间。(2)滚动显示“大”字流程图初始化:DPTR表首地址共15屏:R515每屏显示次数:R450读取一屏数据并显示修改表首地址即DPTR+8DPTR显示次数到即R4-1=0?开始NY15屏都显示完到即R5-1=0?NY图3.6滚动显示“大”字的流程图(3)滚动显示“大”字的参考程序如下:ORG00HAJMPMAINMAIN:SETBP1.0;数码管段控制(锁存器U8输入端有效)SETBP1.2;LED流水灯模块控制(锁存器U7输入端有效)MOVP0,#0FFH;关闭LED灯CLRP1.2;关闭LED流水灯模块(锁存器U7输入端高阻态)MOVP0,#0;关闭数码管段CLRP1.0;关闭数码管段模块(锁存器U8输入端高阻态)LOOP1:MOVDPTR,#TAB1;列字型码的表首地址MOVR5,#15;15屏滚动显示LOOP2:MOVR6,#50;每屏显示次数LOOP3:MOVR0,#01H;行号MOVR1,#00H;列号MOVR3,#08H;一个周期内扫描8行NEXT:SETBP1.3;点阵行锁存器U4的输入端有效MOVA,R0MOVP0,A;选中某一行RLAMOVR0,A;更新行号CLRP1.3;点阵行锁存器U4的输入端处于高阻态SETBP1.1;点阵列锁存器U9的输入端有效MOVA,R1MOVCA,@A+DPTRMOVP0,AINCR1;修改列号LCALLDELAY;延时1msCLRP1.1;点阵列锁存器U9的输入端处于高阻态DJNZR3,NEXT;判断是否完成8行扫描DJNZR6,LOOP3;判断每屏的显示次数50次是否到了?MOVA,DPL;修改表首地址,准备读取下一屏数据ADDA,#8MOVDPL,AMOVA,DPHADDCA,#0MOVDPH,ADJNZR5,LOOP2;判断15屏都显示完了?SJMPLOOP1;循环显示DELAY:MOVR4,#250;实现延时1ms子程序D1:NOPNOPDJNZR4,D1RETTAB1:DB0FFH,0FFH,7FH,0FFH,0FFH,0FFH,7FH,0FFH;第1屏DB0FFH,0FFH,3FH,0FFH,0FFH,7FH,0BFH,0FFH;第2屏DB0FFH,0FFH,1FH,0FFH,7FH,0BFH,0DFH,0FFH;第3屏DB7FH,7FH,0FH,7FH,0BFH,0DFH,0EFH,0FFH;第4屏DB0BFH,0BFH,07H,0BFH,5FH,0EFH,0F7H,0FFH;第5屏DB0DFH,0DFH,03H,0DFH,0AFH,77H,0FBH,0FFH;第6屏DB0EFH,0EFH,01H,0EFH,0D7H,0BBH,7DH,0FFH;第7屏DB0F7H,0F7H,80H,0F7H,0EBH,0DDH,0BEH,0FFH;第8屏DB0FBH,0FBH,0C0H,0FBH,0F5H,0EEH,0DFH,0FFH;第9屏DB0FDH,0FDH,0E0H,0FDH,0FAH,0F7H,0EFH,0FFH;第10屏DB0FEH,0FEH,0F0H,0FEH,0FDH,0FBH,0F7H,0FFH;第11屏DB0FFH,0FFH,0F8H,0FFH,0FEH,0FDH,0FBH,0FFH;第12屏DB0FFH,0FFH,0FCH,0FFH,0FFH,0FFH,0FEH,0FFH;第13屏DB0FFH,0FFH,0FEH,0FFH,0FFH,0FFH,0FEH,0FFH;第14屏DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;第15屏END问3:编制程序,使得点阵上依次显示0~9。问4:滚动显示“大”、“小”2个字符。
本文标题:点阵显示屏的控制
链接地址:https://www.777doc.com/doc-2298972 .html