课程设计报告班级:自动化三班姓名:房金彪学号:2220081468指导老师:李广强课设一电子琴一、实验目的1、利用实验仪上提供的按键K1~K7作为电子琴按键,控制蜂鸣器发出对应的音符。2、能在数码管上显示音调及对应的音符。3、了解计算机发声原理,熟悉定时器和键盘扫描电路的工作原理及编程方法。二、实验设备及器件1、IBMPC机一台2、频率计 一台3、DP-单片机仿真器、编程器、实验仪三合一综合开发平台 一台三、实验内容基础部分:1、编写一段程序,(输出7种音节标称频率的方波),使D4区的蜂鸣器发出不同的声调、程序检测按键的状态,当某一按键按下时,蜂鸣器发出对应的音调。2、通过外部中断0能实现高、中、低音的切换。3、按照歌曲的音调,使用D1区的按键K1~K7,弹奏一首简单的音乐。提高部分:1、设置一个拨位开关,实现电子琴与歌曲的切换,能放出一只简单的曲子。2、使用ZLG的数码管将音调及对应的音符显示出来。四、实验原理我们知道音调的不同是因为声音的频率不同,高音时,声音频率比较高,中音、低音时频率依次降低。根据这个原理我们可以通过单片机的I/O口产生频率变化的方波,通过驱动电路加到蜂鸣器上,从而蜂鸣器可以发出不同音调的音符。对于高、中、低音的切换我们可以通过检测一个按键的状态或通过外部中断来改变,这里,我用了外部中断来实现高中低音的切换,因为使用外部中断不会增加主程序的负担,可提高程序的运行效率。电子琴与播放音乐的切换我用了拨位开关来实现,通过检测拨位开关的状态来判断该执行哪一部分的程序,进而实现相应的功能。五、实验步骤1、(INT0)和D1区的J53的key8接口相连,、、、D7区的SDA、SCL相连,D7区的/,然后将D1区的J53的key1~~。2、编写按键的动态键盘扫描程序,根据不同音阶的频率编写蜂鸣器的音调控制程序,然后完成电子琴的主程序设计。3、硬件电路图4、流程图开始是否有键按下判断键值音调键值对应音符键值歌曲切换变化音调蜂鸣器发出相应的音符判断切换键是否按下否六、程序#include""#include ""//I2C软件包#include ""#defineucharunsignedchar#defineuintunsignedintuinttt=56;uchark=1,t=0,key,n,i;uintm;uchartable[34]={2,2,2,5,2,2,2,5,2,2,5,2,2,5,2,2,2,2,2,5,2,2,2,2,2,5,5,5,9,5,5,9};uchartable1[34]={1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,4,3,1,5,6,5,4,3,1,1,5,1,1,5,1};uinttable2[7]={95,85,76,71,63,56,50};sbitbuzzer=P2^0;sbitRST=P2^5;sbit KEY_INT=P2^4;sbitP10=P1^0;voiddelayMS(unsignedchari);voiddelay(uintms){ucharj,n;if(P10==1){for(j=0;j<200;j++)for(n=ms;n>0;n--);}}voidmain(){RST=0; //复位7290delayMS(1);RST=1; //正常工作delayMS(10);TMOD=0x01;TMOD=0x01;TH0=-50000/256;TL0=-50000%256;ET0=1;EX0=1;IT0=1;EA=1;while(1){while(P0!=0xff){key=P0;switch(key){case0xfe:tt=95*k;ZLG7290_SendCmd(0x60,0x01);break;case0xfd:tt=85*k;ZLG7290_SendCmd(0x60,0x02);break;case0xfb:tt=76*k;ZLG7290_SendCmd(0x60,0x03);break;case0xf7:tt=71*k;ZLG7290_SendCmd(0x60,0x04);break;case0xef:tt=63*k;ZLG7290_SendCmd(0x60,0x05);break;case0xdf:tt=56*k;ZLG7290_SendCmd(0x60,0x06);break;case0xbf:tt=50*k;ZLG7290_SendCmd(0x60,0x07);break;}switch(k){case1:
电子琴-语音万年历-语音电压表 来自淘豆网m.daumloan.com转载请标明出处.