欢迎来到天天文库
浏览记录
ID:32933175
大小:747.00 KB
页数:39页
时间:2019-02-17
《单片机课程设计电子音调发生器》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、.....单片机课程设计实验报告电子音调发生器姓名:日期:2009年6月29日星期一目录(一)实验目的2(二)设计任务及要求2(三)工作原理及设计思路2word格式.整理版.....(四)实现功能设计3(五)软件设计3(六)电路设计35(七)调试36(八)实验体会37word格式.整理版.....(一)实验目的1.了解计算机发声原理。2.熟悉定时器和键盘扫描电路的工作原理及编程方法。(二)设计任务及要求利用实验平台上的开关k0-k7和蜂鸣器设计电子音调发生器,要求:1.利用实验平台上开关k0-k7进行音调选择,即拨动不同的开关产生不同的音调
2、,依次拨动K0~K7,蜂鸣器发出1234567i八个音调。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)1262F9212294F9E13330FA8C434
4、9FAD85392FB686440FBE97494FC5Bi523FC8Fword格式.整理版.....(四)实现功能设计实现两个主要功能:电子琴与音乐播放;一个辅助功能:在液晶上显示相关信息。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、上显示出歌名。(五)软件设计根据要实现的功能,流程图如下:开始系统初始化判断按键判断按键电子琴液晶显示录音调整时钟功能选择音乐word格式.整理版.....#include#include#definenop_nop_()#defineucharunsignedchar#defineuintunsignedint#definePAI_BASE15#defineMUSIC_NUM9#defineSCAN_CYCLE500#defineBEEPP3_3/***************液晶显示相关变量*
6、**********************************/sbitLCD_RS=P2^7;sbitLCD_RW=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
7、_tableCounter;bitRplay_flag=0;bitK0_flag=0;bitMusic_flag0;bitMusic_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_();word格式.整理版....._nop_();}}}/***********
8、********************************************************//**//*检查LCD忙状态*//*lcd_busy为1时,忙,
此文档下载收益归作者所有