1、 目 录 一、内容摘要 1 二、课程设计的目的和意义 1 三、课程设计的要点和内容 1 四、硬件电路设计 2 1、单元电路设计: 2 2、电路工作原理: 2 2.1可编程8253计数器 2 2.2 74LS393 3 五、软件开发 4 1、系统程序模块图及说明 4 六、联机调试 4 七、收获和体会 5 八、程序清单 5 一、内容摘要 设计一个电子琴。利用数字键1、2、3、4、5、6、7作为电子琴键,按下数字键发出相应的音调。 二、课程设计的目的和意义 1、进一步掌握定时器编程和应用。 2、了解微机利用定时器产生音乐的基本方法
2、 三、课程设计的要点和内容 1、根据音阶频率表,利用定时器可以产生相应频率的脉冲信号,不同频率的脉冲信号经驱动电路放大后,就会发生不同的音调。 2、对于每个按键的音调发音时间由软件延时控制,如键一直按下,就会连续发音各音阶标称频率值: 本次课设要求设计一个电子琴,作为一个乐器,其最基本的功能就是能够发出一个音阶的所有声音,即:do,re,mi,fa,so,la,xi,dou,8个音符,不同的声音的本质就是不同频率的波,每个音符都对应着固定的频率;而声音的长短即是波的个数。所以得出的一条思路是:用汇编语言来产生一系列频率不同的方波信号,找到各个音符的频率,然后用汇
3、编语言产生同频信号,并将该信号输入到扬声器,如果驱动功率不够则可以加放大电路。 四、硬件电路设计 1、单元电路设计: 硬件结构应结合软件方案一并考虑,做到软件、硬件功能相匹配。在DJ-598K三合一单片机微机试验仪平台上,硬件设计参考方案如下: 2、电路工作原理: 2.1可编程8253计数器 (1) 在计算机的引用中,常常要对外设的某些信号进行计数,希望计算机既能控制技术的过程,还有能读取计数的结果,进而作为控制或管理的决策依据。如果被计数的信号有了准确的固定的周期,就形成了定时器。 (2)图为8253的内部
4、组成和引脚。如图所示,与外部的连接线主要分布在右侧的三个部分,即:三个计数器。其中CLK为计数通道的输入脉冲信号,对于8253来说的频率范围是0—2MHz。GATE为门控信号,用来启动或禁止计数工作,高电平有效,不同的工作方式,作用也不同。Out为输出信号,用来输出波形,不同的工作方式,不同的工作方式,输出的波形也不同;而与CPU的的内部接线主要分布在左侧的三个部分。其中,D0—D7为8位三态数据线,可直接连接到CPU的数据总线上,主要作用有:是实现与CPU的数据传输通道,接受控制字或计数初值,读取计数通道中的当前计数值。CS—A1部分为读/写控制逻辑,主要用于接受CPU的控制信息,译码后产生
5、整个器件内部的工作的控制信息——RD为读信号线,低电平有效;WR写信号线,低电平有效;CS为片选信号,低电平有效,只有CS有效的前提下,才会执行读或写操作;A1,A0为端口选择地址线,用于对右侧三个技术通道和控制寄存器进行寻址。 (3)8253的主要工作原理是:8253其本质为减一计数器,其工作过程为:首先需要设置工作方式,然后将工作方式处置置入计数初值锁存器;启动计数后,CPU向8253的计数初值锁存器赋初值,每来一个CLK信号,减一计数器减1,直到减到0或1时,就发出输出信号OUT输出。 2.2 74LS393 (1)74LS393为一个双4位二进制计数器,主要用于二进制
6、计数。 (2) 1CP VCC 1RD 2CP 1QA 2RD 1QB 2QA 1QC 2QB 1QD 2QC GND 2QD 五、软件开发 1、系统程序模块图及说明 开始 调键扫显示子程序 Y 是数字键1~7吗? 根据键值查表得音频先关数据 由音频数据置定时器初值 启动定时器开始发声 延时 关闭定时停止发声 六、联机调试 1、 硬件调试:PB0作为定时器门控信号,OUT1发出音频信号,驱动喇叭。 2、 软件调试及调
7、试数据:将在硬件调试设计满足预期要求以后,把软件加载到硬件中,并对该系统进行功能测试。 七、收获和体会 ../../REC0529_092310.wav 参考文献 [1] 《80x86/Pentiun微机原理与接口技术》余春暄,机械工业出版社,2008.9; [2] 《微机原理与接口技术》吉海彦主编,机械工业出版社,2007.7; 八、程序清单 CODE SEGMENT ;DZQ.ASM ASSUME CS:CODE,ds:code CONTROL equ 43h //CONTROL为43h COUNT0 equ 40h
8、 //COUNT0为40h COUNT1 equ 41h //同上 COUNT2 equ 42h //同上 IOCONPT EQU 0FF2BH IOBPT EQU 0FF29H IOAPT EQU 0FF28H PA EQU 0FF20H ;字位口 PB EQU 0FF21H ;字形口 PC EQU 0FF22H ;键入口 ORG 18F0H //下一条偏移语句的偏移地址 START: JMP START0 //跳到STARTO BUF DB ?,?,?,?,?,? /
9、/在DB中存? KZ DB ? ltime db ? lkey db ? ZP DW ? data1: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH,0F1H data3: dw 2273, 2024, 1805, 1704 dw 1517, 1353, 1205, 1136 START0: mov ax,cs //
10、cs貌似是什么断点 mov ds,ax CALL BUF1 //调用子程序,BUF1为其地址 MOV AL,88H //设置控制字,使用工作方法4 MOV DX,IOCONPT //DX为控制字口地址 OUT DX,AL //送控制字 mov dx,IOBPT //设置计数器0口地址 mov al,00 //数值锁存。。。 out dx,al mov zp,offset buf
11、 redikey: call dispkey //调用dispkey cmp KZ,09h //kz-09h,设置条件标志位 JNC redikey // 跳转到redikey cmp kz,01h //kz-01h,设置条件标志位 jc redikey //跳到redikey mov bx,zp // mov al,kz mov [bx],al cmp bx,offset buf+5 jz
12、 zp1 inc bx mov zp,bx jmp outtone zp1: mov zp,offset buf outtone: mov dx,IOBPT mov al,0ffh out dx,al mov al,kz mov ah,00h dec ax shl ax,1 mov bx,offset data3 add bx,ax mov ax,[b
13、x] call t8253 mov cx,20h con1: push cx call disp pop cx loop con1 mov dx,IOBPT mov al,00 out dx,al jmp redikey t8253: push ax mov al, 76h ; 计数器1, 16位二进制,方式3。 mov dx, CO
14、NTROL // out dx, al //送控制字 pop ax //ax出栈 mov dx, COUNT1 // out dx, al mov al, ah out dx, al ret ;------------------------- dispkey: call disp call key mov ah,al ;newkey mov bl,ltime ;ltime
15、mov bh,lkey ;lkey mov al,01h mov dx,PA ;0ff21h out dx,al cmp ah,bh mov bh,ah ;bh=new key mov ah,bl ;al=time jz disk4 mov bl,88h mov ah,88h disk4: dec ah cmp ah,82h jz disk6 cmp ah,0eh jz disk6 cmp ah,00h jz disk5 mov ah,20h dec bl j
16、mp disk7 disk5: mov ah,0fh disk6: mov bl,ah mov ah,bh disk7: mov ltime,bl mov lkey,bh mov KZ,bh mov al,ah ret key: mov al,0ffh mov dx,PB out dx,al mov bl,00h mov ah,0feh mov cx,08h key1: mov al,ah mov dx,PA out dx,al rol al,01h mov ah,al nop
17、 nop nop nop nop nop mov dx,PC in al,dx not al nop nop and al,0fh jnz key2 inc bl loop key1 jmp nkey key2: test al,01h je key3 mov al,00h jmp key6 key3: test al,02h je key4 mov al,08h jmp key6 key4: test al,04h je key5 mov al,10h
18、 jmp key6 key5: test al,08h je nkey mov al,18h key6: add al,bl cmp al,10h jnc fkey mov bl,al mov bh,0h mov si,offset data2 mov al,[bx+si] ret nkey: mov al,20h fkey: ret data2: db 07h,04h,08h,05h,09h,06h,0ah,0bh DB 01h,00h,02h,0fh,03h,0eh,0ch,0dh DISP: MOV AL,0F
19、FH ;00H MOV DX,PA OUT DX,AL MOV CL,0DFH ;20H ;显示子程序 ,5ms MOV BX,OFFSET BUF DIS1: MOV AL,[BX] MOV AH,00H PUSH BX MOV BX,OFFSET DATA1 ADD BX,AX MOV AL,[BX] POP BX MOV DX,PB OUT DX,AL MOV AL,CL MOV DX,PA OUT DX,AL PUSH CX DIS2: MOV CX,
20、0a0H LOOP $ POP CX CMP CL,0FEH JZ LX1 INC BX ROR CL,1 JMP DIS1 LX1: MOV AL,0FFH MOV DX,PB OUT DX,AL RET BUF1: MOV BUF,11H MOV BUF+1,10H MOV BUF+2,10H MOV BUF+3,10H MOV BUF+4,10H MOV BUF+5,10H RET CODE ENDS END START 第 11 页 共 11 页






