欢迎来到天天文库
浏览记录
ID:48053243
大小:747.51 KB
页数:39页
时间:2020-01-21
《单片机课程设计电子音调发生器.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、单片机课程设计实验报告电子音调发生器姓名:日期:2009年6月29日星期一目录(一)实验目的2(二)设计任务及要求2(三)工作原理及设计思路2(四)实现功能设计338(五)软件设计3(六)电路设计35(七)调试36(八)实验体会37(一)实验目的1.了解计算机发声原理。2.熟悉定时器和键盘扫描电路的工作原理及编程方法。38(二)设计任务及要求利用实验平台上的开关k0-k7和蜂鸣器设计电子音调发生器,要求:1.利用实验平台上开关k0-k7进行音调选择,即拨动不同的开关产生不同的音调,依次拨动K0~K7,蜂鸣器发出1234567i八个音调。2.编
2、写2支歌曲,并可进行选择播放。(三)工作原理及设计思路音节由不同频率的方波产生,音节与频率的关系如表1所示。要产生音频方波,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用计时器计时此半周期时间,每当计时到后就将输出方波的I/0反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚得到此频率的方波。在ZKS-03实验仪上,产生方波的I/O脚选用P1.7,通过跳线选择器JP1将单片机的P1.7与蜂鸣器的驱动电路相连。这样P1.7输出不同频率的方波,蜂鸣器便会发出不同的声音。另外,音乐的节拍是由延时实现的,如果
3、1拍为0.4秒,1/4拍是0.1秒。只要设定延时时间,就可求得节拍的时间。延时作为基本延时时间,节拍值只能是它的整数倍,每个音节相应的定时器初值X可按下法计算:(1/2)*(1/f)=(12/fose)*(216-x)即x=216-(fose/24f)其中f:音调频率,当晶振fose=11.0592MHz时,音节“1”相应的定时器初值为x,则可得x=63777D=F921H其它的可同样求得。表1音调频率(Hz)X(HEX)1262F9212294F9E13330FA8C4349FAD85392FB686440FBE97494FC5Bi523F
4、C8F(四)实现功能设计实现两个主要功能:电子琴与音乐播放;一个辅助功能:38在液晶上显示相关信息。1、电子琴:4*4的矩阵16个按键,按键0实现两个功能的切换,其余按键分别发出音调 低音5、6、7,中音1、2、3、4、5、6、7,高音1、2、3、4、5。发音的同时在液晶显示屏上显示出对应的音调。2、音乐播放:按键0实现两个功能的切换,按键1实现播放类型选择(单曲循环播放、所有循环播放),其余按键分别对应一首歌。目前已经有9首歌。播放的同时,在液晶上显示出歌名。(五)软件设计根据要实现的功能,流程图如下:开始系统初始化判断按键判断按键电子琴液
5、晶显示录音调整时钟功能选择音乐#include#include#definenop_nop_()#defineucharunsignedchar#defineuintunsignedint38#definePAI_BASE15#defineMUSIC_NUM9#defineSCAN_CYCLE500#defineBEEPP3_3/***************液晶显示相关变量***********************************/sbitLCD_RS=P2^7;sbitLCD_RW=
6、P2^6;sbitLCD_EN=P2^5;staticucharth0_f;//在中断中装载的T0的值高8位staticuchartl0_f;//在中断中装载的T0的值低8位statictimebuffer,Record_counter,Record_flag=0;staticucharkey2,key=16,scounter=0,Record_time;staticuchars_musicCounter=0x00,s_tableCounter;bitRplay_flag=0;bitK0_flag=0;bitMusic_flag0;bitMu
7、sic_flag=0;bitFreq_flag=0;bitdisptime_flag=0;bitmusicAutoFlag=0;//sbitBEEP=P3_3;//喇叭输出脚//延时子程序1voiddelay(intms){inti;while(ms--){for(i=0;i<250;i++){_nop_();_nop_();_nop_();_nop_();}}}38/*******************************************************************//**//*检查LCD忙状态*//*lc
8、d_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。*//**//**************************************
此文档下载收益归作者所有