报告内容学期项目.docx
《报告内容学期项目.docx》由会员分享,可在线阅读,更多相关《报告内容学期项目.docx(18页珍藏版)》请在冰点文库上搜索。
![报告内容学期项目.docx](https://file1.bingdoc.com/fileroot1/2023-5/8/6e3f1024-ad2a-47ba-9d6b-00a72558539c/6e3f1024-ad2a-47ba-9d6b-00a72558539c1.gif)
报告内容学期项目
报告内容:
学期项目
项目名称:
简易电子琴
制作班级:
电子09303
指导老师:
陈刘
项目成员:
柳一江、郭晶晶、朱敏、王欢、张华恩、姜小通
报告日期:
2011/6/12
项目目标:
1.用单片机设计一简易电子琴,按下不同按键,能够发出不同的声音。
2.利用4X4矩阵键盘控制从低到高16个音节的输出。
3.数码管显示单元对应每一个键位的显示。
体积小,易于操作。
一、简易电子琴的组成及原理:
☐复位电路:
硬件电路里面单片机的9脚RST直接接高电位,电源接通后复位。
☐时钟电路:
(外接的12Mhz晶振)单片机的18,19脚接外部晶振电路。
☐供电电路:
7805稳压到5v然后供给单片机。
☐数码管显示单元:
一位共阳极数码管。
☐键盘模块:
4×4矩阵键盘。
☐发声模块:
通过9013三极管放大驱动蜂鸣器发声。
本电子琴系统主要包括AT89S52单片机,4x4键盘,发声模块,数码管显示单元。
系统设计
主要的元器件
●AT89S52:
52系列的单片机,电路的核心
●7805L:
这是一个三端稳压器,把9V电源稳5V
●数码管:
一位共阳极数码管。
●矩阵式键盘:
4×4矩阵,非编码键盘
●蜂鸣器
基本原理:
(声音产生原理)
1.音乐产生原理及硬件设计
由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
本次设计中单片机晶振为12MHZ,那么定时器的计数周期为1MHZ,假如选择工作方式1,那T值便为T=216--5﹡105/相应的频率,那么根据不同的频率计算出应该赋给定时器的计数值,列出不同音符与单片机计数T0相关的计数值如下表所示:
单片机计数T0相关的计数值如下表所示:
按键
音阶
参数
S1
中音do
108
S2
中音re
102
S3
中音mi
91
S4
中音fa
86
S5
中音so
77
S6
中音la
68
S7
中音xi
61
S8
高音do
57
元器件各部分的作用:
一、矩阵式键盘
矩阵式键盘原理
所谓和矩阵式的原理是每条水平线和垂直现在交叉处不直接接通,而是通过一个按键加以连接。
行线通过上拉电阻接到5V上。
当无键按下时,行线处于高电平状态;当有键按下时,行,列线将导通,此时,行线电平将由与此行线相连的列线电平决定。
这是识别按键是否按下的关键。
而然,矩阵键盘中的行线,列线和多个相连,各按键按下与否均影响该键所在行线和列线的电平,各按键间将相互影响,因此,必须将行线,列线信号配合起来做适当处理,才能确定闭合的位置。
矩阵式键盘的扫描过程
1.判有无键按下。
将行线接至单片机的输入口,列线接至输出口,首先是所有的列线全为低电平,然后读出行线状态,若行线均为高电平,则没有键按下;若读出行线状态不全为高电平,则可以断定有键按下。
2.判断按下的是那一个键。
先让Y0这一列为低电平,其余列线为高电平,读出行线状态,如行线状态不全为“1”,则说明所按键在该列,否则不在该列,然后让Y1列为低电平。
其它列为高电平,判断Y1列有无键按下。
3.键处理。
键处理是根据所按键散转进入相应的功能程序。
二、三端稳压器
7805L
三、数码管显示
对于单个数码管来说,从它的正面看进去,左下角那个脚为1脚,以逆时针方向依次为1~10脚,左上角那个脚便是10脚了。
由第二张图可以看出数码管的3,8管脚接的高电位。
A-7,B-6,C-4,D-3,E-1,F-9,G-10,DP-5.
还有一种方法,是根据数字万用表测的,先把万用表打到二极管档位。
然后红色表笔的一端接3或8管脚,黑色表笔的一端依次测其他的8个脚,可以看出数码管的好坏和对应的管脚。
也可以测共阴,只需对调一下红黑表笔。
电路图
流程图
音乐发声程序框图
软件编写
项目:
可演奏电子琴
//------------------------------------------------------
//在键盘矩阵上模拟演奏电子琴,数码管显示按键号
//------------------------------------------------------
#include
#defineucharunsighedchar
#defineuintunsighedint
//共阳数码管编号
ucharcodeDSY_Table[]=
{0xc0,0xf9,0xa4,0xb0,0x,0x99,0x92,0x82,0xf8,0x80,//0、1、2、3、4、5、6、7、8
0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xBF};//9、A、B、C、D、E、F、-
//各音符对应的延时
uintcodeTone_Delay_Table[]=
{64021,64103,64400,64524,64580,64684,64777,
64820,64898,64968,65030,65058,65110,65110,65157,65178};
sbitBEEP=P3^0;//蜂鸣器
ucharKeyNo;//按键序号
//------------------------------------------------------
//延时
//------------------------------------------------------
voidDelayMS(ucharx)
{
uchari;
while(x--)for(i=0;i<120;i++);
}
//------------------------------------------------------
//键盘矩阵扫描子程序
//------------------------------------------------------
voidkey_Scan()
{
ucharTmp,k;
//高四位置0,放入四行
P1=0x0F;
DelayMS
(2);
//按键后00001111将变成0000xxxx,x中1个为0,3个仍为1
//下面的异或操作会把3个1变成0,唯一的0变成1
Tmp=P1^0x0F;
//判断按键发生于0~3列的那一项
Switch(Tmp)
{
case1:
k=0;break;
case2:
k=1;break;
case4:
k=2;break;
case8:
k=3;break;
default:
return;//无键按下
}
//低四位置0,放入四列
P1=0xF0;
DelayMS
(2);
//按键后11110000将变成xxxx0000,x中1个为0,3个仍为1
//下面的表达式会将高四位移至低四位,并将其中唯一的0变为1,其余的为0
Tmp=(P1>>4)^)0x0F;
//对0~3行分别附加起始值0,4,8,12
switch(Tmp)
{
case1:
k+=0;break;
case2:
k+=4;break;
case4:
k+=8;break;
case8:
k+=12;break;
default:
return;
}
KeyNo=k;
}
//------------------------------------------------------
//定时器0中断程序,不同频率的声音由该中断产生
//------------------------------------------------------
voidPlay_Tone()interrupt1
{
TH0=Tone_Delay_Table[KeyNo]/256;
TH0=Tone_Delay_Table[KeyNo]%256;
BEEP=~BEEP;
}
//------------------------------------------------------
//主程序
//------------------------------------------------------
voidmain()
{
P0=0xBF;//初始显示“-”
TMOD=0x01;
IE=0x82;
while
(1)
{
P1=0xF0;//发送扫描码
if(p1!
=0xF0)//如果有键按下
{
Keys_Scan();//扫描键盘矩阵
P0=DSY_Table[KeyNo];//显示按键
TR0=1;//启动定时器,根据KeyNo发音
}
else
{
TR0=0;//停止播放
}
DelayMS
(2);
}
}
实物图
元器件清单:
序号
品名
型号规格
配件图号
1
碳膜电阻
RT-0.25—2K
数量×4
2
碳膜电阻
RT-0.25—10K
数量×2
3
排阻
A103J-10K
数量×2
4
发光二极管
LED-3.6V/0.25A(共阳、红色)
数量×1
5
晶振
12Mhz
数量×2
6
瓷介电容
103
数量×4
7
电解电容
CD-16V-10μ
数量×2
8
三极管
9012PNP
数量×1
9
独立式按键
数量×16
10
矩阵式按键
数量×1
11
接插导线
若干
12
数码管
共阳
数量×1
13
插座
IC-40pl(AC封袭)
数量×2
14
插针
若干
15
接插导线
若干
16
电源插头+电源线
17
5V直流稳压
7805LM(三端稳压的)
18
电池
9V
19
印制电路板
PCD板
数量×1
20
AT89C51
数量×1
二、项目实施计划:
1提出计划:
和老师讨论计划的可实施性,制定计划。
2收集资料:
6人分成两组,一组通过网上查阅获得有关资,一组去老师那查找相关资料。
通过收集后整理资料。
(时间:
6/3)
3制作原理图,确定所需元器件:
通过阅读整理的资料后,结合所学知识得出原理图。
依据原理图后到实验室找负责人得到并确认所需的相关元件。
(时间:
1/11)
4装配元器件:
装配元件,制作实物。
(时间:
6/12)
5调试:
制作实物之后,在老师的帮助下进行调试。
(时间:
6/17)
6得出结果:
得出具体结果后,整理成电子文档。
(时间:
6/17-6/20)
三、装配与调试:
调试及故障排除
将单片机烧录好后
板子焊好后,接上5V稳压源,发现板子没有工作。
我们接上示波器观察ALE脚的输出,为1/6Fosc频率
这说明单片机的正常工作,至少有能保证我们的晶振电路也是正常的。
老师说软件到硬件的实现是一个很复杂的过程,没有人一下子就仿真成功就可以立马调出板子,第一次焊好就能正常的可能性为零,要我们从中发现故障的可能性。
老师说:
既然你们的故障,不是出自单片机上,那么你们好好看看输出输到蜂鸣器(负载的波形)
我们先把单片机的P3.0接到示波器观察其波形。
每次按钮的按下,我们能看到一个不同频率从低到高的电压的电压变化的波形,说明送往蜂鸣器的两端都没有反映
排除了焊接上的虚焊和引脚之间的短路发现电路还是驱动不起来,看起来应该是输出的功率不够
改进后的方案
从软件到硬件的实现是一个复杂的过程。
之前的那个方案:
蜂鸣器声音很小,看起来输出的功率不够,我们发现虽然能仿真出来,但是硬件却不是那么简单。
这个是我们的改进方案:
增加了三极管驱动电路调试过程
四、电路性能参数:
方案的比较:
波形调试:
(单片机P3.0输出波形)
输出波形
按键号
△X(HZ)
△Y(V)
1
782
2.8
2
692
2.8
3
618
2.8
4
589
2.8
5
1133
2.8
6
1016
2.8
7
911
2.8
8
859
2.8
9
1640
2.8
10
1474
2.8
A
1326
2.8
B
1185
2.8
C
2228
2.8
D
2137
2.8
F
1937
2.8
G
1721
2.8
第一个键按下所观察的波形
第二个键按下所观察的波形
第三个键按下所观察的波形
第四个键按下所观察的波形
ALE脚的波形(Ale=1/6fosc即单片机的30脚)
检测单片机电路晶振的是否工作正常
总结:
通过这次的学期项目,让我们受益匪浅。
不但让我们对书本知识学有所用,而且还增强了我们的实践能力。
在此次实践中我们还学会并能较熟练的掌握使用电烙铁的基本技能,掌握了部分实验仪器的使用方法。
从这次的项目制作中,体现了我们互帮互助的团队精神,也给了我们师生交流的机会。
我们组会在以后的学习和生活中不断地提高自我、完善自我。
小组分工
1项目方案的构想【设计指标】柳一江
2项目方案的实施【电路图工作原理】郭晶晶
3项目软件的设计【流程图介绍,程序说明】柳一江
4项目的硬件设计参数【矩阵键盘,7805L稳压】【数码管,排阻】朱敏,王欢
5产品的实物制作【焊接电路,单片机程序烧录,故障排除】柳一江
6产品的后期调试【技术方案数据,技术指标的比较】张华恩
7市场调查张华恩,姜小通
8项目报告和PPT制作:
张华恩,朱敏
指导记录
1矩阵式键盘的工作原理及程序中对应的地址。
2输出(蜂鸣器)的驱动电路(通过三极管优化电路)
3按键的判断(软件方向)
4显示单元简化电路。
(用排阻代替电阻)
解决问题
1在了解矩阵式键盘的原理之下,对应各个键的地址线
2通过增加三极管放大电路和驱动电路,优化了输出功率不够的问题
3通过cpu按键的扫描判断,程序上实现各个键的确认
4排阻的使用
电源电路
发声模块
数码管显示单元
AT89S52
晶振12MHZ
复位电路
4x4键盘