资源描述:
《基于51单片机的简易电子琴设计.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、..课程设计课程设计名称:单片机课程设计专业年级:电子信息科学与技术学生姓名:学号:指导教师:课程设计时间:2013.9.30-2013.10.7..摘要51单片机是对所有兼容Intel8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flashrom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最
2、广泛的一种。作为一个电子技术类专业的学生熟练掌握51单片机的编程与开发是至关重要的,我们学习的是电子系统理论知识,而课程设计正是对我们学习的理论知识的实践与巩固。设计目的(1)能够对电子电路,电子元器件,等方面的知识有进一步的认识,能对其进行测试与检查。(2)熟悉8051单片机内部结构与功能,合理使用其内部寄存器,能够完成相关软件编程设计工作。(3)为实现预期功能,能够对系统进行快速的调试,并能够对出现的故障进行分析,及时修改相关软硬件。(4)对软件编程,排错调试,焊接技术,相关仪器设备使用技能等方面得到全面的提升。设计要求..设计一个51单片机系
3、统,实现简易电子琴操作的电路。要求:1.设计51单片机最小系统;2.设置至少10个按键,能发出doremifasollaSIDO;能播放示范曲;3.能够调节低音、高音和中音。系统总框图电源键盘按键选择音符放大驱动电路ST89C52MCU复位电路时钟电路1602显示电路电路连接图..程序流程图..判断键值按键按下T0初始化,开总中断,T0中断允许,工作方式设置开始根据按键值(9),将相应的初值装入计数器,并启动计数0,开始播放音乐根据按键值(1~8),将相应的初值装入计数器,并启动计数1同时将键值送1602显示按键松开关闭计数T0中断入口根据按键值,
4、给计数器相应的初值中断返回P3.4取反,中断返回..对音调的控制,通过按键选择某个音符,当按键按下后,由程序判断其音阶,然后给计数器赋上能够产生相应频率的初值。本设计采用计数方式1,通过对相应寄存器设置,便能达到该功能程序代码main.c文件#include#include"a1602.h"#include"key.h"#include"music.h"#include"ds1302.h"#include"jianpan.h"sbitSPK=P2^1;//定义蜂鸣器控制端口sbitmusic=P3^2;uintcodelow[]=
5、{0,63628,63835,64021,64103,64260,64400,64524};//对应不同的音调1、2、3、4、5、6、7uintcodemid[]={0,64580,64684,64777,64820,64898,64968,65030};uintcodehig[]={0,65058,65110,65157,65178,65217,65252,65283};uintn=0;uchark,m;voiddelay_ms(unsignedintxms)//ms级延时{unsignedintx,y;for(x=xms;x>0;x--)for
6、(y=130;y>0;y--);}voidmain(){init1();TMOD=0x11;//定时器0工作于16位定时方式EA=1;//开总中断ET1=1;EX0=1;IT0=1;SPK=1;P1=0xff;while(1){//ds1302_int();write_com(0x80+0x40+4);switch(n){case0:write_com(0x80+0x40);write_data('L');..write_data('O');write_data('W');write_data(':');break;case1:write_com(
7、0x80+0x40);write_data('M');write_data('I');write_data('D');write_data(':');break;case2:write_com(0x80+0x40);write_data('H');write_data('I');write_data('G');write_data(':');break;}if(keyscan()==9){m++;if(m==2)m=0;}if(m==1){write_com(0x80+0x40);write_data('M');write_data('U');wr
8、ite_data('S');write_data(':');write_data('1');Play_Song(0);}e