




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
重庆三峡学院 单片机课程设计 题 目 简易电子琴的设计 院 系 电子信息工程学院 专 业 电子信息工程 年 级 2011 级 2 班 学生姓名 宾 莉 学生学号 201007014202 简易电子琴的设计 一、目的和意义 电子琴是是一种新型的键盘乐。它在现代音乐扮演着重要的角色,单片机具有强大的 控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。 本文的主要内容是用 AT8C51 单片机为核心控制元件,设计一个电子琴。以单片机作为主 控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有 16 个按键和扬声 器。 本文主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬 件组成。利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想表达的音乐。 并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。本系 统是简易电子琴的设计,按下键盘矩阵中的按键会使数码管显示当前按键,扬声器播放器 对应的音符。通过设计本系统可了解单片机的基本功能。对单片机的了解有一个小的飞跃。 本设计主要是针对电子琴的主要功能电路进行设计。以达到电子琴所具有的基本功能, 利用定时器/计数器的定时功能。设置好定时的时间,然后定时器定时产生中断信号,每一 次中断将发出的脉冲频率反向,借此来产生不同的音,随后这些音通过功放电路将信号放 大,在通过扬声器放出来。 2、系统的总体设计方案 1、系统总框图 该系统通过电子琴的琴键,随意按入一个键,作为一个电平信号传送给处理器进行识 别,然后在将电信号转化成声音信号,经过放大电路将声音放大,同时经过数码管的显示。 这样就可以通过扬听到声音和看到音符,其主要模块有四个部组成,如图所示: 2、系统工作原理 本系统扫描键盘矩阵、显示按键、扬声器发出对应音符。 工作原理如下:通过 AT89C51 为核心控制元件,在控制模块方面有十六个矩阵键盘按键, 接通电源以后,电子琴处于弹奏状态。LED 显示灯亮,数码管显示为 0,按下任意矩阵键, 喇叭发出相对应的音调,数码显示管显示相对应的 0 到 9、 A 到 F 所对应的数字。同时也 增加一个复位键,如果想清除显示在数码显示管上的数字,按下复位键又可以重新归于 0。 三、系统硬件设计 1、系统硬件总体设计 电路原理图: 2、数码管显示部分 利用 AT89C51 的 P0 端的七个端口分别接到数码管的七段上,构成了显示电路 它的原理 g 到 a 七个发光二极管因加正电压而发亮。原理图如下: 3、扬声器电路 扬声器电路采用了 LM386 芯片,它是具有自身功耗低、更新内部增益可调整、电源电 压范围大、外接元件少和总谐波失真小等优点的功率放大器。主要应用于低电压消费类产 品。电路图如下: 4、矩阵键盘电路设计 电路图如下: 将键盘接口设计成矩阵样式主要有几个目的和功能: (1)去抖动:每个键盘在按下或松开的时候, 。每个键盘都会产生极短时间的抖动。为了 保证稳定的状态,方便识别所以才要用此方法来解决 (2)防串键:为了解决同时按下多个键盘或者前一个键没松开又按下另一个键盘,为了解 决此类问题,常用双键锁定或者 N 键轮回者二种方法 (3)被按键识别:如何识别被按键是接口解决的主要问题,所以一般采用行扫描法或者线 反转法来进行按键的识别 (4)键码产生:为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建立一 个键盘编码表,通过查表获得被按键的键码。 四、音乐的产生 一首音乐是由许多不同的音阶组成的,而每个音阶都对应着不同的频率。所以要产生 某一音频脉冲信号,首先要知道这个音频脉冲信号的周期,然后将它除以 2,然后计算出 这个半周期的时间,然后每计时半个周期后,就将输出的脉冲反响, ,用单片机的工作在 MODE1 并且改变定时/计数器 T0 来产生这样脉冲频率信号,这样就能十分简单的产生音阶 了,比如要产生 532HZ 的频率,其周期为 1/532=1912us,那么它的半周期就为 956us,因 此只要令计数器产生 956/1=956 所以计算器只要每计数 956 次反向一次就可以得到一个中 音 DO 的音阶。计数脉冲值与频率的关系公式如下: N=Fi/2/Fr N: 计数值 Fi: 机器频率(晶体振荡器为 12MHz 时,其频率为 1MHz) Fr:要产生的频率 4.其计数值的求法如下 T=65536-N=65536-Fi/2/Fr 例如:设 K65536,fi1MHz 则低音 DO(261Hz)为多少频率 T65536N65536fi2fr6553610000002fr65536500000/fr 低音 DO 的 T(65536500000)/26263627 根据此公式的计算,采用一个 12MHZ 的晶振片,将低音 DO 到高音 SI 计算出来 如图所示: 五、系统软件设计 程序流程图如下: 六、总结 本次的单片机课程设计,是一次比较实用的实践活动,我学会了将书本上的理论知识 赋予实际实践,在这个过程中我通过在网上查阅资料,询问老师和同学,比较成功的完成 了设计,这次成功肯定了我自己能力,让我对今后的工作和学习更充满了信心。 通过这次设计,我学到了不少课本上没有的知识,也锻炼了自己的动手能力,将以前 学过的零散的知识串到一起。经过我长时间的设计及调试,本系统基本能实现按下键盘矩 阵中的按键会使数码管显示当前按键,扬声器播放对应的音符。但由于器材的限制和人为 的误差。此次涉及也存在不足,一是可弹奏的音符数较少,只能在一定范围内满足用户需 要;二是扬声器的音量不可调。 音符 频率 (HZ) 简谱码(T 值) 音符 频率(HZ) 简谱码(T 值) 休止符 0 0 中音 FA 698 64820 低音 DO 262 63628 中音 SO 784 64898 低音 RE 294 63835 中音 LA 880 64968 低音 MI 330 64021 中音 SI 988 65030 低音 FA 349 64103 高音 DO 1046 65058 低音 SO 392 64260 高音 RE 1175 65110 低音 LA 440 64400 高音 MI 1318 65157 低音 SI 494 64524 高音 FA 1397 65178 中音 DO 523 64580 高音 SO 1568 65217 中音 RE 587 64684 高音 LA 1760 65252 中音 MI 659 64777 高音 SI 1967 65283 经过此次的课程设计,学习到了很多,也发现了自己的不足之处,无论以后是工作还 是学习,都会努力改善这些不足。 七、附件 仿真图: PCB 图: 单片机源程序 #include /包含 51 单片机寄存器定义的头文件 sbit P14=P14; /将 P14 位定义为 P1.4 引脚 sbit P15=P15; /将 P15 位定义为 P1.5 引脚 sbit P16=P16; /将 P16 位定义为 P1.6 引脚 sbit P17=P17; /将 P17 位定义为 P1.7 引脚 unsigned char keyval; /定义变量储存按键值 sbit sound=P37; /将 sound 位定义为 P3.7 unsigned int C; /全局变量,储存定时器的定时常数 unsigned int f; /全局变量,储存音阶的频率 unsigned char code table= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0xa3,0x8c,0xc8; /以下是 C 调低音的音频宏定义 #define l_dao 262 /将“l_dao”宏定义为低音“1”的频率 262Hz #define l_re 286 /将“l_re”宏定义为低音“2”的频率 286Hz #define l_mi 311 /将“l_mi”宏定义为低音“3”的频率 311Hz #define l_fa 349 /将“l_fa”宏定义为低音“4”的频率 349Hz #define l_sao 392 /将“l_sao”宏定义为低音“5”的频率 392Hz #define l_la 440 /将“l_a”宏定义为低音“6”的频率 440Hz #define l_xi 494 /将“l_xi”宏定义为低音“7”的频率 494Hz /以下是 C 调中音的音频宏定义 #define dao 523 /将“dao ”宏定义为中音“1”的频率 523Hz #define re 587 /将“re ”宏定义为中音“2”的频率 587Hz #define mi 659 /将“mi”宏定义为中音“3”的频率 659Hz #define fa 698 /将“fa ”宏定义为中音“4”的频率 698Hz #define sao 784 /将“sao”宏定义为中音“5”的频率 784Hz #define la 880 /将“la ”宏定义为中音“6”的频率 880Hz #define xi 987 /将“xi”宏定义为中音“7”的频率 53 /以下是 C 调高音的音频宏定义 #define h_dao 1046 /将“h_dao”宏定义为高音“1”的频率 1046Hz #define h_re 1174 /将“h_re”宏定义为高音“2”的频率 1174Hz #define h_mi 1318 /将“h_mi”宏定义为高音“3”的频率 1318Hz #define h_fa 1396 /将“h_fa”宏定义为高音“4”的频率 1396Hz #define h_sao 1567 /将“ h_sao”宏定义为高音“5”的频率 1567Hz #define h_la 1760 /将“h_la”宏定义为高音“6”的频率 1760Hz #define h_xi 1975 /将“h_xi ”宏定义为高音“7”的频率 1975Hz /* 函数功能:软件延时子程序 */ void delay20ms(void) unsigned char i,j; for(i=0;i100;i+) for(j=0;j60;j+) ; /* 函数功能:节拍的延时的基本单位,延时 200ms */ void delay() unsigned char i,j; for(i=0;i250;i+) for(j=0;j250;j+) ; /* 函数功能:输出音频 入口参数:F */ void Output_Sound(void) C=(46083/f)*10; /计算定时常数 TH0=(8192-C)/32; /可证明这是 13 位计数器 TH0 高 8 位的赋初值方法 TL0=(8192-C)%32; /可证明这是 13 位计数器 TL0 低 5 位的赋初值方法 TR0=1; /开定时 T0 P2=tablekeyval-1; delay(); /延时 200ms,播放音频 TR0=0; /关闭定时器 keyval=0xff; /播放按键音频后,将按键值更改,停止播放 /* 函数功能:主函数 */ void main(void) EA=1; /开总中断 ET0=1; /定时器 T0 中断允许 ET1=1; /定时器 T1 中断允许 TR1=1; /定时器 T1 启动,开始键盘扫描 TMOD=0x10; /分别使用定时器 T1 的模式 1,T0 的模式 0 TH1=(65536-500)/256; /定时器 T1 的高 8 位赋初值 TL1=(65536-500)%256; /定时器 T1 的高 8 位赋初值 while(1) /无限循环 switch(keyval) case 1:f=l_dao; /如果第 1 个键按下,将低音 1 的频率赋给 f Output_Sound(); /转去计算定时常数 break; case 2:f=l_re; /如果第 2 个键按下,将低音 2 的频率赋给 f Output_Sound(); /转去计算定时常数 break; case 3:f=l_mi; /如果第 3 个键按下,将低音 3 的频率赋给 f Output_Sound(); /转去计算定时常数 break; case 4:f=l_fa; /如果第 4 个键按下,将低音 4 的频率赋给 f Output_Sound(); /转去计算定时常数 break; case 5:f=l_sao; /如果第 5 个键按下,将低音 5 的频率赋给 f Output_Sound(); /转去计算定时常数 break; case 6:f=l_la; /如果第 6 个键按下,将低音 6 的频率赋给 f Output_Sound(); /转去计算定时常数 break; case 7:f=l_xi; /如果第 7 个键按下,将低音 7 的频率赋给 Output_Sound(); /转去计算定时常数 break; case 8:f=dao; /如果第 8 个键按下,将中音 1 的频率赋给 f Output_Sound(); /转去计算定时常数 break; case 9:f=re; /如果第 9 个键按下,将中音 2 的频率赋给 f Output_Sound(); /转去计算定时常数 break; case 10:f=mi; /如果第 10 个键按下,将中音 3 的频率赋给 f Output_Sound(); /转去计算定时常数 break; case 11:f=fa; /如果第 11 个键按下,将中音 4 的频率赋给 f Output_Sound(); /转去计算定时常数 break; case 12:f=sao; /如果第 12 个键按下,将中音 5 的频率赋给 f Output_Sound(); /转去计算定时常数 break; case 13:f=la; /如果第 13 个键按下,将中音 6 的频率赋给 f Output_Sound(); /转去计算定时常数 break; case 14:f=xi; /如果第 14 个键按下,将中音 7 的频率赋给 f Output_Sound(); /转去计算定时常数 break; case 15:f=h_dao; /如果第 15 个键按下,将高音 1 的频率赋给 f Output_Sound(); /转去计算定时常数 break; case 16:f=h_re; /如果第 16 个键按下,将高音 2 的频率赋给 f Output_Sound(); /转去计算定时常数 break; /* 函数功能:定时器 T0 的中断服务子程序,使 P3.7 引脚输出音频方波 */ void Time0_serve(void ) interrupt 1 using 1 TH0=(8192-C)/32; /可证明这是 13 位计数器 TH0 高 8 位的赋初值方法 TL0=(8192-C)%32; /可证明这是 13 位计数器 TL0 低 5 位的赋初值方法 sound=sound; /将 P3.7 引脚取反,输出音频方波 /* 函数功能:定时器 T1 的中断服务子程序,进行键盘扫描,判断键位 */ void time1_serve(void) interrupt 3 using 2 /定时器 T1 的中断编号为 3,使用第 2 组寄存 器 TR1=0; /关闭定时器 T0 P1=0xf0; /所有行线置为低电平“0” ,所有列线置为高电平“1” if(P1 /延时一段时间、软件消抖 if(P1 /第一行置为低电平“0” (P1.0 输出低电平 “0”) if(P14=0) /如果检测到接 P1.4 引脚的列线为低电平 “0” keyval=1; /可判断是 S1 键被按下 if(P15=0) /如果检测到接 P1.5 引脚的列线为低电平 “0” keyval=2; /可判断是 S2 键被按下 if(P16=0) /如果检测到接 P1.6 引脚的列线为低电平 “0” keyval=3; /可判断是 S3 键被按下 if(P17=0) /如果检测到接 P1.7 引脚的列线为低电平 “0” keyval=4; /可判断是 S4 键被按下 P1=0xfb; /第二行置为低电平“0” (P1.1 输出低电平 “0”) if(P14=0) /如果检测到接 P1.4 引脚的列线为低电平 “0” keyval=5; /可判断是 S5 键被按下 if(P15=0) /如果检测到接 P1.5 引脚的列线为低电平 “0” keyval=6; /可判断是 S6 键被按下 if(P16=0) /如果检测到接 P1.6
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025安徽合肥市肥东县县管国有企业招聘7人备考题库及答案解析
- 2025年四川泸州市合江县医疗卫生辅助岗位招募25人考试模拟试题及答案解析
- 2025福建厦门市集美区高浦小学非在编、顶岗教师招聘2人考试备考题库及答案解析
- 2025海南乐东黎族自治县招聘城镇公益性(其他非盈利性劳动服务)岗位6人备考试题及答案解析
- 航运政策效应-洞察及研究
- 2025-2030中国农机经销商库存管理优化与资金周转效率分析报告
- 2025-2030中国农机后市场服务模式与商业价值研究报告
- 2025-2030中国农机专利技术布局与市场竞争优势分析报告
- 2025-2030中国农业现代化发展分析及产业链整合研究报告
- 2025-2030中国低碳建筑材料市场需求分析及投资机会研究报告
- 三员培训考试试题及答案
- 年满七十岁以上老年人驾考三力能力测试题库
- 工期目标、工期保证体系及保证措施
- 集成电路测试指南
- 铝合金搅拌摩擦焊技术研究进展
- 《亚低温冬眠治疗》课件
- 2025年淫羊藿提取物项目可行性研究报告
- 2025年山西中阳钢铁有限公司招聘笔试参考题库含答案解析
- 2025年四川攀枝花钒钛高新国有资本投资运营有限公司招聘笔试参考题库附带答案详解
- 呼吸内科培训与考核制度
- DB11T 2330-2024 行业协会商会诚信建设规范
评论
0/150
提交评论