单片机设计简易电子琴报告.doc_第1页
单片机设计简易电子琴报告.doc_第2页
单片机设计简易电子琴报告.doc_第3页
单片机设计简易电子琴报告.doc_第4页
单片机设计简易电子琴报告.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

简易电子琴设计报告 学 院:水利电力 专业班级:11级电气(1)班 设计人员:李立 孙成伟 马丹 学 号:1100302008 1100302016 1100302021 课程设计报告1、 方案设计1.1、设计内容 简易电子琴 设计并制作一个带数字显示的电子琴1.2、设计要求 1、基本要求 ( 1 )要有至少16个琴键,发出1-7音符及高8度的音符,按C调进行设计。 ( 2 )显示:当前的频率值和音符 ( 3 )记录弹奏的时间,掉电可存储。 ( 4 )声音无明显失真。 2、发挥部分 ( 1 )音调可以进行修改 ( 2 )设计喇叭对应的功放电路,使声音洪亮。 ( 3 )提供测试曲目。 ( 4 )其他实际中有用的功能 2、 电子琴原理乐曲由不同的音符组成,各音符都有对应的频率,频率不同的方波加在扬声器上就会产生一个持续的音符。利用不同的音符、音高、音长组合,就可产生想要的音乐。对于51单片机来说,可以利用其定时器产生不同频率的方波。我们的实验板子上的晶振频率为11.0592MHZ。下面将以该频率为例列出中、低音符与单片机定时器初值。 低音 音符 频率(HZ) T初值(11.0592MHZ) do 262 63777 ri 294 63969 mi 330 64140 fa 349 64216 sou 392 64360 la 440 64489 xi 494 64603 中音 do 523 64655 ri 587 64751 mi 659 64837 fa 698 64876 sou 784 64948 la 880 65012 xi 998 65070计算原理为:若要产生音频脉冲,只要算出某一音频的周期(1/11.0592MHZ),再将此周期除以2,即为半周期的时间,利用定时器计时半周期时间,每当计时终止后就将P1.0取反,然后重新计时再取反。便可在P1.0引脚上得到此频率的脉冲。利用AT89C51的内部定时器使其工作计数器模式下,改变计数值TH0及TL0以产生不同频率的方波来产生不同音阶。具体计算方法为: 计数脉冲值与频率的关系式是: N=fi/2/fr 式中,N是计数值;fi是机器频率(振荡周期/12);fr是想要产生的频率。 其计数值T的求法如下: T=65536-N3、 核心系统组成 3.1、发光二极管模块二极管是半导体设备中的一种最常见的器件,大多数半导体最是由搀杂半导体材料制成(原子和其它物质)发光二极管导体材料通常都是铝砷化稼,在纯铝砷化稼中,所有的原子都完美的与它们的邻居结合,没有留下自由电子连接电流。在搀杂物质中,额外的原子改变电平衡,不是增加自由电子就是创造电子可以通过的空穴。这两样额外的条件都使得材料更具传导性。带额外电子的半导体叫做N型半导体,由于它带有额外负电粒子,所以在N型半导体材料中,自由电子是从负电区域向正电区域流动。带额外“电子空穴”的半导体叫做P型半导体,由于带有正电粒子。电子可以从另一个电子空穴跳向另一个电子空穴,从负电区域向正电区域流动。因此,电子空穴本身就显示出是从正电区域流向负电区域。二极管是由N型半导体物质与P型半导体物质结合,每端都带电子。这样排列使电流只能从一个方向流动。当没有电压通过二极管时,电子就沿着过渡层之间的汇合处从N型半导体流向P型半导体,从而形成一个损耗区。在损耗区中,半导体物质会回复到它原来的绝缘状态-所有的这些“电子空穴”都会被填满,所有就没有自由电子或电子真空区和电流不能流动。 低电平点亮3.2、按键系统模块 本设计采用独立式按键方式来实现键盘。独立式按键是指直接用I/O口线构成单个按键电路,每个按键占用一条I/O口线,每个按键占用一条I/O口线,每个按键的工作状态不会产生相互影响。如下图所示,当途中的某一个按键闭合时,相应的I/O口线变为低电平。当程序查询到为低电平时的I/O口线时,就可以确定处于闭合状态的键,这也是软开关的含义。每个按键控制不同的频率。 3.3、液晶模块(QC1602A) 液晶由QC1602A和一个滑动变阻器(用来调节液晶的对比度)组成。 1602表示:该液晶能显示两行,一行为十六个字。 3.3.1、信号接口说明 编号 符号 引脚说明 编号 符号引脚说明 1 VSS 电源地 9 D2Date I/O 2 VDD 电源正极 10 D3Date I/O 3 VL液晶显示偏压信号 11 D4Date I/O 4 RS数据/命令选择端(H/L) 12 D5Date I/O 5 R/W读/写选择端(H/L) 13 D6Date I/O 6 E 使能信号 14 D7Date I/O 7 D0Date I/O 15 BLA背光电源正极 8 D1Date I/O 16 BLA背光电源负极 其中3,液晶显示偏压信号即为对比度的调节 4,数据即为要显示的数据,命令是在液晶内部进行设置,使之在什么位置显示 什么东西,且在高电平时为数据,低电平时为命令 5,高电平为读旋端,低电平时为写选择端 3.3.2、基本操作时序: 基本操作 输入 输出 读状态RS=L,RW=H,E=HD0-D7=状态字 写指令RD=L,RA=L,D0-D7=指令码,E=高脉冲无 读数据RS=H,RW=H,E=HDO-D7=数据 写数据RS=H,RW=L,D0-D7=数据,E=高脉冲无 其中读状态字是,STA0-STA6为当前数据地址指针的数据 STA7为读写操作使能 且1为禁止 0为允许 因为液晶速度相对较慢,所以需要读状态确定是否允许,一般用延时函数 实现 一般需要有效数据建立起来的时间 3.3.3、初始化设置 指令码 功能 00111000设置16*2显示,5*7点阵,8位数据接口 00001DCBD=1 开显示; D=0 关显示C=1 显示光标;C=0 不显示光标B=1 光标闪烁;B=0 光标不显示 000001NSN=1 当读或写一个字符后地址指针加一, 且光标加一N=0 当读或写一个字符后地址指针减一, 且光标减一S=1 当写一个字符,整屏显示左移(N=1) 或右移(N=0),以得到光标不移动而屏 幕移动的效果S=0 当写一个字符,整屛显示不移动 01H显示清屏:1 数据指针清零 2 所有显示清零 02H显示回车:数据指针清零 所有指令码最后用十六进制实现,在液晶上显示时用ASCII码3.4、单片机模块 AT89C51的引脚图及实际封装图3.4.1、主要特性:与MCS-51 兼容4K字节可编程闪烁存储器寿命:1000写/擦循环数据保留时间:10年全静态工作:0Hz-24Hz三级程序存储器锁定128*8位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路3.4.2、管脚说明:VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口在AT89C51中也有其特殊的第二功能:口管脚备选功能P3.0 /RXD串行输入口P3.1 /TXD串行输出口P3.2 /INT0外部中断0P3.3 /INT1外部中断1P3.4 T0记时器0外部输入P3.5 T1记时器1外部输入P3.6 /WR外部数据存储器写选通P3.7 /RD外部数据存储器读选通P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN: 外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。3.4.3、最小系统设计:(1)、时钟电路时钟电路用于单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时钟电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格的按时序进行工作。而时序所研究的则是指令执行中各信号之间的相互直接关系。 接18和19引脚 在AT89C51芯片内部有一个高增益反向放大器,其输入端为芯片引脚XTAL1,其输出端引脚XTAL2,在芯片的外部通过这两个引脚跨接晶体振荡器和微调电容,形成反馈电路,就构成一个稳定的自激振荡器。如上图所示。(2)、复位电路 当振荡器运行时,在RST引脚上出现两个机器周期(一般为10ms)的高电平(由低到高跳变),将使单片机有效复位。 复位电路时单片机的初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。除了进入刑天的正常初始化外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键以重新启动。RST引脚是复位信号的输入端,复位信号是高电平有效。整个复位电路包括芯片内外两部分。外部电路产生的复位信号(RST)施密特触发器,再由片内复位电路在每个机器周期的SP52时刻对施密特触发器进行采样。然后才能得到内部复位操作所需要的信号。复位电路的基本功能是系统上电时提供复位信号直至系统电源稳定后撤销复位信号,为可靠起见电源稳定后还要经一定的延时才能撤销复位信号以防止电源开关或电源插头分-合过程中引起的抖动而影响复位。下图的复位方式为: 上电自动复位+手动复位3.5、功放模块 功放的作用就是把来自音源或前级放大器的弱信号放大,推动音箱放声。功放,可以说是各类音响器材中最大的一个家族了,其作用主要是将音源器材输入的较微弱信号进行放大后,产生足够大的电流去推动扬声器进行声音的重放。 仿真图 实物图四、程序流程图 开始 T0初始化 是否有键按下 按键识别 根据按键功能将音符装入TO 开放中断 显示键号 等待按键释放 中断入口 通过查表获得T0的定时常数 输出待定频率的方波 驱动扬声器 返回五、 完整电路原理图 仿真图六、 实物测试结果图 实验测试结果仿真图 实物图七、实验总结及心得一周忙碌的课程设计在今天终于要画上圆满的句号了。在这一周的课程设计中,从开始的搜集资料,到后来的设计及程序调试,再到最后的书写报告使我们的这一周忙碌而又充实。通过这次的课程设计,我学到了不少课堂上老师没有讲过的知识,同时也锻炼了自己动手的能力,促进了团结合作的能力,将以前学过的零散的知识串到了一起。我们还开玩笑说,要是现在让我考期末考试那套卷子,我一定能考个超级好的成绩。但是玩笑终究是玩笑,我们也知道成绩也只是成绩,什么都比自己获得知识的来的高兴。如果只是注重成绩,我想我们会什么也学不到的,就算学到了什么,这个过程也不快乐。因为这学期我们学习了文献检索这门课程,所以在为这次课程设计中得到了很大的帮助,加上因为刚过去的期末考试,使我在复习的过程中对单片机有了很大的认识,对单片机的各个引脚也是熟之又熟。在后面的程序调试时,有两个按键由于频率过高无法得到声音,我们也试着将整体的频率放低,但是最后的结果就是全部都不理想,所以只好放弃最后两个频率的按键。里面所有图都是我亲自仿真出来的,当能够出声那一刻真的很美妙功放电路是我们上半年模数电是课程设计所做的电路板,在这次派上了很大的用途。总体来说,对于这次的课程设计还是比较满意的,对于单片机这个微小而又强大的计算机,它对我的吸引力真是越来越强了。 附件简易电子琴源程序:#include#define uchar unsigned char#define uint unsigned int /64021,64103,64260,sbit lcden=P12;sbit lcdrs=P11;sbit P1_0=P10;sbit scl=P02;sbit sda=P01;uchar temp,time,times,timef;uchar num;uchar i,j,tt;uchar disdata6;uint p,t;unsigned char STH0;unsigned char STL0;uchar code table1=P:000HZ;uchar code table2=AN JIAN:0T:00:00;unsigned int code tab=63777,63969,64140,64216,64360,64489,64603,64655,64751,64837,64876, 64948,65012,63777,65969;void PinlvAndkey();void ds1820disp();uint read_temp();void t1();void music();void stop_music(uchar flag);void delay_18B20(unsigned int i)/延时1微秒 while(i-);void delay1() unsigned char i, j; for(i=110;i0;i-) for(j=110;j0;j-);void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); void delayms()/用于IIC的延时;void write_com(uchar com)lcdrs=0;P3=com;delay(5);lcden=1;delay(5);lcden=0;delay(5);void write_date(uchar date)lcdrs=1; P3=date;delay(5);lcden=1;delay(5);lcden=0;delay(5); void Pinlv_ad(uchar add,uchar table3) write_com(0x80+add); for(i=0;i3;i+) write_date(tablei);delay(2); void key_ad(uchar add,uchar dat) write_com(0x80+0x40+add);if(num10)write_date(0x30+dat); void key_af(uchar add,uchar dat) write_com(0x80+0x40+add); write_date(0x40+1+dat); void Timer(uchar add,uchar dat) uchar shi,ge; shi=dat/10; ge=dat%10; write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge); uchar keyscan()P2=0xfe;temp=P2;temp=temp&0xf0;while(temp!=0xf0)delay1();temp=P2;temp=temp&0xf0;while(temp!=0xf0)temp=P2;switch(temp)case 0xee:num=1;break;case 0xde:num=2;break;case 0xbe:num=3;break;case 0x7e:num=4;break; temp=P2; P1_0=P1_0; STH0=tabnum/256; STL0=tabnum%256; TR0=1; temp=temp & 0x0f; while(temp!=0xf0)temp=P2;temp=temp&0xf0; TR0=0;P2=0xfd;temp=P2;temp=temp&0xf0;while(temp!=0xf0)delay1();temp=P2;temp=temp&0xf0;while(temp!=0xf0)temp=P2;switch(temp)case 0xed:num=5;break;case 0xdd:num=6;break;case 0xbd:num=7;break;case 0x7d:num=8;break; temp=P2; P1_0=P1_0; STH0=tabnum/256; STL0=tabnum%256; TR0=1; temp=temp & 0x0f;while(temp!=0xf0)temp=P2;temp=temp&0xf0; TR0=0;P2=0xfb;temp=P2;temp=temp&0xf0;while(temp!=0xf0)delay1();temp=P2;temp=temp&0xf0;while(temp!=0xf0)temp=P2;switch(temp)case 0xeb:num=9;break;case 0xdb:num=10;break;case 0xbb:num=11;break;case 0x7b:num=12;break; temp=P2; P1_0=P1_0; STH0=tabnum/256; STL0=tabnum%256; TR0=1; temp=temp & 0x0f;while(temp!=0xf0)temp=P2;temp=temp&0xf0; TR0=0;P2=0xf7;temp=P2;temp=temp&0xf0;while(temp!=0xf0)delay1();temp=P2;temp=temp&0xf0;while(temp!=0xf0)temp=P2;switch(temp)case 0xe7:num=13;break;case 0xd7:num=14;break;case 0xb7:num=15;break;case 0x77:num=16;break; temp=P2; P1_0=P1_0; STH0=tabnum/256; STL0=tabnum%256; TR0=1; temp=temp & 0x0f;while(temp!=0xf0)temp=P2;temp=temp&0xf0; TR0=0; return num; void init() TMOD=0x01; EA=1; ET0=1; scl=1; sda=1;lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80); void main() init(); for(i=0;i7;i+) write_date(

温馨提示

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

评论

0/150

提交评论