微机接口实验-16x16点阵显示

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验04·LED显示座位:37号09300720286王梦硕1/14实验04·LED显示器王梦硕09300720286实验目的:在理解LED点阵工作原理的基础上,实践使用点阵显示字符。实验原理:1·点阵式显示器:发光二级管排列成矩阵,由亮与暗来产生字符或图形。每一样的阳极连在一起,每一列的阴极连在一起,如右图所示。点阵显示器每一列的阴极连在一起,对每一列而言相当于一个共阴显示器。同时每一行的阳极连在一起,相当于七段显示器的比划。可采用动态显示电路,以笔画锁存器控制行信号,以位锁存器控制列信号。2·74HC595实验中使用两片8位输出锁存移位寄存器74HC595(三态输出、串入并出),将单片机I/O口发出的串行数据转换为并行数据LD_QA~LD_QP,作为16x16LED点阵显示器的行线,使用另外两片8位74HC595作为16x16LED点阵显示器的列线LD_1~LD_16。当行输出高电平、列输出低电平时,可以点亮点阵。74HC595的工作时序图和推荐的连接方法如下:下图中:•LD-QA~LD-QP:点阵行控制信号•LD-1~LD-16:点阵列控制信号•SER(14脚):串行数据输入端•-SCLR(10脚):低电平时将移位寄存器的数据清零。通常将它接Vcc。•SCK(11脚):上升沿时将串行数据移入移位寄存器。•RCK(12脚):上升沿时移位寄存器的数据锁存入数据寄存器。•-G(13脚):高电平时禁止输出(高阻态)。实验04·LED显示座位:37号09300720286王梦硕2/14实验内容:在16×16LED点阵上分别用静态方式和滚屏方式显示自己的姓(行扫描)。两个实验部分的电原理图是相同的,如下所示:实验04·LED显示座位:37号09300720286王梦硕3/141·静态方式:流程图:程序代码:L_DAT_HBITP1.0L_DAT_LBITP1.1L_STRBITP1.2L_CLKBITP1.3L_OEBITP1.4ROWHEQU40H;字模信号(顺向取膜,高位在前)ROWLEQU41HSELHEQU42H;行扫描信号实验04·LED显示座位:37号09300720286王梦硕4/14SELLEQU43HORG0000HLJMPMAINORG0100HMAIN:MOVR1,#01H;配合字模信号MOVR2,#01H;高字节在后,故从01开始MOVR3,#10H;循环16次LOAD:MOVDPTR,#SEL_DATA;存储行扫描信号MOVA,R1MOVCA,@A+DPTRMOVSELH,A;存储高字节DECR1;R1-1,指向低字节MOVA,R1MOVCA,@A+DPTRMOVSELL,A;存储低字节INCR1INCR1INCR1;指向下一个高字节MOVDPTR,#ROW_DATA;存储字模数据,过程同上MOVA,R2MOVCA,@A+DPTRMOVROWH,ADECR2MOVA,R2MOVCA,@A+DPTRMOVROWL,AINCR2INCR2INCR2LCALLLATCH;运行锁存自程序LCALLDELAY;延时DJNZR3,LOAD;重复执行16次,显示所有行LJMPMAIN;静态显示LATCH:CLRL_OE;允许输出CLRL_STR;为上升沿将移位寄存器数据锁存入数据寄存器MOVR4,SELH;做准备MOVR5,ROWH;高位行扫描型号和字模信号MOVR6,#08H;高低位分开读,每次读8位LATCH1:实验04·LED显示座位:37号09300720286王梦硕5/14CLRL_CLK;为上升沿读入移位寄存器做准备MOVA,R4RRCA;移出最高位MOVR4,AMOVL_DAT_H,C;由P1.0输出准备进入移位寄存器MOVA,R5RRCAMOVR5,AMOVL_DAT_L,C;由P1.1输出准备进入移位寄存器SETBL_CLK;CLK上升沿,P1.0和P1.1数据进入移位寄存器DJNZR6,LATCH1;MOVR4,SELLMOVR5,ROWLMOVR6,#08HLATCH2:;同上CLRL_CLKMOVA,R4RRCAMOVR4,AMOVL_DAT_H,CMOVA,R5RRCAMOVR5,AMOVL_DAT_L,CSETBL_CLKDJNZR6,LATCH2;SETBL_STR;STR上升沿移位寄存器数据所存入数据寄存器;显示RETDELAY:;延迟程序MOVR6,#02HLOOP1:MOVR7,#0F8H;估算:1us*2*(1+2*248+2)=998us≈1msLOOP2:DJNZR7,LOOP2DJNZR6,LOOP1;RETSEL_DATA:;SELECTROWDB80H,00H实验04·LED显示座位:37号09300720286王梦硕6/14DB40H,00HDB20H,00HDB10H,00HDB08H,00HDB04H,00HDB02H,00HDB01H,00HDB00H,80HDB00H,40HDB00H,20HDB00H,10HDB00H,08HDB00H,04HDB00H,02HDB00H,01HROW_DATA:DB0FFH,0FFH,80H,03H,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0C0H,07H;DB0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,00H,01H,0FFH,0FFH;王,0;END实验效果:字模效果:LED显示效果:实验04·LED显示座位:37号09300720286王梦硕7/142·滚屏方式:流程图:实验04·LED显示座位:37号09300720286王梦硕8/14程序代码:L_DAT_HBITP1.0L_DAT_LBITP1.1L_STRBITP1.2L_CLKBITP1.3L_OEBITP1.4ROWHEQU40HROWLEQU41HSELHEQU42HSELLEQU43HWAITEQU44H;负责控制滚动速度ORG0000HLJMPMAINORG0100HMAIN:MOVR0,#01H;每次重新滚动时初始化NEXT:MOVWAIT,#0AH;滚动速度设置,数字越大滚动越慢ROLL:MOVA,R0;变换显示的第一行以完成滚动MOVR1,#01H;行扫描信号不变MOVR2,AMOVR3,#10HLOAD:MOVDPTR,#SEL_DATA;MOVA,R1MOVCA,@A+DPTRMOVSELH,A;LOADHIGHBYTEDECR1;OFSELECTSIGNALMOVA,R1MOVCA,@A+DPTRMOVSELL,A;LOADLOWBYTEINCR1;OFSELECTSIGNALINCR1INCR1MOVDPTR,#ROW_DATAMOVA,R2MOVCA,@A+DPTRMOVROWH,ADECR2MOVA,R2MOVCA,@A+DPTRMOVROWL,A实验04·LED显示座位:37号09300720286王梦硕9/14INCR2INCR2INCR2LCALLLATCHLCALLDELAYDJNZR3,LOAD;以上与第一部分相同DJNZWAIT,ROLL;循环以延时INCR0INCR0;R0指向下一行,以实现滚动CJNER0,#61H,NEXT;所有字符显示完毕后开始新的一轮;以下与第一部分相同LJMPMAINLATCH:CLRL_OECLRL_STRMOVR4,SELHMOVR5,ROWHMOVR6,#08HLATCH1:CLRL_CLKMOVA,R4RRCAMOVR4,AMOVL_DAT_H,CMOVA,R5RRCAMOVR5,AMOVL_DAT_L,CSETBL_CLKDJNZR6,LATCH1;MOVR4,SELLMOVR5,ROWLMOVR6,#08HLATCH2:CLRL_CLKMOVA,R4RRCAMOVR4,AMOVL_DAT_H,CMOVA,R5RRCA实验04·LED显示座位:37号09300720286王梦硕10/14MOVR5,AMOVL_DAT_L,CSETBL_CLKDJNZR6,LATCH2;SETBL_STR;RETDELAY:MOVR6,#02HLOOP1:MOVR7,#0F8HLOOP2:DJNZR7,LOOP2DJNZR6,LOOP1;RETSEL_DATA:;SELECTROWDB80H,00HDB40H,00HDB20H,00HDB10H,00HDB08H,00HDB04H,00HDB02H,00HDB01H,00HDB00H,80HDB00H,40HDB00H,20HDB00H,10HDB00H,08HDB00H,04HDB00H,02HDB00H,01HROW_DATA:DB0FFH,0FFH,80H,03H,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0C0H,07H;DB0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,00H,01H,0FFH,0FFH;王,0DB0F7H,0DFH,0F7H,0DFH,81H,03H,0F7H,0DFH,0E3H,8FH,0D5H,57H,37H,0D9H,0FBH,0FFH;实验04·LED显示座位:37号09300720286王梦硕11/14DB0F8H,0FH,0F7H,0EFH,0EBH,0DFH,0DDH,0BFH,0FEH,7FH,0FDH,0FFH,0F3H,0FFH,8FH,0FFH;梦,1DB0FFH,0FFH,0FCH,01H,03H,0DFH,0EFH,0BFH,0EEH,03H,0DEH,0FBH,0C2H,0FBH,9AH,0DBH;DB9AH,0DBH,5AH,0DBH,0DAH,0DBH,0DAH,0BBH,0C3H,0AFH,0DBH,77H,0DEH,0FBH,0FDH,0FBH;硕,2DB0FFH,0FFH,80H,03H,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0C0H,07H;DB0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,00H,01H,0FFH,0FFH;王,0;为了实现无间隙滚动,最后16行与最前十六行设置相同字模数据END实验效果:字模效果:LED点阵效果:实验04·LED显示座位:37号09300720286王梦硕12/14实验现象与记录:1·静态显示:正确地显示了“王”字,但是很明显地:每一行的所有点亮的等亮度相同,并且对每一行而言,亮的灯越多,则每盏灯越暗。如“王”字,每一横的亮度都很低,但三横中夹着的两短竖则很亮。其中的原理见实验分析部分。2·滚屏显示:实际中采用了竖滚方式,重复“王梦硕”三个字,“硕”字后面紧跟着“王”字,实际实验中的效果与设计是一致的。同样,也有静态显示中遇到的点阵亮暗不一的问题。实验分析与改进:1·点阵的亮暗不一:根据点阵的工作原理(见实验原理部分),若要某一个坐标上LED点亮,则要求其所在列为低电平,而其所在行为高电平。本次试验采用了行扫描模式,当一行有多盏灯被点亮时,每一盏LED并联,都通过同样电流。因为每一行的得到的驱动电流恒定,点亮的LED越多,通过每一盏LED的电流就越小。这就解释了为什么某一行中点亮的LED越多,这些LED的亮度就越小。但是在列扫描中就不存在这种问题,因为同一时刻每一行只有一盏LED被点亮,所有的驱动电流都流经这个LED,故所有点亮的LED都处在亮度最大的状态。但这也带来了问题:每盏LED导通时都流过非常大的电流,LED的寿命因此大大减小。2·解决点阵亮暗不一问题的两种方案:方案一:增加点亮LED数较多行的显示时间假设一个字符显示完(16行扫描完成)的时间固定,并且每一行的点亮点数相同,则若一行点亮的时间所占比重越大,则这一行看上去亮度相对较大

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功