收藏 分销(赏)

计算机硬件技术基础综合性实验任务书电子琴B.doc

上传人:精*** 文档编号:2571693 上传时间:2024-06-01 格式:DOC 页数:26 大小:151.04KB
下载 相关 举报
计算机硬件技术基础综合性实验任务书电子琴B.doc_第1页
第1页 / 共26页
计算机硬件技术基础综合性实验任务书电子琴B.doc_第2页
第2页 / 共26页
计算机硬件技术基础综合性实验任务书电子琴B.doc_第3页
第3页 / 共26页
计算机硬件技术基础综合性实验任务书电子琴B.doc_第4页
第4页 / 共26页
计算机硬件技术基础综合性实验任务书电子琴B.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

1、个人收集整理 勿做商业用途河北工业大学计算机硬件技术基础(MCS51单片机原理及应用)综合性实验任务书学院 班级 设计人 _ 成绩 _ 一、题目:简易电子琴的设计二、目的与要求1 目的:(1)能够对电子电路、电子元器件、印制电路板等方面的知识有进一步的认识,独立对其进行测试与检查。(2)熟悉8051单片机的内部结构和功能,合理使用其内部寄存器,能够完成相关软件编程设计工作。(3)实现预期功能,能够对系统进行快速的调试,并能够对出现的功能故障进行分析,及时修改相关软硬件.(4)对软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。2 基本要求:(1)要按任务书的要求

2、认真分析问题,并解决问题;(2)要求用MCS51单片机知识完成程序的设计;(3)在实验室利用现有的设备,完成题目的设计与调试。3 创新要求在基本要求达到后,可以进行创新设计,如更加完善程序功能。4 书写设计报告的要求设计报告中包含以下几个方面:1、 设计题目2、 总体设计1) 所实现的功能描述.2) 设计方案的描述.3、 硬件系统设计,包括所需设备,接线方式,以及资源分配。4、 软件系统的设计,包括划分功能模块,写出各个功能模块实现的功能。画出程序流程图5、 列出程序清单,并加以必要的注释6、 写出调试程序的方法7、 指出所设计问题的不足和改进方案8、 自评分和收获体会三、设计方法和基本原理1

3、 问题描述:设计一个简易的电子琴,要求用DP51PROC的按键K1K7作为电子琴的按键,控制蜂鸣器能够发出1、2、3、4、5、6、7等七个音符。电路图如下:2 问题的解决方案:由于一首音乐是由许多不同音阶组成,每个音阶对应不同的频率,这样我们可用不同频率组合,即可构成我们想要的音乐了,当然对单片机产生不同的频率非常方便,我们可用单片机的定时/计数器0来产生这样的方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系设定正确即可。对于晶振频率为11。0592MHz的单片机,定时器假如选择工作方式1,那T值便为T216-5*105/相应的频率,那么根据不同的频率计算出应该赋给定时器的计数值。建立

4、这样一个数据表,然后采用查表程序即可。连线要求:用导线将A2的P3。3 (INT1)与B5区的BUZZ接口相连,用排线将D1区的 J53 与 A2区的J61相连,如上图所示。四、课程设计的考核方式及评分方法1考核方式课程设计结束时,在机房当场验收.(1) 学生演示,老师检查运行结果是否正确。(2) 回答教师提出的问题。(3) 学生提交课程设计报告(A4纸打印),并将电子文档和源程序发至知道教师信箱。2评分方法(1) 出勤率(2) 课程设计准备工作(3) 课程设计期间纪律(4) 课程设计运行结果(5) 课程设计报告 (6)答辩情况附件1:音节与频率第一个问题:八度音的频率关系。 每相邻的两个半音

5、,高音频率是低音频率的“2的1/12次方倍”. 例如国际标准音A的频率是440HZ,那么比它高半音的bB,频率就是: 4402(1/12)=466.13HZ. 所以,以此类推,一个八度的12个音,连乘下来,结果正好得2。通俗一点儿也就是说,高音1的频率是比他低一个八度的那个1的频率的两倍。 第二个问题:不同乐器的同一个音的振动频率是否相同. 大至相同,但有微小的差别。比如吉他的国际标准音A的频率是440HZ,而小提琴的这个A就用441HZ。音階與頻率的轉換標準A = 440 Hz高8度音的頻率為原來音頻率的2倍下圖為音階圖,每一格為一個半音。若f1距f2 n個半音,則運算公式:n個半音 = 1

6、/12 log2(f1/f2),若f1f2則nf2則n0。例:C比A低9個半音,計算C的頻率f, 9 = 1/12 log2(f/440) 得f =261。6C調音階do, re, mi, fa, so, la, ti, do, 為261。6, 293。7, 329。6, 349。2, 392。0, 440。0, 493.9, 523.2。其中第一個do為261。6Hz,第二個do為523。2Hz是第一個do的2倍。一拍 = 四分音符,若建議速度=120(BPM),則表示一秒 = 兩拍 = 兩個四分音符,若建議速度=60(BPM),則表示一秒 = 一拍 = 一個四分音符。电子琴1实验任务(1)

7、.由4X4组成16个按钮矩阵,设计成16个音。(2).可随意弹奏想要表达的音乐.2电路原理图 图4。22。13系统板硬件连线 (1).把“单片机系统”区域中的P1。0端口用导线连接到“音频放大模块”区域中的SPK IN端口上;(2)。把“单片机系统“区域中的P3.0P3.7端口用8芯排线连接到“4X4行列式键盘”区域中的C1C4R1R4端口上;4相关程序内容 (1)。4X4行列式键盘识别;(2).音乐产生的方法;一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的

8、定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可.现在以单片机12MHZ晶振为例,例出高中低音符与单片机计数T0相关的计数值如下表所示音符频率(HZ)简谱码(T值) 音符频率(HZ)简谱码(T值)低1DO26263628# 4 FA#74064860#1DO27763731中 5 SO78464898低2RE29463835 5 SO#831649342 RE#31163928中 6 LA88064968低 3 M33064021 693264994低 4 FA34964103中 7 SI98865030 4 FA#37064185高 1 DO104

9、665058低 5 SO39264260 1 DO#110965085# 5 SO#41564331高 2 RE117565110低 6 LA44064400 2 RE124565134 646664463高 3 M131865157低 7 SI49464524高 4 FA139765178中 1 DO52364580# 4 FA148065198 1 DO55464633高 5 SO156865217中 2 RE58764684 5 SO166165235# 2 RE62264732高 6 LA176065252中 3 M65964777 6186565268中 4 FA69864820高

10、7 SI196765283下面我们要为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据低音019之间,中音在2039之间,高音在4059之间TABLE: DW 0,63628,63835,64021,64103,64260,64400,64524,0,0 DW 0,63731,63928,0,64185,64331,64463,0,0,0 DW 0,64580,64684,64777,64820,64898,64968,65030,0,0 DW 0,64633,64732,0,64860,64934,64994,0,0,0 DW 0,65058,65110,65157,6517

11、8,65217,65252,65283,0,0 DW 0,65085,65134,0,65198,65235,65268,0,0,0 DW 02、音乐的音拍,一个节拍为单位(C调)曲调值DELAY 曲调值DELAY调4/4125ms 调4/462ms调3/4187ms 调3/494ms调2/4250ms 调2/4125ms对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。下面就用AT89S51单片机产生一首“生日快乐”歌曲来说明单片机如何产生的。在这个程序中用到了两个定时/计数器来完成的。其中T0用来产生音符频率,T1用来产生音拍.5程序框图图4。22.26汇编源程序 KEYBUF

12、 EQU 30H STH0 EQU 31H STL0 EQU 32H TEMP EQU 33H ORG 00H LJMP START ORG 0BH LJMP INT_T0 START: MOV TMOD,#01H SETB ET0 SETB EA WAIT: MOV P3,#0FFH CLR P3.4 MOV A,P3 ANL A,#0FH XRL A,0FH JZ NOKEY1 LCALL DELY10MS MOV A,P3 ANL A,0FH XRL A,#0FH JZ NOKEY1 MOV A,P3 ANL A,#0FH CJNE A,0EH,NK1 MOV KEYBUF,#0 LJM

13、P DK1 NK1: CJNE A,#0DH,NK2 MOV KEYBUF,#1 LJMP DK1 NK2: CJNE A,#0BH,NK3 MOV KEYBUF,#2 LJMP DK1 1NK3: CJNE A,#07H,NK4 MOV KEYBUF,3 LJMP DK1 NK4: NOP DK1: MOV A,KEYBUF MOV DPTR,TABLE MOVC A,A+DPTR MOV P0,A MOV A,KEYBUF MOV B,#2 MUL AB MOV TEMP,A MOV DPTR,TABLE1 MOVC A,A+DPTR MOV STH0,A MOV TH0,A INC TE

14、MP MOV A,TEMP MOVC A,A+DPTR MOV STL0,A MOV TL0,A SETB TR0 DK1A: MOV A,P3 ANL A,#0FH XRL A,0FH JNZ DK1A CLR TR0 NOKEY1: MOV P3,#0FFH CLR P3。5 MOV A,P3 ANL A,0FH XRL A,0FH JZ NOKEY2 LCALL DELY10MS MOV A,P3 ANL A,#0FH XRL A,0FH JZ NOKEY2 MOV A,P3 ANL A,0FH CJNE A,#0EH,NK5 MOV KEYBUF,4 LJMP DK2 NK5: CJN

15、E A,0DH,NK6 MOV KEYBUF,#5 LJMP DK2 NK6: CJNE A,0BH,NK7 MOV KEYBUF,#6 LJMP DK2 NK7: CJNE A,#07H,NK8 MOV KEYBUF,#7 LJMP DK2 NK8: NOP DK2: MOV A,KEYBUF MOV DPTR,TABLE MOVC A,A+DPTR MOV P0,A MOV A,KEYBUF MOV B,2 MUL AB MOV TEMP,A MOV DPTR,TABLE1 MOVC A,A+DPTR MOV STH0,A MOV TH0,A INC TEMP MOV A,TEMP MOV

16、C A,A+DPTR MOV STL0,A MOV TL0,A SETB TR0 DK2A: MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK2A CLR TR0 NOKEY2: MOV P3,0FFH CLR P3.6 MOV A,P3 ANL A,#0FH XRL A,0FH JZ NOKEY3 LCALL DELY10MS MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY3 MOV A,P3 ANL A,#0FH CJNE A,#0EH,NK9 MOV KEYBUF,8 LJMP DK3 NK9: CJNE A,0DH,NK10 M

17、OV KEYBUF,9 LJMP DK3 NK10: CJNE A,#0BH,NK11 MOV KEYBUF,10 LJMP DK3 NK11: CJNE A,#07H,NK12 MOV KEYBUF,11 LJMP DK3 NK12: NOP DK3: MOV A,KEYBUF MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,A MOV A,KEYBUF MOV B,#2 MUL AB MOV TEMP,A MOV DPTR,TABLE1 MOVC A,A+DPTR MOV STH0,A MOV TH0,A INC TEMP MOV A,TEMP MOVC A,A+

18、DPTR MOV STL0,A MOV TL0,A SETB TR0 DK3A: MOV A,P3 ANL A,#0FH XRL A,0FH JNZ DK3A CLR TR0 NOKEY3: MOV P3,0FFH CLR P3.7 MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY4 LCALL DELY10MS MOV A,P3 ANL A,#0FH XRL A,0FH JZ NOKEY4 MOV A,P3 ANL A,0FH CJNE A,0EH,NK13 MOV KEYBUF,#12 LJMP DK4 NK13: CJNE A,#0DH,NK14 MOV K

19、EYBUF,13 LJMP DK4 NK14: CJNE A,#0BH,NK15 MOV KEYBUF,14 LJMP DK4 NK15: CJNE A,#07H,NK16 MOV KEYBUF,15 LJMP DK4 NK16: NOP DK4: MOV A,KEYBUF MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,A MOV A,KEYBUF MOV B,2 MUL AB MOV TEMP,A MOV DPTR,TABLE1 MOVC A,A+DPTR MOV STH0,A MOV TH0,A INC TEMP MOV A,TEMP MOVC A,A+DPTR

20、 MOV STL0,A MOV TL0,A SETB TR0 DK4A: MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK4A CLR TR0 NOKEY4: LJMP WAIT DELY10MS: MOV R6,10 D1: MOV R7,248 DJNZ R7, DJNZ R6,D1 RET INT_T0: MOV TH0,STH0 MOV TL0,STL0 CPL P1。0 RETI TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H TABLE1: DW 64

21、021,64103,64260,64400 DW 64524,64580,64684,64777 DW 64820,64898,64968,65030 DW 65058,65110,65157,65178 END 7C语言源程序 #include unsigned char code table=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71; unsigned char temp; unsigned char key; unsigned char i,j; unsigned

22、char STH0; unsigned char STL0; unsigned int code tab=64021,64103,64260,64400, 64524,64580,64684,64777, 64820,64898,64968,65030, 65058,65110,65157,65178; void main(void) TMOD=0x01; ET0=1; EA=1; while(1) P3=0xff; P3_4=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i0;i-) for(j=200;j0;j); temp=

23、P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp 0x0f; switch(temp) case 0x0e: key=0; break; case 0x0d: key=1; break; case 0x0b: key=2; break; case 0x07: key=3; break; temp=P3; P1_0=P1_0; P0=tablekey; STH0=tabkey/256; STL0=tabkey%6; TR0=1; temp=temp 0x0f; while(temp!=0x0f) temp=P3; temp=temp

24、 0x0f; TR0=0; P3=0xff; P3_5=0; temp=P3; temp=temp 0x0f; if (temp!=0x0f) for(i=50;i0;i-) for(j=200;j0;j); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=4; break; case 0x0d: key=5; break; case 0x0b: key=6; break; case 0x07: key=7; break; temp=P3; P1_

25、0=P1_0; P0=tablekey; STH0=tabkey/256; STL0=tabkey%6; TR0=1; temp=temp 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; TR0=0; P3=0xff; P3_6=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i0;i) for(j=200;j0;j-); temp=P3; temp=temp 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp

26、) case 0x0e: key=8; break; case 0x0d: key=9; break; case 0x0b: key=10; break; case 0x07: key=11; break; temp=P3; P1_0=P1_0; P0=tablekey; STH0=tabkey/256; STL0=tabkey%6; TR0=1; temp=temp 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; TR0=0; P3=0xff; P3_7=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i0;i-) for(j=200;j0;j); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=12; break; case 0x0d: key=13; break; case 0x0b: key=14; break; case 0x07: key=15; break; temp=P3; P1_0=P1_0;

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 通信科技 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服