微机原理课程设计报告-12_第1页
微机原理课程设计报告-12_第2页
微机原理课程设计报告-12_第3页
微机原理课程设计报告-12_第4页
微机原理课程设计报告-12_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

合肥工业大学计算机与信息学院课程设计课程:微机原理与接口技术设计专业班级:计算机科学与技术11-1班学号:20112446姓名:朱明明用8255和8253使发光二极管按一定规律轮流点亮一、设计题目及要求:发光二极管点亮方式:将发光二极管分为n组,每组12/n个灯管,从左到右依次点亮这些灯管,每组灯管发光时间为t。设有4种发光组合:(1)n=12,t=1s:每个灯管间隔1s循环点亮。(2)n=12,t=2s:每个灯管间隔2s循环点亮。(3)n=6,t=1s:每两个灯管间隔1s循环点亮。(4)n=6,t=2s:每两个灯管间隔2s循环点亮。这四种方式分别对应按键“A”、“B”、“C”、“D”。按对应按键后进入对应方式。退出:按“E”键后,所有灯管灭,七段数码管显示初始“P.”状态二、设计思想:82538253键盘八段数码管二极管8255控制暗灭提供延时接受显示按键图1各模块之间的关系该系统以可编程并行接口芯片8255为核心控制二极管的暗灭,通过Intel8253可编程定时/计数器产生的延时来延时,通过键盘扫描来接受外部控制.并通过八段数码管将A,B,C,D显示,并且转入相应的模式执行。三、功能流程图:由于四种发光组合分别对应按键“A”、“B”、“C”、“D”。按对应按键后进入对应方式。因此这里我们只描述一种发光情况下的功能流程图,不同情况下的发光方式切换由程序调用不同的子模块完成。这里为了描述方便,我们选取发光组合1来描述,n=12,t=1s,即每个灯管间隔1s循环点亮。功能流程如下:初始化8255,8253的工作方式,循环次数=12,当前二极管状态i初始化8255,8253的工作方式,循环次数=12,当前二极管状态i显示当前二极管状态,调用8253提供的延时循环次数减一,二极管状态加一显示当前二极管状态,调用8253提供的延时循环次数减一,二极管状态加一扫描小键盘键盘判断是否按下A,B,C,D判断是否按下A,B,C,DNNYY转到对应按键的发光组合转到对应按键的发光组合模块一8255实验中我们使用8255的B口和C口的低4位控制二极管的开关,由于实验箱提供的二极管采用共阳极接法,因此当B,C口输出低电平则点亮对应的二极管,输出高电平则关闭对应的二极管,所以B,C口设置为输出口,实验中采用方式一;模块二小键盘识别实验系统的实验台上有1个24键小键盘,组成一个3X8的键盘矩阵。在设计键盘程序时,我们采用行扫描法,所谓行扫描法,就是一行一行地扫描,以确定按键的位置。具体地说:先使第0行接地,其余行为高电平,看第一行是否有键闭合。如果此时某条列线为低电平,则表示第0行和此列相交位置上的键被按下;如果所有列线均为高电平,则无键按下。接着扫描下一行,用同样方法确定是否有键按下,如此往下逐行扫描,直至最后一行。在扫描的过程中,当发现有键按下时便退出扫描。根据行线和列线位置,便可识别出是哪一个键闭合。通常在键盘扫描程序的第一步迅速判断是否有键按下。具体办法是使所有行均输出低电平,检查列线中是否有低电平。若有,则表示有键按下,经延迟去抖动后,在按前述方法判别按键的具体位置;若无则循环等待。另外,在设计键盘程序时,我们还考虑了如何消除抖动问题。抖动是指用手按下键时,按键往往会在闭合状态和断开状态之间来回跳动。若不解决抖动问题会引起对闭合键的错误识别,由于抖动持续时间通常不大于10ms,因此可通过延迟来等待抖动消失。模块三七段数码管为了使我们的系统更便于观察和验证,我们添加了8段数码管的应用,即不仅在小键盘上按下ABCD任意一个按键后,程序不仅跳到相应的发光组合下执行,而且还先会在七段数码管上显示相应的按键。如图图2所示,实验台上设有6个共阴极七段数码管及驱动电路,段码为同向驱动,位码为反向驱动,从段码与位码的驱动器输入端(段码输入端:a、b、c、d、e、f、g、dp,位码输入端:s1,s2,s3,s4,s5,s6)输入不同的代码就可以显示不同数字或符号。图2 数码管显示电路当往段码锁存器的某位输出高电平,则对应的二极管发光。据此,可得字形代码表,见图3。段码锁存器的最高位为dp,此位对应数码管右下角的小圆点,当dp位为1,小圆点发光。图6-2数码管字形代码表往段码锁存器输出字形后,还需要相应位的位码选中的数码管才能显示段码对应的字形。位码格式如下:D7D6D5D4D3D2D1D0XXS6S5S4S3S2S1位码的高两位无意义,当其余某位为1时,则对应的数码管被选中,显示段码对应的字形。例如,当位码为01H时,左方第一个数码管被选中;当位码为3FH时,6个数码管均被选中。模块三LED二极管控制在某一种方式下,循环点亮各二极管所以每次显示各二极管的状态是确定的,在n=12,t=1s,12轮循环的状态对应如下B口:07FH0BFH0DFH0EFH0F7H0FBH0FDH0FEH0FFH0FFH,0FFH,0FFHC口0FFH0FFH0FFH0FFH0FFH0FFH0FFH0FFH0F7H0FBH0FDH0FEH把这些状态做成一张状态表,每次直接从8255的BC口输出即可;模块四8253提供延时实验台上数码管的左下方有个分频器模块,有T0到T78个固定频率输出可以作为8253的时钟输入。8253采用计数器1和计数器2,其中计数器1的输出作为计数器2的输入,得到一秒的低电平型号,接到8255的A0引脚上,所以8255A口设置为输入口,同样采用方式0.结果讨论:实验连线如下8253延时连线系统整体连线经老师验证,实验很好的完成了课程设计的要求,除此之外,我们做了以下几点改进第一,设计键盘程序时,我们做了消除按键抖动问题。抖动是指用手按下键时,按键往往会在闭合状态和断开状态之间来回跳动。若不解决抖动问题会引起对闭合键的错误识别,由于抖动持续时间通常不大于10ms,因此可通过延迟来等待抖动消失。第二,将按键显示到七段数码管上。为了使我们的系统更便于观察和验证,我们添加了8段数码管的应用,即在小键盘上按下ABCD任意一个按键后,程序不仅跳到相应的发光组合下执行,而且还会在七段数码管上显示相应的按键。第三,添加了依次点亮4个黄灯,绿灯,红灯的发光组合。由于我们组5个人,完成了基本功能后,向老师征求意见,添加了新的亮灯方式,并很好的是实现了。附录:实验代码:(完整的源程序)CODESEGMENTASSUMECS:CODE,DS:CODE,ES:CODEORG1000HSTART:CALLMODE1CMPFLAG,1JEGO1CALLMODE2CMPFLAG,1JEGO1CALLMODE3CMPFLAG,1JEGO1CALLMODE4CMPFLAG,1JEGO1CALLMODE5CMPFLAG,1JEGO1JMPSTART;显示期间无A-F键按下就循环显示4中模式HERE:CALLGETKEYGO1:MOVFLAG,0PUSHCXMOVCX,1000HDIS:CALLDISPLAY;显示按键LOOPDISPOPCXCMPAL,0AH;按下A键JEL1CMPAL,0BH;按下B键JEL2CMPAL,0CH;按下C键JEL3CMPAL,0DH;按下D键JEL4CMPAL,0FH;按下F键JEL5JMPSTARTL:MOVLEDBUF,0CH;显示P.JMPHEREL1:CALLMODE1CMPFLAG,1JEGO1JMPLL2:CALLMODE2CMPFLAG,1JEGO1JMPLL3:CALLMODE3CMPFLAG,1JEGO1JMPLL4:CALLMODE4CMPFLAG,1JEGO1JMPLL5:CALLMODE5CMPFLAG,1JEGO1JMPLMODE1:;小灯分为12组,每隔1秒循环显示一个LED亮,其它都灭MOVDX,PCTLMOVAL,90H;A口作为输入口,用于接收8253的out2输出信号B,C口作为输出口,用于控制LED的亮灭OUTDX,ALMOVDX,PB;灭所有的LED灯MOVAL,0FFHOUTDX,ALMOVDX,PCMOVAL,0FFHOUTDX,ALMOVCX,000CH;循环12次MOVSI,0MOVDI,0AGAIN1:PUSHCXCALLGETKEY;扫描键盘,得到按键的数值,结果保存在al中POPCXCMPAL,0AHJBMODE1_GO1CMPAL,0FHJAMODE1_GO1MOVFLAG,1JMPMODE1_GO2MODE1_GO1:MOVDX,PBMOVAL,MODE12_DATA_PB[SI];向PB口输出数据OUTDX,ALMOVDX,PCMOVAL,MODE12_DATA_PC[DI];向PC口输出数据OUTDX,ALINCSIINCDICALLDELAY_1_SECOND;延时一秒LOOPAGAIN1MODE1_GO2:MOVAH,ALMOVDX,PB;灭所有的LED灯MOVAL,0FFHOUTDX,ALMOVDX,PCMOVAL,0FFHOUTDX,ALMOVAL,AHRETMODE2:;小灯分为12组,每隔2秒循环显示一个LED亮,其它都灭MOVDX,PCTLMOVAL,90H;A作为输出口B,C口作为输出口,用于控制LED的亮灭OUTDX,ALMOVDX,PB;灭所有的LED灯MOVAL,0FFHOUTDX,ALMOVDX,PCMOVAL,0FFHOUTDX,ALMOVCX,000CH;循环12次MOVSI,0MOVDI,0AGAIN2:PUSHCXCALLGETKEY;扫描键盘POPCXCMPAL,0AHJBMODE2_GO1CMPAL,0FHJAMODE2_GO1MOVFLAG,1JMPMODE2_GO2MODE2_GO1:MOVDX,PBMOVAL,MODE12_DATA_PB[SI];向PB口输出数据OUTDX,ALMOVDX,PCMOVAL,MODE12_DATA_PC[DI];向PC口输出数据OUTDX,ALINCSIINCDICALLDELAY_1_SECOND;延时2秒CALLDELAY_1_SECONDLOOPAGAIN2MODE2_GO2:MOVAH,ALMOVDX,PB;灭所有的LED灯MOVAL,0FFHOUTDX,ALMOVDX,PCMOVAL,0FFHOUTDX,ALMOVAL,AHRETMODE3:;小灯分为6组,每隔1秒循环显示2个LED亮,其它都灭MOVDX,PCTLMOVAL,90H;B,C口作为输出口,用于控制LED的亮灭OUTDX,ALMOVDX,PB;灭所有的LED灯MOVAL,0FFHOUTDX,ALMOVDX,PCMOVAL,0FFHOUTDX,ALMOVCX,0006H;循环6次MOVSI,0MOVDI,0AGAIN3:PUSHCXCALLGETKEY;扫描键盘POPCXCMPAL,0AHJBMODE3_GO1CMPAL,0FHJAMODE3_GO1MOVFLAG,1JMPMODE3_GO2MODE3_GO1:MOVDX,PBMOVAL,MODE34_DATA_PB[SI];向PB口输出数据OUTDX,ALMOVDX,PCMOVAL,MODE34_DATA_PC[DI];向PC口输出数据OUTDX,ALINCSIINCDICALLDELAY_1_SECONDLOOPAGAIN3MODE3_GO2:MOVAH,ALMOVDX,PB;灭所有的LED灯MOVAL,0FFHOUTDX,ALMOVDX,PCMOVAL,0FFHOUTDX,ALMOVAL,AHRETMODE4:;小灯分为6组,每隔2秒循环显示2个LED亮,其它都灭MOVDX,PCTLMOVAL,90H;B,C口作为输出口,用于控制LED的亮灭OUTDX,ALMOVDX,PB;灭所有的LED灯MOVAL,0FFHOUTDX,ALMOVDX,PCMOVAL,0FFHOUTDX,ALMOVCX,0006H;循环6次MOVSI,0MOVDI,0AGAIN4:PUSHCXCALLGETKEY;扫描键盘POPCXCMPAL,0AHJBMODE4_GO1CMPAL,0FHJAMODE4_GO1MOVFLAG,1JMPMODE4_GO2MODE4_GO1:MOVDX,PBMOVAL,MODE34_DATA_PB[SI];向PB口输出数据OUTDX,ALMOVDX,PCMOVAL,MODE34_DATA_PC[DI];向PC口输出数据OUTDX,ALINCSIINCDICALLDELAY_1_SECONDCALLDELAY_1_SECONDLOOPAGAIN4MODE4_GO2:MOVAH,ALMOVDX,PB;灭所有的LED灯MOVAL,0FFHOUTDX,ALMOVDX,PCMOVAL,0FFHOUTDX,ALMOVAL,AHRETMODE5:;小灯分为3组,每隔1秒循环显示4个LED亮,其它都灭MOVDX,PCTLMOVAL,90H;B,C口作为输出口,用于控制LED的亮灭OUTDX,ALMOVDX,PB;灭所有的LED灯MOVAL,0FFHOUTDX,ALMOVDX,PCMOVAL,0FFHOUTDX,ALMOVCX,0003H;循环3次MOVSI,0MOVDI,0AGAIN5:PUSHCXCALLGETKEY;扫描键盘POPCXCMPAL,0AHJBMODE5_GO1CMPAL,0FHJAMODE5_GO1MOVFLAG,1JMPMODE5_GO2MODE5_GO1:MOVDX,PBMOVAL,MODE5_DATA_PB[SI];向PB口输出数据OUTDX,ALMOVDX,PCMOVAL,MODE5_DATA_PC[DI];向PC口输出数据OUTDX,ALINCSIINCDICALLDELAY_1_SECONDLOOPAGAIN5MODE5_GO2:MOVAH,ALMOVDX,PB;灭所有的LED灯MOVAL,0FFHOUTDX,ALMOVDX,PCMOVAL,0FFHOUTDX,ALMOVAL,AHRETDELAY_1_SECOND:;8253MOVDX,DCTLMOVAL,37H;计数器0,模式三,BCD码输入初始值OUTDX,ALMOVDX,DATA0;计数初值为384MOVAL,0FFHOUTDX,ALMOVAL,03HOUTDX,ALMOVDX,DCTL;计数器2,模式3,BCD码输入初始值MOVAL,0B7HOUTDX,ALMOVDX,DATA2;计数初值为100MOVAL,0FFHOUTDX,ALMOVAL,01HOUTDX,AL;8255MOVAL,0;测试PA0=1时,计时达一秒,跳出延时程序MOVDX,PABACK:INAL,DXTESTAL,1JNZBACKRETGETKEY:;键扫子程序moval,0ffh;关显示口movdx,OUTSEGoutdx,almovbl,0movah,0fehmovcx,8key1:moval,ahmovdx,OUTBIToutdx,alshlal,1movah,alnopnopnopnopnopnopmovdx,IN_KEYinal,dxnotalnopnopandal,0fhjnzkey2incblloopkey1nkey:moval,20hretkey2:testal,1jekey3moval,0jmpkey6key3:testal,2jekey4moval,8jmpkey6key4:testal,4jekey5moval,10hjmpkey6key5:testal,8jenkeymoval,18hkey6:addal,blcmpal,10hjncfkeymovbx,offsetKeyTablexlatfkey:retDISPLAY:MOVAH,AL;保存ALMOVLEDBUF,0CHCMPAL,0AHJELEAVE1CMPAL,0BHJELEAVE2CMPAL,0CHJELEAVE3CMPAL,0DHJELEAVE4CMPAL,0EHJELEAVE5CMPAL,0FHJELEAVE6BACK1:MOVDX,OUTBITMOVAL,0OUTDX,AL;关所有八段管,对应位为1时该段被选中MOVAL,LEDBUFMOVDX,OUTSEGOUTDX,ALMOVDX,OUTBITMOVAL,00100000BOUTDX,AL;显示最左边一位八段管CALLDELAYMOVDX,OUTBITMOVAL,0OUTDX,AL;关所有八段管MOVAL,AH;恢复ALRETLEAVE1:MOVLEDBUF,088HJMPBACK1LEAVE2:MOVLEDBUF,083HJMPBACK1LEAVE3:MOVLEDBUF,0C6HJMPBACK1LE

温馨提示

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

评论

0/150

提交评论