音乐喷泉控制系统设计报告
- 格式:docx
- 大小:68.94 KB
- 文档页数:10
音乐喷泉控制系统设计报告 姓名:张彦波 学号:201258502248 班级:计122-2 指导教师:孙红霞 一、设计任务 1、设计内容:设计随音乐节拍变化的喷泉控制系统,并编程实现其相应功能 2、设计要求:按音乐节拍快慢等变化控制喷泉的各喷头水柱高低变化,以构成各种造型。 二、设计思路和原理
通过8255和8254接口芯片来完成音乐喷泉的模拟, 该设计主要是由三部分组成:第一部分为键盘扫描,用来确定按键位置,并给8254计数器赋初值;第二部分为发声部分,是由8254计数器0的输出端产生一定频率的方波信号从而使扬声器发声;第三部分为LED彩灯部分,通过8255端口C控制彩灯亮的个数。 第一部分键盘扫描由8255芯片的PA0—PA4,PB0—PB4分别与键盘单元的Y1—Y4,X1—X4相连,其中B口低4位为输出端,A口低4位为输入端,由它们对键盘单元进行扫描,其确定键值的过程为:先给所有列线输入低电平,然后读取行线,检测行线是否为低电平,如果有某条行线输出低电平,则说明该键盘有按键被按下,否则,说明无按键被按下。采用这种方法就可以快速判断键盘是否有键被按下。在检查到有键按下后,再通过行扫描法判断按下的位置,从而确定按下的是什么键,后经过计算得出计数器0的初值。 第二部分主要用到了8254芯片中的计数器0,其CLK0端在微机内部已接好频率为1MHZ的方波信号(由系统自动提供),计数控制端GATE1接至+5V,计数器输出端OUT0接至发声单元,可以经过键盘的控制来发出声音。 第三部分主要由8255端口C控制,端口C与发光二极管相连,当键盘判断出所按位置的时候,根据所发音的不同亮不同盏数的灯,例:哆— 一盏,唻— 两盏,咪— 三盏以此类推,以上三部分即可完成音乐喷泉的模拟。 三、设计原理流程图
无按键
控制LED显示单元 程序结束 无条件转移
开始程序 定义8255,8254的控制字 键 盘 扫 描 有无键按下 确定按键位置 键值送CPU处理取对应频率 频率计算并对8254的初始值 初始值送8254发出方波 调用延迟控制发音长短 四、实际硬件接线图 键 X1
盘 ∶
数 X4
码
管 显 Y1
示 ∶
单 Y4
元
D0 ∶ D7
LED
显 示 单 元 PB0 D0 ∶ ∶ PB3 D7 PA0 A0 ∶ PA3 A1 WR PC0 ∶ PC7 RD CS 8255单元 XD0 XD0 ∶ ∶ XD7 XD7 XA1 XA1 XA2 XA2 IOW IOW IOR IOR IOY1 IOY2 CLK 系统总线
D0 ∶ D7 GATE1
A0 A1 OUT0 WR
RD
CS CLK0 8254单元
电子发声单 元
+5V 五、程序清单 MY8255_A EQU 0640H MY8255_B EQU 0642H MY8255_C EQU 0644H MY8255_MODE EQU 0646H MY8254_MODE EQU 0686H MY8254_A EQU 0680H SSTACK SEGMENT STACK DW 8 DUP(?) SSTACK ENDS DATA SEGMENT FREQ_LIST DW 441D,495D,556D,589D,661D,742D,833D,882D
DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA MOV DS,AX MOV DX,MY8255_MODE MOV AL,90H OUT DX,AL MOV DX,MY8254_MODE MOV AL,36H OUT DX,AL
BEGIN: CALL SCAN JNZ INK1 JMP BEGIN ;======================================== ;确定按下键的位置 ;======================================== INK1: CALL SCAN JNZ INK2 JMP BEGIN INK2: MOV CH,0FEH MOV CL,00H
COOL: MOV AL,CH MOV DX,MY8255_B OUT DX,AL MOV DX,MY8255_A IN AL,DX L1: TEST AL,01H JNZ L2 MOV AL,00H JMP CO L2: TEST AL,02H JNZ L3 MOV AL,04H JMP CO L3: TEST AL,04H JNZ L4 MOV AL,08H JMP CO L4: TEST AL,08H JNZ NEXT MOV AL,0CH
CO: ADD AL,CL MOV BL,AL MOV DL,2D MUL DL JMP AA1 PLAY: MOV SI,OFFSET FREQ_LIST ADD SI,AX MOV DX,0FH MOV AX,4240H DIV WORD PTR[SI]
MOV DX,MY8254_A OUT DX,AL MOV AL,AH OUT DX,AL MOV AL,BL CMP AL,08H JG CY MOV CX,32H JMP NEXT3 CY: MOV CX,5FH
NEXT3: CALL DELAY LOOP NEXT3 JMP BEGIN
NEXT: INC CL MOV AL,CH
TEST AL,08H JZ KEPP ROL AL,1D MOV CH,AL JMP COOL
AA1: MOV DX,MY8255_C CMP BL,00H JZ A1 JNZ A2 A1: MOV AL,01H OUT DX,AL MOV AL,00H JMP PLAY A2: CMP BL,01H JZ B1 JNZ B2 B1 : MOV AL,03H OUT DX,AL MOV AL,02H JMP PLAY B2: CMP BL,02H JZ C1 JNZ C2 C1: MOV AL,07H OUT DX,AL MOV AL,04H JMP PLAY C2: CMP BL,03H JZ D1 JNZ D2 D1: MOV AL,0FH OUT DX,AL MOV AL,06H JMP PLAY D2: CMP BL,04H JZ E1 JNZ E2 E1: MOV AL,1FH OUT DX,AL MOV AL,08H JMP PLAY E2: CMP BL,05H JZ F1 JNZ H2 F1: MOV AL,3FH OUT DX,AL MOV AL,0AH JMP PLAY F2: CMP BL,06H JZ H1 JNZ H2 H1: MOV AL,7FH OUT DX,AL MOV AL,0CH JMP PLAY H2: MOV AL,0FFH OUT DX,AL MOV AL,0EH JMP PLAY
KEPP: JMP BEGIN ;======================================== ;键盘扫描子程序 ;======================================== SCAN: MOV AL,00H MOV DX,MY8255_B OUT DX,AL
MOV DX,MY8255_A IN AL,DX NOT AL AND AL,0FH RET ;===================================== ;延时子程序 ;===================================== DELAY: PUSH CX MOV CX,000FH
T1: MOV AX,009FH T2: DEC AX JNZ T2 LOOP T1 POP CX RET CODE ENDS END START
六、设计总结
短暂的课程设计在三天之后结束了,虽然时间有些短暂,但我在这次课设中却受益匪浅。 学校希望我们能够更好的掌握微机原理,让我们进行课设,将所学用于实际。刚开始设计的时候,我真的是一点头绪都没有,所以我就去图书馆查找相关的资料、上网查找类似程序。我的这次课设用到了键盘,我不是很了解,于是更加关注这方面的知识。因为在设计的过程中遇到很多困难,我就耐心的阅读一些有关微机原理及接口技术的书籍。在设计的过程中我遇到了一些不明白的问题,于是我就询问同学,她们细心的讲解让我明白了很多,还有老师的帮之,我的程序终于写出来了。接下来我就将自己的程序上机调试,遇到的错误很多,有一些是因为粗心大意,我用半天时间全部修改成功,调试的错误有一些也正是自己编程时容易出现的错误。终于可以将自己的程序运行了,看到最终结果很开心。 经过这三天的课程设计, 我了解到课程设计能真正让人学到实际东西的一门课程,收获真的很多。 首先,我得先知道这次课程设计的内容,知道程序运行之后彩灯随音乐的变化不同的亮灭盏数,知道基本的原理。 其次,了解课设的内容之后,我就需要去知道所用芯片的知识,去查找资料了解程序所用8255、8254这些芯片,并熟悉各个端口的作用,知道信号的来源、如何让键盘与扬声器连接以及控制灯的亮灭。编写程序的过程中,体会最深的是子程序的调用和程序的条理问题,一个程序就算功能实现了,但是也要使主程序和子程序的条理分明,易读性高,才能算一个比较好的程序。 这一周的课设虽然有些辛苦,但过的相当充实。课设学到的东西不仅对期末复习有帮助,也可以对我以后的生活有一些帮助。这次课设让我充分的了解到互相帮助的重要性,不懂的知识经过我们的讨论又掌握了不少。这次设计让我更好的掌握和了解微机原理的有关知识,了解芯片的功能,煅炼我的耐心和毅力,真的让我受益匪浅。