ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:55.80KB ,
资源ID:17872950      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17872950.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微机接口课程设计电子钟实验 网络专业文档格式.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

微机接口课程设计电子钟实验 网络专业文档格式.docx

1、第11脚CLK是时钟输入脚,当该端输入一个上升沿,74HC273就会把数据输入端D0-D7的数据锁存住并输出,直到下一个上升沿的到来才会改变。二、实验原理 1、通用并口模块原理图:图(1)由一片74HC245作为键盘的行扫描电路(键盘的列扫描信号由一片74HC273提供,如图2所示),74HC245的P0-P3已经分别接到4*3的小键盘的4行。另外,这片74HC245的引脚和4*3小键盘行、列都有引出相应的接插口,所以也能另作它用,例如用74HC245来驱动发光二极管,或者与适当的输入输出器件(例如8255)相配合就可以进行键盘扫描实验。该片74HC245的/G端引了出来(KEYCS0)作为它

2、的片选信号端。图(1) 图(2)中左边的74HC273实现数码管的段码驱动,右边的74HC273除了与图(1)中的74HC245配合,作为键盘的行列扫描信号,来确定那个键被按下,还作为6个共阴数码管的位驱动。该模块的6个共阴数码管的段引脚(分别是KEY模块的的a、 b、c、d、e、f、g、dp)和位引脚(分别是KEY模块上的DS1、DS2、DS3、DS4、DS5、DS6)都引出来,如果用其它的驱动模块也可以控制数码管的显示。因为这两片74HC273都只作为输出用,所以用一片74HC32对IOW和它们各自的片选信号进行逻辑与运算,仅当是写操作时才会选中它们,以此避免不该它们工作时它们却工作的情况

3、发生:在KEYCS1和IOW有效(低电平)的前提下,74HC32的输出第6脚有效,对应的就是控制位选的74HC273被选通。在KEYCS2和IOW有效(低电平)的前提下,74HC32的输出第8脚有效,对应的就是控制段选的74HC273被选通。图(2) 2、数码管字型编码表:从上面的原理图可以看出,本模块显示部分由个共阴极数码管组成,并由两片74HC273分别对位选和段选进行控制,位选的选通端子为KEYCS1,段选的选通端子为KEYCS2,相应的数码管字型编码如表1所示。三、实验示例:(可参考随机的演示程序key.asm) 该示例程序不停的扫描键盘,当扫描到有键按下时就把该键的键值(即12个按键

4、的排列顺序)送到数码管上显示。硬件线路连接示例: 数码管的6根位控制信号线DS1DS6分别接至位选74HC273的输出Q0Q5; 译码地址输出端CS3接至KEYCS0; 译码地址输出端CS4接至KEYCS1; 译码地址输出端CS5接至KEYCS2;GAL的输出(译码电路可看前面的地址译码电路部分):x:表示可以取任意值,这里取“0” 按照如上的硬件连线示例可得:74HC245的地址 340H;段选锁存器的地址 360H;位选锁存器的地址 380H;下面是一个只有显示功能没有键盘扫描的小程序,可以参考一下:.486 DATA SEGMENT AT 0 USE16 ORG 1000H COUNT

5、DB ?DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE ORG 3000H BEG: JMP START TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH DPORT1 EQU 380H DPORT2 EQU 360H START: MOV AX,DATA MOV DS,AX MOV CL,6 KK: MOV AL,CL MOV BX,OFFSET TAB XLAT TAB MOV DX,DPORT1 OUT DX,AL NOP MOV DX,DPORT2 MOV AL,0FFH JMP KK CODE

6、ENDS END BEG 三、程序流程图主程序初始化各段寄存器及相关变量初始化8255、8254、8259芯片设置中断向量,开放8259中断屏蔽开放处理器中断中断服务程序保护现场判断时间是否不小于59分55秒 报时扫描键盘G键?调用启停子程序S键?调用设置时间子程序COUNT加1COUNT=40?修改时间,调用ADDONE子程序COUNT清0显示时间,调用显示时间子程序结束中断(发EOI命令)恢复现场中断返回四、实验源代码.486p DATA SEGMENT AT 0 USE16 ORG 1000H HOUR DW ? MIN DW ? SEC DW ? ST DB ? COUNT DB ?D

7、ATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,DS:DATAORG 1500H BEG:JMP START TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,00H ;0F的共阴极七段译码表 00H表示不显示任何东西KEYCOD DB 0EEH,0DEH,0BEH,0EDH,0DDH,0BDH,0EBH,0DBH,0BBH,0E7H,0D7H,0B7H ;行列编码值 KEYVAL DB 0,1,2,3,4,5,6,7,8,9,0AH,0BH ;所有键的键面值 PORT1 EQU 340H ;数码管

8、段选端口 PORT2 EQU 360H ;数码管位选端口,键盘矩阵的行列端口START: MOV EAX,60000000H MOV CR0,EAX MOV AX,DATA MOV DS,AX MOV HOUR,0203H ;小时分钟以及秒的初始化 MOV MIN,0509H MOV SEC,0502H LEA BX,TAB MOV ST,0 ;开始暂停标志位置0 MOV COUNT ,0 ;中断次数计数初始值为0 ;8255初始化 ,用于产生报时的脉冲 MOV DX,20FH ;利用左四的8255,控制口为20FH MOV AL,10000000B ;C口输出 OUT DX,AL MOV D

9、X,20BHL ;C0输出1,蜂鸣器不响 MOV AL,0FFH OUT DX,AL 8254初始化,用于产生周期为25ms的中断 MOV AL,00110110B ;计数器0,先低后高,方式三,二进制 MOV DX,32cH ;写往控制口 MOV DX,320H ;计数器0写初值:47KHz*25ms MOV AX,1175 MOV AL,AH8259初始化 CLI :关中断 MOV DX,300H ;ICW1 MOV AL,00010011B MOV DX,308H ;ICW2 MOV AL,08H ;IR0中断类型号为08HOUT DX,ALMOV AL,00000001B ;ICW4

10、MOV AL,0FEH ;IR0开屏蔽 OUT DX,AL XOR AX,AX ;装载中断向量 MOV ES,AX MOV DI,08H*4 MOV AX,OFFSET INTSR MOV ES:DI,AX MOV AX,SEG INTSRDI+2,AX STI ;开中断 JMP $ INTSR PROC ; CMP MIN,0509H ;比较当前时间是否在59分55秒00分00秒之间 JL NEXT1 CMP SEC,0505H MOV DX,20BH MOV AL,00H ;蜂鸣器低有效,报时 JMP NEXT2NEXT1: CMP MIN,0 JNE NEXT3 CMP SEC,0 MO

11、V DX,20BH MOV AL,00H ; JMP NEXT2NEXT3: MOV DX,20BH MOV AL,0FFHNEXT2: CMP COUNT,20 ;用8255产生0.5ms的蜂鸣 JLE NEXT4NEXT4: CALL KEYCHECK ;检测有无键按下 CMP AL,0AH ;启停键按下,调用启停程序 JNZ NEXT5 CALL TSTART JMP NEXT6NEXT5: CMP AL,0BH ;设置键按下,调用设置时间程序 JNZ NEXT6 CALL SETTIMENEXT6: INC COUNT ;当COUNT直为40时,加一秒,之后置0 CMP COUNT,4

12、0 ;25ms*40=1s JB NEXT7 CALL ADDONE MOV COUNT,0NEXT7: CALL SHOW ;显示时间 MOV AL,20H ;发EOI命令,结束中断 MOV DX,300H OUT DX,AL IRETINTSR ENDPTSTART PROC ;控制暂停和开始 CMP ST,00H JNE L1 DEC ST JMP L2 L1: INC ST L0: CALL KEYCHECK CMP AL,0AH JZ L2 CALL SHOW JMP L0 L2: RETTSTART ENDPADDONE PROC ;加1秒子程序 MOV AX,SEC ;当前秒个位

13、为9,加1后变0,十位加1 CMP AL,9 JE N1 INC AL MOV SEC,AX JMP N6N1: INC AH MOV AL,0 CMP AH,6 ;十位加1后为6,则秒变为00,分钟个位加1 JE N2 MOV SEC,AX JMP N6N2: MOV AX,0 MOV AX,MIN ; 当前分钟个位为9,加1后变0,十位加1 CMP AL,9 JE N3 MOV MIN,AXN3: MOV AL,0十位加1后为6,则分钟变为00,小时个位加1 JE N4N4: MOV AX,HOUR CMP AX,0204H ;小时加1后与24比,相等,则变为0 JE N5 MOV HOU

14、R,AX JMP N6N5:N6:ADDONE ENDPSETTIME PROC ;设置时间子程序 MOV HOUR,0 MOV MIN,0 MOV SEC,0 NOPL1:调用KEYCHECK,无键按下时,AL中值为0CH CALL DELAY CMP AL,0CH JNZ L2 JMP L1L2: CMP AL,02H JG L1 ;设置小时十位时,将其他各位数码管灭掉及对应的七段译码表0CH MOV AH,AL MOV BYTE PTRHOUR+1,AL MOV BYTE PTRHOUR,0CH MOV MIN,0C0CH MOV SEC,0C0CHL3: CALL SHOW设置小时的个

15、位 JZ L3 MOV AH,BYTE PTRHOUR+1L4: CMP AX,0204H JGE L1L5: CALL SHOW设置分钟的十位 JZ L5L6: CMP AL,06H JGE L1 MOV BYTE PTRMIN+1,AL L7:设置分钟的个位 JZ L7 MOV AH,BYTE PTRMIN+1 L8: CMP AX,0509H JG L1 L9:设置秒的十位 JZ L9 L10: CMP AL,06H MOV BYTE PTRSEC+1,ALL11:设置秒的个位 JZ L11 MOV AH,BYTE PTRSEC+1L12: CMP AX,0509H MOV SEC,AX

16、 L13: CALL SHOW CALL KEYCHECK ;再次按键,启动计时 JZ L13 RETSETTIME ENDPKEYCHECK PROC ;判断有无键按下子程序 PUSH BX CALL CLEAR MOV DX,PORT2 IN AL,DX AND AL,0FH CMP AL,0FH JZ EXIT ;有按键按下,延时消抖 NOP NOP 再次确认是否有键按下 IN AL,DX CMP AL,0FH JZ EXIT ;开始对每一列进行逐行扫描 MOV CX,3 MOV BL,0FEHNEXT:MOV AL,BL MOV DX,PORT2 IN AL,DX AND AL,0FH

17、 JNZ KEY ROL BL,1 LOOP NEXT JMP EXITKEY: SHL BL,4 OR AL,BL ;形成一个字节的键码信息存入AL,高4位为列信息低4位为行信息 LEA SI,KEYCOD LEA DI,KEYVAL MOV CX,12NEXT11: CMP AL,SI JZ FIND INC SI INC DI LOOP NEXT11 JMP EXITFIND: MOV AL,DI ;AL中内容为所按键的键面值 PUSH AXWAIT1: IN AL,DX ;判断按键是否已释放,若无则等待 CMP AL,0FH JNZ WAIT1 POP AX JMP EXIT2 EXI

18、T:MOV AL,0CH EXIT2:NOP POP BX KEYCHECK ENDPSHOW PROC ; XLAT MOV DX,PORT1 ;段选输出数据 MOV DX,PORT2 ;位选输出小时的个位 MOV AL,0C2H CALL CLEAR MOV AL,AH 位选输出小时的十位 MOV AL,0C1HCALL DELAY MOV AX,MIN位选输出分钟的个位 MOV AL,0C8H MOV AL,AH位选输出分钟的十位 MOV AL,0C4H MOV AX,SEC位选输出秒的个位 MOV AL,0E0h XLAT 位选输出秒的十位 MOV AL,0D0HSHOW ENDPCO

19、DE ENDS END BEGDELAY PROC ;延时子程序 PUSH CX MOV CX,1000 LOOP $ POP CXDELAY ENDPCLEAR PROC ;使七段译码管全灭子程序 MOV AL,00H MOV DX,PORT1 MOV DX,PORT2CLEAR ENDP五、总结为期不到一周的微机接口课程设计结束了,在这几天中,经过自身的努力,可以算得上是比较成功的完成了实验,但仍有不足之处。首先先谈谈这几天的收获。第一天定下了课设的题目,紧接着理清思路,明白实验大概的流程,并根据流程着手写相关的代码。第二天基本任务还是完善代码,并上机编译修改错误,由于当天时间较紧,虽然硬

20、件已经连接,但是仍有错误,无法正常运行,主要是因为中断服务程序无法进入,导致不能正常计时。第三天根据前一天的错误,找到问题所在:8259的一排端口无法正常使用,换了一排,就有结果,但是还是有许多问题。首先就是在设置时间时,数码管会变暗,因此,我增加了DELAY延时,结果正确,然而又出现了新的问题,也是在设置时间时,当我设置小时的十位的时候,个位也会出现数据,不过是乱码,经过老师的指导,才发现在SETTIME时,并没有清掉端口的值导致错误,经过修正后,结果正确。剩下的就是程序上有些小错误,比如说分钟以及秒的设置上,十位均要小于6,在这点上出现了问题等。这次课程设计,虽说时间不是很长,但我仍感觉到收获颇丰。首我的先编程能力得到了很大的提高,因为在之前的上机实验中,并没有像此次课设那样,要将多个芯片联合使用,这次的课设,使我懂得了设计程序的全局观念,并增强自身的纠错能力。这次课设将我平时所学的理论知识与实践充分结合的,让我更加深刻的了解了各芯片的工作原理,总之,这次的课设让我获益匪浅。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1