《LED点阵显示仿真由浅入深之.docx》由会员分享,可在线阅读,更多相关《LED点阵显示仿真由浅入深之.docx(6页珍藏版)》请在第一文库网上搜索。
1、一直以来,对1ED点阵显示很感兴趣,特别是流动点阵显示论坛里有不少例子,可是在我的电脑上大多无法正常运行。有的一运行就S机,能运行的,也是字符不清。于是,自己动手。先试作了8X8点阵。8X8的点太少,只适合数字显示,从O-9流动,效果还不错。有了8X8的经验,对流动显示的原理己经了解,又试了16X16的,觉得也不难。但16X16的点仍嫌少了,又做了个24X24的,汉字漂亮。动画可能效果差些,软件运行显示效果好多了。一、8X8初学点阵仿真,常点不亮1ED。首先,可能是点阵的极性没有正确的接线。下面的简单方法可判断点阵的逻辑引脚。运行PrOteUs,在编辑区里放上一个8X81ED,如MATR1X-
2、8x8-GREEN。在某些引脚上接上电源和地,试试能不能点亮。8X8默认是上下引脚,按习惯接法,上面接电源,下面接地,不亮(图左)。用左下角垂直翻转工具,垂直翻转,再接上电源和地,就可以点亮了(图右)。如果是做左移显示,可再左旋90这里可看到,左边引脚是行控制,右边引脚是列控制。然后就可以画线路图了,点阵就保持上面那个方向。由于点阵引线较多,特别是以后做24X24点阵,所以布线方式不用连线,而用终端加上网络标号,这样可以使画面简洁明了。连续标号的快捷画法,我以前有帖子介绍过。这里还是再啰嗦一下。proteus有一个很好用的PAT(PropertyAssignmentToo1),即属性分配工具。
3、可以用来做快捷标注,当然还可以用作其它操作。再连上其它接线,一个线路图很快就可以作好。下面,就可以写程序的源文件了。点击菜单Source,下拉菜单第一条Add/RemoveSourceFi1eS,按键New,在跳出的对话框里写上新文件名,如8X8.asm,打开。提示这个文件不存在,要创建吗?是。然后点CodeGererationtoo1小箭头,选ASM51,点OKo然后,菜单Source,看到多了个8X8.asm,点击,出现PrOteUS自带的汇编编辑器,就可以在里面写代码了。如下:;8X81ED点阵流动显示MAIN:MOVDPTR,#TAB;字码表初址赋值MOVRI,#OFEH;列控制码MO
4、VR3,#8;列数MoVR4,#88;移动“”及“0”9”11个字符,共88列CM:MOVR5,#10;每屏反复显示10次MOVR3,#8;列数C1:MOVR2,#0;取码指针C8:MOVP3,#OFFH;关显示MOVA,R2;MOVCA,A+DPTR;取当前列的显示字码的一个字节MOVPO,A;送18行控制口INCR2MOVA,R1MOVP3.A;送列控制码ACA11D5MS;显示5MSR1A;列控制码左移,显示下一列MOVRI1ADJNZR3,C8;未显示8歹J,继续DJNZR5,C1;未显示10次,继续INCDP1;一屏反复显示10次完,字码表初值加1DJNZR4,CM;88列未移动完,
5、继续AJMPMAIN;88列显不完,返回,重新从“”开始显示D5MS:MOVR6,#10MOVR7,#248DJNZR7,$DJNZR6,$-4RETTAB:DB00H,00H,00H,00H,00H,00H,00H,OOH;DB00H,00H,00H,7EH,81H,81H,81H,7EH;0DB00H,00H,OOH,OOH,OOH,82H,OFFH,80H;1DB00h,00h,00h,0C6H,OA1H,91H,89H,0C6H;2DB00H,00H,00H,42H,81H,81H,99H,66H;3DBOOH,00H,OOH,1FH,10H,OFFH,10H,IOH;4DB00H,0
6、0H,00H,4FH,89H,89H,89H,79H;5DB00H,OOH,00H,7EH,89H,89H,89H,72H;6DB00H,OOH,OOH,01H,01H,0F9H,05H,03H;7DBOOH,00H,OOH,76H,89H,89H,89H,76H;8DBOOH,00H,00H,4EH,91H,91H,91H,7EH;9END程序的基本原理:PO送18行扫描码,P3口送列控制码。显示完一列,列控制码左移,显示第2歹IJ。一直到8列显示完,即显示了一屏。重新从1“8歹I,反复显示10次,以免字符一闪而过。接着显示下屏,下一屏的取字指针的地址加1(INCDPD即该屏第1列是上屏的第
7、2歹I,也就是相当于左移一列。直到11个字符(包括“”字符)全部显布后,再从新开始。这样,就实现了移动显示。接着再继续说说,怎么将ASM文件转换成HEX文件。上面在编辑器里写好ASM文件后,菜单SourceDcfineCodeGererationToo1s,按对话框填写,点0K。菜单SourceBui1dA11,点击,编译完成。接着,左键再右键,在原理图内的单片机属性里加载HEX文件,。不过也可以不用左键再右键。可以这样,鼠标箭头移到单片机,按CTR1+E,也会跳出那个对话框的。当然proteus自带的编辑器也有不少遗憾,首先它只支持汇编,不支持Ce另外,有朋友发现它不支持一些特殊的指令,象程
8、序中的DJNZR7,$,它就不识别$,还有其它不识别的。不过,不知为什么,现在我编译时很正常,都没没发现什么问题。所以,很久都不用kei1了。连调试也不用kei1,可参考我以前的帖子。二、16X1616X16点阵,是用4个8*8组成。继续画线路。为了实现左移,仍用逐列扫描。与8X8不同的是,16X16点阵是先显示18列(左半部上下2个8X81ED)再显示916列(右半部上下2个8X81ED),这样,左上下的列接Co1(TZ,右上下列接Co1815,即左(右)半上下列的8个引脚并联。而左(右)半的行引脚分别接Rowen5,即左右行引脚并联。先在编辑区放置一个8X8,加上终端,接好终端和各引脚。再
9、用夏制工具复制3个8X8(包括终端、连线),成16X16点阵。用PAT工具分别给各个终端加上网络标号。动画如下:16X161ED点阵做好。程序与8X8不同的是,因为每个显示码只有8位,而点阵是16位,所以先送第1列上半的显示码,取码指针加1,再送第1列下半显示码,取码指针再加1。而一屏(16X16点阵)显示完后,字码表初值应加2,使本屏相当于上一屏左移一列,实现向左流动。程序如下:;16X161ED点阵流动显示MAIN:MOVDPTR,#TAB;字码表初址赋值MOVRI,#OOH;列控制码MOVR3,#16;列数MOVR4,#96;移动“”及“单片机仿真”6个字符,共96列CM:MOVR5,#
10、5;每屏反免显示5次MOVR3,#16;列数C1:MOVR2,#0;取码指针C16:MOVPO,#OoHMOVP2,#00H;关显示C1RP3.0MOVA,R2MOVCA,A+DPTR;取当前列显示字码的第一个字节MOVPO1A;送18行控制口INCR2MOVA,R2MOVCA,A+DPTR;取当前列的显示字码的第二个字节MOVP2.A;送915行控制口INCR2MOVP1,R1;送列控制码INCR1ACA11DIMS;显示IMSACA11DIMSDJNZR3,C16MOVR3,#16DJNZR5,C1;未显示5次,继续INCDPTR;一屏反复显示5次完,字码表初值加2INCDPTRDJNZR
11、4,CM;96列未移动完,继续AJMPMAIN;96列移动完,返回,重新从“”开始显示DIMS:MOVR6,#2MOVR7,#248DJNZR7,$DJNZR6,$-4RETTAB:DBOOOH,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,00OH,000H;DBOOOH,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,00OH,000H;,DBOOOH,OOOH,OOOH,008H,OOOH,008H,OEOH,008H,0F
12、4H,OODH,054H,005H,0F4H,07FH,0F8H,07FH;DBO1EH,005H,OFEH,005H,OFAH,006H,O1OH,002H,OOOH,006H,OOOH,004H,OOOH,OOOH,0OOH,OOOHJ单,0DBOOOH,OOOH,OOOH,OOOH,OOOH,O1OH,OOOH,O1CH,OFCH,OOFH,OFCH,003H,040H,002H,040H,002H;DB07EH,07FH,03EH,07FH,020H,OOOH,020H,OOOH,OOOH,OOOH,OOOH,OOOH,OOOH,OOOH,00OH,OOOH;片,1DBOOOH,008
13、H,040H,OOCH,040H,006H,ODCH,03FH,OFEH,03FH,022H,O11H,020H,O1DH,OFOH,OOFH;DBOFOH,003H,OFOH,OOFH,OFOH,O1FH,O1OH,O1OH,OOOH,O1CH,OOOH,O1CH,OOOH,O1OH,0OOH,OOOHJ机,2DBOOOH,OO1H,080H,OO1H,OCOH,OOOH,OFOH,03FH,OFCH,03FH,04CH,018H,040H,OOCH,040H,027H;DBOCCH,063H,OECH,079H,028H,O1FH,020H,007H,020H,OOOH,020H,OOOH
14、,OOOH,OOOH,0OOH,OOOH;”仿,3DBOOOH,OOOH,OOOH,O1OH,OOOH,098H,OOOH,0C8H,0E8H,06FH,0E8H,03FH,07CH,O1BH,07EH,OOAH;DB0E6H,03FH,0E4H,07FH,004H,06CH,OOOH,004H,OOOH,004H,OOOH,OOOH,OOOH,OOOH,0OOH,OOOHJ真,4END三、24X2424X24点阵是由9个8X81ED点阵组成,组成方法同16点阵。扫描原理仍采用逐列扫描。由于24行、24列,硬件有所不同。为了方便,由P0、P2和P3口逐列输出本列的行扫描控制码,共24位。列控制由138三八译码器输出。具体如何实现,这里就不再赘述,大家可参考上传附件中的设计文件和汇编文件。文中三个点阵仿真均由proteus6.9SP4通过,上传附件包括三个仿真的DSN、ASM及HEX文件。另外,说明一点,8X8点阵字模是我自己作的。而汉字字模是根据sxjwqx朋友的帖子迄今用过的最好的字模提取软件点阵格式:阴码,取模方式:逐列式,取模走向:逆向。软件非常好用,这里再次感谢sxjwqx的提供。