汉字显示器版本2_第1页
汉字显示器版本2_第2页
汉字显示器版本2_第3页
汉字显示器版本2_第4页
汉字显示器版本2_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、合肥学院计算机科学与技术系课程设计报告20082009学年第二学期课程 微型计算机原理与接口技术课程设计名称汉字显示器学生姓名吴蕾学号0604032027专业班级06网工(2)指导教师肖连军老师2009年 2月汉字显示器一、题义分析与解决方案1 .题义与需求分析应用8086系列接口芯片设计一个字符点阵为8*8LED显示器接口,显示字符“计、算、机、专、业”。每个字符显示2s,每个字符之间插入,循环显示。由题意知:由于要显示字符,就必须解决字符的编码问题,可以取汉字的点阵码,所以对点阵码得描述显得尤为重要。把二极管看成点,通过发光显示出很多点,由这些点连接起来形成竖线和横线,这样如此便可以组成一

2、个汉字。又由于要用到LED显示,就必须解决LED如何工作,8*8LED是8列阴极连在一起,8列阳极连在一起的64个二极管矩阵,当阳极为高电平,阴极为低电平时,二极管发光。最后要求达到循环显示,就必须解决LED的稳定循环显示。问题归纳:接口问题,选用何种芯片。这是关键的一步,这将直接影响到整个汉字显示器能否实现。汉字如何显示。这是对点阵输入时应该注意的问题。汉字如何编码。影响核心代码的编写。编码的好坏直接影响着汉字的清晰度。如何循环显示汉字?2秒如何控制?2 .解决问题的方法与思路1) 硬件部分因为要显示给定字符,则必须利用一个字符点阵8*8LED显示器显示正确的结果。由于点阵8*8LED显示器

3、是共阴极的,我采用共阳极编码,即行为0时列为1时,对应的LED发光。所谓的8*8LED显示器即该点阵显示器有8行、8列。这两组线对于LED均为输入线,这样就可利用8255A芯片PA口、PB口与之8行、8列对应输出适当的行码及列码,由于只需显示一个8*8LED,所以将其它的屏蔽掉,将PC口与列R9-R16连接。8*8点阵LED采用动态扫描显示,即逐行扫描显示。8255A的PA口送行扫描信号,PB口送列扫描信号。8行扫描显示结束时,即完成了一个字符的显示。在送行、列扫描信号时,应配合使用驱动器及限流电阻。2) 软件部分(汇编语言编写程序)点阵8*8LED采用动态显示,当8行(即一帧)扫描完成后,如

4、何实现稳定显示?欲使显示的字符稳定显示,就要考虑受50HZ闪烁频率的限制。应保证扫描8行(即一帧数据)的时间(场周期),T场20ms。每帧有8行,那么可容易得出扫描一行的时间(行周期):T行=T场/82.5ms。所以在扫描完一行时,即可调用延时子程序完成每行2.5ms内的显示。逐行执行后,扫描一帧的时间就控制在20ms内,从而就达到稳定显示的目的了。二、硬件设计1选择芯片8255A(1) 8255A在本设计中的作用用于连接PCI卡和16*16LED发光二极管矩阵,实现端口数据输出和控制功能。(2)8255A 的功能分析8255A是一种可编程的外设接口芯片,是为了8080/8086而设计的可以通

5、过程序来改变其功能。表2-1 8255A端口功能选择表A1A0输入操作<读>00010端口A>数据总线01010端口B>数据总线10010端口C>数据总线输出操作<写>00100数据总线>端口A01100数据总线>端口B10100数据总线>端口C11100数据总线>控制字寄存器断开功能<禁止>xxxx1数据总线三态<高阻>11010非法状态xx110数据总线三态<高阻>8255A工作方式0:基本输入/输出(同步传送)方式0下每一个口都作为基本的输入/输出口,C口的高4位和低4位以及A口、B口、

6、C口可以独立地设置为输入口或输出口,4个口输入/输出可以有16种组合方式,且都可以由方式控制字确定。CPU可采用无条件读/写方式与8255A交换数据。8255A在方式0下输出的数据被锁存,而输入的数据是不锁存的。本设计中8255A工作在方式0下,所以方式1、2在此不作介绍。(3)8255A的技术参数8255A是双列直插式芯片。8255A主要是用作数据的输入输出端口,直接按位置1或置0,电源为+5v。A1、A0为片内寄存器选择信号。即为四个端口。8255的A1、A0分别与PCI卡的A1、A0相连,8255的CS与PCI卡的CS1相连。表2-2 8255A技术参数表 参数名称符号测试条件规范值最大

7、最小输入低电平电压VIL0.8v-0.5v输入高电平电压VIHVcc2.0v输入低电平电压<数据总线>VOLIOL=2.5mA0.45v输入低电平电压<外部端口>VOLIOL=1.7mA0.45v输入高电平电压<数据总线>VOHIOH=-400A2.4v输入高电平电压<外部端口>VOHIOH=-200A2.4v达林顿驱动电流IDARREXT=750VEXT=1.5v-4.0mA1.0mA电源电流ICC120mA输入负载电流IILI=VCC0v+10mA-10mA输出浮动电流IOFLVOUT=VCco0v+10mA-10mA由上可知:8255A的达

8、林顿驱动电流最大为4.0mA。2.选择芯片驱动器74LS244:达林顿驱动电流最大为4.0mA,LED工作电流为20mA,8255A的工作电流为低时,最大为0.45V,工作电流为高时,最小为2.4V,而LED为5V,因此需要一个驱动器来驱动,使工作电流和电压相匹配。(1)74LS244的功能分析:由于8255A的达林顿驱动电流最大为4mA而发光二极管的驱动电流为20mA。因此,8255A的驱动电流远远小于LED的驱动电流,这样势必导致驱动不了LED。从而显示不出编号,所以需要选择驱动器74LS244。(2)74LS244在本实验中的作用:主要是用于驱动显示器,使编号能在LED上显示出来。(3)

9、 74LS244的逻辑图 表2-3 74LS244的技术参数最小典型最大单位电源电压Vcc4.7555.25V高电平输出电流IOH-1.5mA低电平输出电流IOLMA工作环境温度070oC 3选 图2-1 74LS244的逻辑图(1)8*8点阵LED显示器在本实验中的作用:用于显示本设计内容中给定的字符,即“计、算、机、专、业、”。8*8点阵LED显示器显示方式可分为静态显示和动态显示,本设计总利用的是8*8LED点阵的动态扫描显示。(2)8*8点阵LED显示器的逻辑图 图2-2 LED显示器的逻辑图(3)8*8点阵LED显示器技术参数:1)允许功耗Pm:允许加于LED两端正向直流电压与流过它

10、的电流之积的最大值。超过此值,LED发热、损坏。2)最大正向直流电流IFm:允许加的最大的正向直流电流。超过此值可损坏二极管。 3)最大反向电压VRm:所允许加的最大反向电压。超过此值,发光二极管可能被击穿损坏。4)工作环境topm:发光二极管可正常工作的环境温度范围。低于或高于此温度范围,发光二极管将不能正常工作,效率大大降低。5)正向工作电流If:它是指发光二极管正常发光时的正向电流值。在实际使用中应根据需要选择IF在0.6·IFm以下。6)正向工作电压VF:参数表中给出的工作电压是在给定的正向电流下得到的。一般是在IF=20mA时测得的。发光二极管正向工作电压VF在1.43V。

11、在外界温度升高时,VF将下降。 表2-3 LED显示器技术参数表ParameterSymbolRatingUnitForward currentIf20mAPower dissipationPd125mwPulse forward currentIfp100mAReverse voltageVr5vOperating temperatareTopr-3585ºCTseq-40100ºC 从上表可以看出8*8点阵LED显示器中发光二极管的驱动电流为20mA。而8255A的达林顿驱动电流最大为4mA。因此,8255A的驱动电流远远小于LED的驱动电流,这样势必导致驱动不了LED

12、。从而显示不出编号,所以需要选择驱动器74LS244。硬件总逻辑图及其说明(1)硬件总逻辑图: 图2-3 硬件总逻辑图(2)硬件总逻辑图说明:首先在图中可以看到我选用了8255A这种芯片。PCI的A0、A1、CS1分别与8255A的A0、A1、CS相连,PA口和PB口分别与74LS244相连,两个74LS244分别与8*8的LED的行和列相连。三 控制程序设计:1、控制程序设计思路说明:汉字是由笔画组成的,笔画可以看成是由点组成的,由发光二极管的发光代表一个点,通过连线,把每个发光点连起来,从而形成一个汉字。这样就是说,笔画中的每个点代表一个发光二极管发光,通过行编码,使每一次显示都是显示一行

13、,分8次显示,那么每个汉字都有8个编码,则所要显示的汉字的编码就要通过代码段定义,其中二极管发光,即为0,二极管不发光即为1,通过对代码段的不同定义来显示不同的汉字。代码中将一个字的8行分别显示,然后将一个字显示完毕,通过自减的方式改变寄存器的值,进而判断一个字是显示完毕。如果显示完毕则显示下一个字,此时要注意将五角星也要进行编码,按照要显示的顺序写入代码中,待所有的字(包括五角星在内),显示完毕后,继而跳回起始处,接着显示字,实现汉字的循环显示。本实验为8*8点阵LED动态显示,欲让人眼睛能看清楚所显示的字符,则刷新频率至少为50HZ,即每个字的显示周期为T字=20ms,由于是逐行扫描,每个

14、字8行,则行周期为T行=20ms/8=2.5ms。又要求每个字显示2s后再显示下个字,则每个字刷新次数=2s/20ms=100次。另外每个字由8行组成,每行中显示的列码为一个字节。首先,为每个要显示的字符编码,建立代码表。如下图所示:其中字符编码中为0代表该位置LED灯亮,1表示该位置LED灯灭。 图3-1 几个汉字编码图 db 0bdh,0fdh,1dh,0d0h,0ddh,0ddh,0ddh,0cdh;计 db 0ffh,0efh,0c7h,01h,83h,0c7h,93h,7dh; db 0bbh,0ffh,11h,0bbh,33h,99h,0bbh,0bbh;算 db 0ffh,0ef

15、h,0c7h,01h,83h,0c7h,93h,7dh; db 0bfh,0a3h,0bh,0abh,2bh,8bh,0aah,0a8h;机 db 0ffh,0efh,0c7h,01h,83h,0c7h,93h,7dh; db 0efh,0c7h,81h,0efh,0c3h,0fbh,0e7h,0f7h;专 db 0ffh,0efh,0c7h,01h,83h,0c7h,93h,7dh; db 0dbh,0dbh,0dbh,5ah,99h,0dbh,0dbh,00h;业 db 0ffh,0efh,0c7h,01h,83h,0c7h,93h,7dh;然后设置8255A的工作方式,设置每个字符的循环

16、次数。选中一行时,送出列码,并调用延时子程序,以达到每行的行周期要求,依次顺序显示8行,则完成一个字的显示。但是要达到每个字显示2s,则需要对每个字符刷新显示100次,如此完成对五个汉字及其间插入的五个“”,共计十个字符的一遍显示。当比较SI与OFFSET ta+50H相等时,说明一遍显示完成(因为每个字符为8个字节,十个字符即80个字节。而80D=50H,所以得出上述判断条件)。此时重新取代码首址,从而开始新的一轮显示,以次达到循环显示的效果程序流程图:YNY空操作,实现每行显示2.5ms开始设置8255A工作方式取汉字代码有效地址>SI设置每个字的刷新次数>bhSI+7SI+1

17、SI-8循环8次>CX,取首列列码送行码,显示一列CX=0?NYNbh=0?cmp si, offset ta +50h判断所有字符是否显示完 图3-2 控制程序流程图3.控制程序15MODELTINYPCIBAR3EQU1CH;8位I/O空间基地址(它就是实验仪的基地址, 也为DMA & 32 BIT RAM板卡上的8237提供基地址) Vendor_IDEQU 10EBH;厂商ID号Device_IDEQU8376;设备ID号.STACK100.DATAIO_Bit8_BaseAddressDW?msg0DB'BIOS不支持访问PCI $'msg1DB'

18、;找不到Star PCI9052板卡 $'msg2DB'读8位I/O空间基地址时出错$'COM_ADDDW00F3H;控制口偏移量PA_ADDDW00F0H;PA口偏移量PB_ADDDW00F1H;PB口偏移量ta db 0bdh,0fdh,1dh,0d0h,0ddh,0ddh,0ddh,0cdh;计 db 0ffh,0efh,0c7h,01h,83h,0c7h,93h,7dh; db 0bbh,0ffh,11h,0bbh,33h,99h,0bbh,0bbh;算 db 0ffh,0efh,0c7h,01h,83h,0c7h,93h,7dh; db 0bfh,0a3h,0

19、bh,0abh,2bh,8bh,0aah,0a8h;机 db 0ffh,0efh,0c7h,01h,83h,0c7h,93h,7dh; db 0efh,0c7h,81h,0efh,0c3h,0fbh,0e7h,0f7h;专 db 0ffh,0efh,0c7h,01h,83h,0c7h,93h,7dh; db 0dbh,0dbh,0dbh,5ah,99h,0dbh,0dbh,00h;业 db 0ffh,0efh,0c7h,01h,83h,0c7h,93h,7dh;.CODESTART:MOVAX,DATAMOVDS,AXNOPCALLInitPCICALLModifyAddress;根据PCI提

20、供的基地址,将偏移地址转化为地址 mov dx,COM_ADD ;控制端口地址 mov al,10000000b;控制字方式(a.b口均为输出) out dx, al lable1: mov si,offset ta;汉字代码有效地址lable2: add si,8 mov bh,64h;循环100次-每个字(即每个字显示20ms)lable3: sub si,8 mov cx,8 mov al,11111110b;首行行码,共阴极送行码时0表示选中lable4: mov dx,PA_ADD;a口地址 out dx,al rol al,1;该字下一字节,下一行的行码 mov bl,al;保存a

21、l的内容 mov al,si;列码 not al mov dx,PB_ADD;b口地址 out dx,al mov al,bl inc si;指向下一行对应的列码 push cx ;保存cx即要显示的行数,因为下面要用到cx寄存器mov cx,9320h;设置的数的大小可控制显示的稳定性,要设置的大些(显示2.5ms) loop1: loop loop1 pop cx ;恢复寄存器的内容 loop lable4;8行(一个字)未显示完,显示下一行 dec bh cmp bh,0;判断每个字是否刷新满100次 jnz lable3;未满100次继续刷新,满100次向下执行 cmp si, off

22、set ta +50h;判断字是否显示完 jnz lable2;未完继续显示下个字,该为lable就是向上滚动循环显示 jmp lable1;所以字符都扫描一遍后,重复下一遍InitPCIPROCNEARMOVAH,00HMOVAL,03HINT10H;清屏MOVAH,0B1HMOVAL,01HINT1AHCMPAH,0JZInitPCI2LEADX,msg0InitPCI1:MOVAH,09HINT21HJMPExitInitPCI2:MOVAH,0B1HMOVAL,02HMOVCX,Device_IDMOVDX,Vendor_IDMOVdi,0INT1AHJNCInitPCI3;是否存在S

23、tar PCI9052板卡LEADX,msg1JMPInitPCI1InitPCI3:MOVDI,PCIBAR3MOVAH,0B1HMOVAL,09HINT1AH;读取该卡PCI9052基地址JNCInitPCI4LEADX,msg2JMPInitPCI1InitPCI4:ANDCX,0FFFCHMOVIO_Bit8_BaseAddress,CXRETInitPCIENDPModifyAddressPROCNEARADDCOM_ADD,CXADDPA_ADD,CXADDPB_ADD,CXRETModifyAddressENDPExit:MOVAH,4CHINT21HENDSTART四 上机调试

24、过程1.硬件调试:在进行硬件调试的过程中,发现字显示是反的,是由于PB口的数据线接反了。程序只需选择一个8*8LED显示,而实现过程中有两个8*8LED显示,此时只需将PC口连接到列选择线的R9-R16使第二个8*8LED屏蔽掉。2.软件调试在检查硬件正确之后,开始调试程序,其结果显示不是预期的结果,经过分析之后发现在程序中我送的行选择码00000001与我进行汉字编码的方案相反,导致结果出错,将其改为11111110就可以了。在实现每个字延时2.5ms的过程中,我用星研公司提供的延时软中断,发现显示的字是在所设置的时间内不断刷新,直到时间结束,这样看起来不是一个字显示了2s钟,而是在一直刷新

25、。修改方法是将延时用循环来实现,即用cx设置刷新时间,用loop语句来实现。显示出现不稳定,是由于延迟时间的长短问题,应该将每行的显示时间设置长一些,则显示就稳定了。在实验中只要求显示一个8*8LED,开始我的连线出现第二个LED也显示全亮,解决办法用PC口接入R9R16,将其屏蔽,则不会显示全亮。3联机调试联机调试时,刚开始显示结果显示有些不对,经单步调试后才发现是因为值并没有送到接口去,进行修改,参考书本上知识,最后可以了,在单步调试中出现了正确结果,但在全速运行时结果却没出来,后来发觉是延迟时间太短导致结果不明显,然后将延迟时间增长,再进行全速运行便能得到正确的显示. 4 调试结果及问题

26、的提出(1). 如何使显示更稳定? 答:lable中的bx值可以改变字符的移动速度:当bh值越大的时候,字符移动的越慢; 通过修改最内层空操作次数cx,可以控制字符的显示亮度。当cx值越大,字符越亮,也就越稳定。(2). 如何实现向上滚动显示每个字?答:解决方法是将add si 8 分为 add si 7 和add si 1两步执行。再经过sub si 8后,每次就会产生一帧的差距。如此就回实现移动的目的。其是在字符编码不变和送LED 行列基础上实现的。(3).如何实现向左循环滚动显示每个字?答:解决方法是将add si 8 分为 add si 7 和add si 1两步执行。再经过sub s

27、i 8后,每次就会产生一帧的差距。如此就回实现移动的目的。当然这其中是在修改字符编码和送LED 行列基础上实现的。原来的字符是按行编码,现在为了实现从右向左移动则将编码修改为按列编码。5. 总结我掌握了8*8LED的工作原理,清楚了8*8LED点阵共阴极和共阳极有何区别:共阳极,1表示亮,0表示灭;有两种实现方法:即送行码为0时表示这一行被选中,再送列码为1的位相应显示为亮,这是利用高低电平的差来显示;即送行码为1时表示这一行被选中,再送列码为0的位相应显示为亮;共阴极,0表示亮,1表示灭,同理也有两种实现方法,与共阳极相反。在编程过程中,一定要先画好程序流程图,然后再开始编程,这样效率会更高,这样在调试过程中容易发现错误。汉字显示的稳定性取决于每行显示的延迟时间,它的控制直接影响字显示的稳定

温馨提示

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

评论

0/150

提交评论