您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页微机原理与接口技术课程设计报告音乐流水灯

微机原理与接口技术课程设计报告音乐流水灯

来源:意榕旅游网


微机原理与接口技术课程设计论文

题目:音乐流水灯

姓名:鞠强

学号:201330020228

班级:1330202

专业:自动化

2015年6月

一 、实验任务及要求 任务:

1、掌握综合使用基本输入输出设备、通用接口芯片、专用接口芯片的方法;

2、掌握实时处理程序的编制和调试方法。

要求:用8255、8253、8259配合8086使蜂鸣器发出唱歌声同

时还能够使用数码管进行边跳舞边唱歌实验。

二 、硬件连线

键盘的控制、LED显示模块:采用74系列模块控制

键盘的行信号Q_0、Q_1、Q_2、Q_3分别与开放的输入信号Q0、Q1、Q2、Q3相连,键盘的列信号P_0、P_1、P_2和开放的输出信号P0、P1、P2相连。74芯片的片选信号CS1接地址译码信号340H, CS2接地址译码信号360H。

蜂鸣器发声控制:由8255模块控制;

PC0直接与蜂鸣器相连,CS_4连接到实验仪中部的地址输出端CS_4

中断处理模块:由8259控制

8259的片选CS-1连地址输出300H, INT1连总线输入INTR,8259模块的INT-A连总线的INTA,8259的SP/1连+5V, 8259的IRQ0连接到8253的 OUT0。

三、程序流程图

主程序

初始化各阶段寄存器及相关变量

初始化8253、8255芯片

设置中断向量、开放8253中断屏蔽

开放处理器中断

扫描键盘

G键 S键 其他键

Stop Stop置0FF 值取 反 调用键盘扫描 程序设置当前 时分秒值 Stop置为0

中断服务程序

保护现场

N 判断时间是否不小于59分55秒

Y

报时

扫描键盘

N

G键? 调用启停子程序 S键? Y Y

调用设置时间子程序 COUNT加1 N COUNT=40? Y

修改时间,调用ADDONE子程序

COUNT清0

显示时间,调用显示时间子程序 结束中断(发EOI命令)

恢复现场 中断返回

四、实验源代码

DATA SEGMENT AT 0 USE16 ORG 1000H HOUR DW ? MIN DW ? SEC DW ? SLL DB ? COUNT DB ? DATA ENDS

CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA ORG 1500H

BEG:JMP START TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,00H ;0~F的共阴极七段译码表 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 ;数码管段选端口 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 SLL,0 ;开始暂停标志位置0 MOV COUNT ,0 ;中断次数计数初始值为0 ;8255初始化 ,用于产生报时的脉冲 MOV EAX,80808080H;控制字

MOV DX,20CH ;后面的是4个8255的控制端口20C-20F (这个地址由实验台决定)

OUT DX,EAX ;初始化8255,A、B、C口均为方式0输出 MOV DX,20BH MOV AL,0FFH OUT DX,AL ;8253初始化,用于产生周期为25ms的中断 MOV AL,00110110B ;计数器0,先低后高,方式三,二进

制 MOV DX,32cH ;写往控制口 OUT DX,AL MOV DX,320H ;计数器0写初值:47KHz*25ms MOV AX,1175 OUT DX,AL MOV AL,AH OUT DX,AL

MOV AL,0FEH OUT DX,AL

XOR AX,AX MOV ES,AX MOV DI,08H*4

MOV AX,OFFSET INTSR MOV ES:[DI],AX MOV AX,SEG INTSR MOV ES:[DI+2],AX

STI JMP $

INTSR PROC CMP MIN,0509H 间

JL NEXT1

CMP SEC,0505H JL NEXT1 MOV DX,20BH

MOV AL,00H OUT DX,AL JMP NEXT2 NEXT1: CMP MIN,0 JNE NEXT3 CMP SEC,0 JNE NEXT3 MOV DX,20BH

MOV AL,00H OUT DX,AL JMP NEXT2

NEXT3: MOV DX,20BH MOV AL,0FFH OUT DX,AL

NEXT2: CMP COUNT,20 JLE NEXT4 MOV DX,20BH

;IR0开屏蔽 ;装载中断向量 ;开中断 ;中断服务程序

;比较当前时间是否在59分55秒~00分00秒之 ;蜂鸣器低有效,报时 ;蜂鸣器低有效,报时 ;用8255产生0.5ms的蜂鸣

MOV AL,0FFH OUT DX,AL NEXT4:CMP SLL,0 JZ LOB

CALL TSTART

LOB: CALL KEYCHECK ;检测有无键按下

CMP AL,0AH ;启停键按下,调用启停程序 JNZ NEXT5 CALL TSTART JMP NEXT6

NEXT5: CMP AL,0BH ;设置键按下,调用设置时间程序 JNZ NEXT6

CALL SETTIME INTSR ENDP

TSTART PROC ;控制时间暂停和开始。 CMP SLL,0 JNZ R1 DEC SLL

R1: CALL KEYCHECK CMP AL,0AH JZ R2

CALL SHOW JMP R1 R2 : INC SLL RET TSTART ENDP

ADDONE PROC ;加1秒子程序

MOV AX,SEC ;当前秒个位为9,加1后变0,十位加1 CMP AL,9 JE N1 INC AL

MOV SEC,AX JMP N6 N1: INC AH

MOV AL,0

CMP AH,6 ;十位加1后为6,则秒变为00,分钟个位加1 JE N2

MOV SEC,AX JMP N6 N2: MOV AX,0 MOV SEC,AX

MOV AX,MIN ; 当前分钟个位为9,加1后变0,十位加1 CMP AL,9 JE N3

INC AL

MOV MIN,AX JMP N6 ADDONE ENDP

SETTIME PROC ;设置时间子程序 LEA BX,TAB MOV HOUR,0 MOV MIN,0 MOV SEC,0 NOP NOP

L1: CALL KEYCHECK ;调用KEYCHECK,无键按下时,AL中值为0CH CALL DELAY CMP AL,0CH JNZ L2 JMP L1 L2: CMP AL,02H JG L1 ;设置小时十位时,将其他各位数码管灭掉及对应的七段译码表0CH MOV AH,AL MOV BYTE PTR[HOUR+1],AL MOV BYTE PTR[HOUR],0CH MOV MIN,0C0CH MOV SEC,0C0CH L3: CALL SHOW CALL KEYCHECK ;设置小时的个位 CALL DELAY CMP AL,0CH JZ L3 MOV AH,BYTE PTR[HOUR+1] SETTIME ENDP

KEYCHECK PROC ;判断有无键按下子程序 PUSH BX

CALL CLEAR MOV DX,PORT2

NEXT: MOV AL,BL MOV DX,PORT2 OUT DX,AL NOP NOP IN AL,DX

AND AL,0FH

CMP AL,0FH JNZ KEY ROL BL,1 LOOP NEXT JMP EXIT KEY: SHL BL,4

OR AL,BL ;形成一个字节的键码信息存入AL,高4位为列信息低4位为行信息

LEA SI,KEYCOD LEA DI,KEYVAL MOV CX,12

NEXT11: CMP AL,[SI] JZ FIND INC SI INC DI

LOOP NEXT11 JMP EXIT

FIND: MOV AL,[DI] ;AL中内容为所按键的键面值 PUSH AX NOP NOP

WAIT1: IN AL,DX ;判断按键是否已释放,若无则等待 AND AL,0FH CMP AL,0FH JNZ WAIT1 POP AX JMP EXIT2 EXIT:MOV AL,0CH EXIT2:NOP

POP BX RET

KEYCHECK ENDP OUT DX,AL

MOV DX,PORT2 ;位选输出分钟的十位 MOV AL,0C4H OUT DX,AL CALL DELAY

CALL CLEAR

MOV AX,SEC XLAT

MOV DX,PORT1 ;段选输出数据 OUT DX,AL

MOV DX,PORT2 ;位选输出秒的个位

MOV AL,0E0h OUT DX,AL CALL DELAY

CALL CLEAR

RET

SHOW ENDP

DELAY PROC ;延时子程序 PUSH CX

MOV CX,1000 LOOP $ POP CX RET CLEAR ENDP CODE ENDS END BEG

五、总结

两天的课程设计到了尾声,在这几天中,通过音乐流水灯实验实验,知道了很多自己的不足,例如,知识不会运用,经常翻书,以及查看相似的例子往实验上套,不过总算完成了实验,实验中遇到很多问题,例如,我的代码可以在一台实验箱上运行,结果良好,不过第二天换了台机子就不行了,数码管不能显示,有的时候蜂鸣器一直响,诸如此类。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务