基于单片机的简易电子琴正确版-图文_第1页
基于单片机的简易电子琴正确版-图文_第2页
基于单片机的简易电子琴正确版-图文_第3页
基于单片机的简易电子琴正确版-图文_第4页
基于单片机的简易电子琴正确版-图文_第5页
已阅读5页,还剩17页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

//简易电子琴//包含51单片机寄存器定义的头文件unsignedcharkeyval;//定义变量储存按键值unsignedintf;//全局变量,储存定时器的定时常数//全局变量,储存音阶的频率//以下是C调低音的音频宏定义#definel_re286//将“l_re”宏定义为低音“2”的频率286Hz#definel_fa349//将“l_fa”宏定义为低音“4”的频率349Hz#definel_sao392//将“l_sao”宏定义为低音“5”的频率392Hz#definel_la440//将“l_a”宏定义为低音“6”的频率440Hz#definel_xi494//将“l_xi”宏定义为低音“7”的频率494Hz//以下是C调中音的音频宏定义xi987//将“fa”宏定义为中音“4”的频率698Hz//将“la”宏定义为中音“6”的频率880Hz//将“xi”宏定义为中音“7”的频率53//以下是C调高音的音频宏定义//将“h_la”宏定义为高音“6”的频率1760Hz//将“h_xi”宏定义为高音“7”的频率1975Hz/**************************************************************函数功能:软件延时子程序**************************************************************/{i,j;for(i=0;i<100;i++)for(j=0;j<60;j++);}/*************************************************************************************/voiddelay(){i,j;for(i=0;i<250;i++)for(j=0;j<250;j++);}/*******************************************函数功能:输出音频******************************************/{C=(46083/f)*10;方法//计算定时常数法delay();//延时200ms,播放音频TR0=0;播放按键音频后,将按键值更改,停止播放//keyval=0xff;}/*******************************************函数功能:主函数******************************************/{TR1=1;//定时器T1启动,开始键盘扫描无限循环while(1)//{switch(keyval){频率赋给f//转去计算定时常数break;case2:f=l_xi;频率赋给fbreak;//如果第2个键按下,将低音7的//转去计算定时常数case3:f=l_la;//如果第3个键按下,将低音6的频率赋给fOutput_Sound();//转去计算定时常数break;如果第4个键按下,将低case4:f=l_sao;//f5的频率赋给音Output_Sound();//转去计算定时常数break;case5:f=sao;f5的频率赋给中音//如果第5个键按下,将Output_Sound();//转去计算定时常数break;case6:f=fa;//如果第6个键按下,将f4的频率赋给中音break;Output_Sound();//转去计算定时常数如果第7case7:f=mi;//个将f中音3的频率赋给转去计算定时常数Output_Sound();//break;case8:f=re;//如果第8个键按下,将中Output_Sound();//转去计算定时常数break;case9:f=h_re;//如果第9f2的频率赋给音转去计算定时常数break;个键按下,将高//f1的频率赋给将高音转去计算定时常数Output_Sound();//break;如果第1111:f=xi;//个键按下,将f的频率赋给7中音转去计算定时常数break;//如果第12case12:f=la;//个键按下,将中f的频率赋给音6转去计算定时常数Output_Sound();//break;个键按下,将13如果第case13:f=h_la;//fOutput_Sound();//转去计算定时常数break;case14:f=h_sao;//如果第14个键按下,将高音5的频率赋给fOutput_Sound();//转去计算定时常数break;case15:f=h_fa;//如果第15个键按下,将高音4的频率赋给fOutput_Sound();//转去计算定时常数break;case16:f=h_mi;//如果第16个键按下,将高音3的频率赋给fOutput_Sound();//转去计算定时常数break;}}}/**************************************************************函数功能:定时器引脚输出音频方波P3.7T0的中断服务子程序,使**************************************************************/voidTime0_serve(void)interrupt1using1{赋初值方法初值方法//将P3.7引脚取反,输出音频方波}/**************************************************************函数功能:定时器T1的中断服务子程序,进行键盘扫描,判断键位**************************************************************/voidtime1_serve(void)interrupt3using2//定时器T1的中{置为高电平“1”if((P1&0xf0)!=0xf0){delay20ms();if((P1&0xf0)!=0xf0){//关闭定时器T0//延时一段时间、软件消抖//确实有键按下低电平“0”keyval=1;线//如果检测到接P1.4引脚的列线为//可判断是S1键被按下//如果检测到接P1.5引脚的列为低电平“0”keyval=2;//可判断是S2键被按下如果检测到接P1.6引脚的列线if(P16==0)//0”为低电平“可判断是S3键被按下keyval=3;//如果检测到接if(P17==0)//P1.7引脚的列线为低电平“0”可判断是S4keyval=4;//键被按下如果检测到接”低电平“0键被按下可判断是keyval=5;//S5引脚的列线如果检测到接if(P15==0)//P1.50为低电平“”键被按下keyval=6;//可判断是S6引脚的列线如果检测到接if(P16==0)//线为低电平“0”keyval=8;//如果检测到接P1.7引脚的列//可判断是S8键被按下if(P14==0)//如果检测到接P1.4引脚的列线为低电平“0”可判断是S9键被按下keyval=9;//如果检测到接P1.5if(P15==0)//引脚的列线为被按下如果检测到接if(P16==0)//P1.6引脚的列线为0”低电平“可判断是keyval=11;被按下如果检测到接P1.7if(P17==0)//引脚的列线为低电平“0”可判断是S12

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论