简易电子琴单片机原理及应用实训报告Word文档下载推荐.docx
《简易电子琴单片机原理及应用实训报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《简易电子琴单片机原理及应用实训报告Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
1.2.1设计思路
1、根据设计任务和性能指标要求选择总体方案,画出设计框图;
2、参阅相关资料,根据设计框图和发放的元件进行单元电路的设计;
3、绘制原理图,搭建电路板;
4、编写LED驱动程序,能够对应点亮相应的LED;
5、编写数码管程序,对数码管进行测试,使之能循环显示0到9;
6、编写按键程序,能够将按键和LED及数码管对应起来;
7、驱动蜂鸣器程序,完成简易电子琴功能;
8、编写播放音乐程序;
9、写实训报告(包括设计与调试的全过程,附上有关资料、电路图和心得体会)。
1.2.2总体设计框图
按
键
输
入
单片机
LED+数码管
蜂鸣器
及驱动
2各个模块程序的设计
程序设计流程图
详细程序:
主程序头文件与声明:
#include<
reg52.h>
#include<
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitspeak1=P1^6;
sbits=P1^7;
sbitled0=P1^0;
sbitled1=P1^1;
sbitk1=P1^4;
ucharn=0;
//节拍常数变量
对应音调1、2、3、4、5、6、7:
uintcodefre[]={64579,64685,64778,64820,64898,64968,65030};
数码管显示:
ucharcodeshumaguan[]={
0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0x11,0xc1,
0x63,0x85,0x61,0x71};
uchark;
ucharj;
uchartemp;
ucharflag;
uintscale;
voiddelay_ms(uintx);
voiddelay(unsignedcharm);
voidmain()
{
while
(1)
{
while(k1==1)
{
TMOD=0x21;
//定时器0工作于16位定时方式,定时器1工作在8位自动重装
EA=1;
ET0=1;
ET1=1;
TH1=0x06;
TL1=0x06;
TR1=1;
speak1=1;
s=1;
temp=0;
flag=0;
led0=1;
led1=1;
scale=0;
按键扫描
while(k1==1)
temp=P0;
if((temp|0x80)!
=0xff)
delay_ms(10);
temp=P0;
if((temp|0x80)!
{
switch(temp)
{case0xfe:
k=1;
break;
case0xfd:
k=2;
case0xfb:
k=3;
case0xf7:
k=4;
case0xef:
k=5;
case0xdf:
k=6;
case0xbf:
k=7;
}
if(flag==0)
{
TH0=fre[k-1]/256;
TL0=fre[k-1]%256;
TR0=1;
flag=1;
s=0;
P2=shumaguan[k];
led0=0;
scale++;
if(scale==10)
scale=0;
TR2=1;
}
}
}
if((temp|0x80)==0xff)
if(temp==0xff)
TR0=0;
speak1=1;
s=1;
led0=1;
}
}
if(k1==0)
ucharp,m;
uchari=0;
j=0;
TH0=0xd8;
TL0=0xef;
while(k1==0)
led0=0;
p=music_tab[i];
if(p==0x00)
i=0;
delay_ms(100);
else
if(p==0xff)
i=i+1;
delay_ms(10);
m=music_tab[i++];
n=music_tab[i++];
while(n!
=0&
&
k1==0)//节拍
speak1=~speak1;
if(scale==10)
scale=0;
delay(m);
//音调即音调的频率
TR0=0;
s=0;
P2=shumaguan[j++];
if(j==16)
j=0;
}
}
中断子程序:
voidtime0()interrupt1
if(k1==1)
speak1=~speak1;
flag=0;
TH0=0Xd8;
TL0=0Xef;
n--;
}
voidtime1()interrupt3
uchart;
t++;
if(t==10)
t=0;
led1=0;
if(scale==t)
voiddelay(unsignedcharm)
uinti;
i=3*m;
while(--i);
voiddelay_ms(uintx)//ms级延时
while(x--)
uchari;
for(i=0;
i<
131;
i++)
_nop_();
3调试过程
通过调试,发现数码管显示不正常,播放音乐效果失灵,调试后依然没能完整解决,验收过程前再次询问老师以期结果。
4功能测试
4.1测试仪器与设备
万用表,下载线,计算机。
4.2性能指标测试
顺利实现1-7弹奏,数码管运行效果趋于不良,音乐播放功能受损。
4.3误差分析
误差方面主要是音准问题,1-7弹奏中可以明显发现音准错误,根据频率换算完成的中断时间并不能完全保证音准,还需要更多调试。
5实训心得体会
本次实训中学到了许多知识,增强了自身实际动手能力,非常感谢老师与同学们给予的帮助与支持。
对于本次实训完成的电子琴,即便完成了实训,不足之处依然不胜枚举,让人略感沮丧,好在不足之处可以弥补,透过实训所学到的关于硬件与软件的知识然我感到受益匪浅。
首先就硬件而言,透过本次实训基本了解了电子产品的开发流程与外围电路的设计与搭建,对52系单片机的工作原理以及各接口功能有了更加深刻的理解。
在软件方面,本次实训中我更加清楚的理解了52系单片机寄存器与内部编程规则以及如何控制外围电路。
所有这一切都来自于本次动手去完成实训,事实证明,实践出真知,动手远比理论获益更丰。
最后,再一次向本次实训中向我伸出援手的老师与同学表示感谢,谢谢。
6参考文献
谢自美.《电子线路设计·
实验·
测试》(第二版)。
武汉:
华中科技大学出版社,2000
陈涛.《单片机应用及C51程序设计》(第二版)。
北京:
机械工业出版社,2010
喻宗泉.《单片机原理与应用技术》。
西安:
西安电子科技大学出版社,2006
附录
附录1:
原理图
实际原理图有所改动与参考原理图有出入,以上为老师给出参考原理图。
附录2:
程序清单
TL0=fre[k-1]%256;
scale++;
k1==0)
if(scale==10)
voidtime0()interrupt1
flag=0;
voiddelay_ms(uintx)