模拟电子琴装置课程设计Word下载.docx
《模拟电子琴装置课程设计Word下载.docx》由会员分享,可在线阅读,更多相关《模拟电子琴装置课程设计Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
在运用Protel的时候,我们在仔细阅读了使用方法后,还认真的向同学们请教,有时真不会,就上网搜索答案。
八、算法及流程图
算法:
程序利用循环结构检测整个系统中是否有按键被按下,如果检测到有按下的信号,把信息传到下一个端口,并确认频率。
如果没检测到按下信号,,程序则跳入下一个循环继续检测按键信息。
表1元件清单
元件名称
型号
数量
芯片
AT89C52
1
电源
5V
晶振
11.0592MHZ
电容
10uf30pf
2
按键
非自锁式
12
蜂鸣器
导线
若干
电路图如下:
图1.模拟额电子琴装置系统原理图
流程图如下:
图2.模拟电子琴装置系统流程图
九、调试过程
1.开打keil软件,建立一个新工程单击【Project】在下拉菜单中找到【NewProject...】选,如图3所示:
图3.新建工程
2.选择工程要保存的路径,并且输入工程文件名。
Keil的一个工程里通常含有很多小文件,为了方便管理,一般将一个工程放在一个独立的文件夹下,比如保存到课程设计文件夹,工程文件的名字为“交通灯系统”,如图4所示:
图4.保存文件
3.单击保存后会弹出一个对话框,要求选择单片机的型号,可以根据使用的单片机来选择。
KeilC51几乎支持所有的51内核的单片机,在这里选择Atmel的AT89C52,如图5所示,选择后单击保存。
图5.选择单片机型号
4.完成上一步骤后,窗口界面如图6所示:
图6.完成新建AT89C52文件
5.到此为止,还没有建立好一个完整的工程,虽然工程名有了,但工程当中还没有任何文件及代码,接下来的就是添加文件及代码。
6.单击【File】菜单中的【new】菜单项,或单击界面上的快捷键图标
。
如图7所示:
图7.添加新文件
7.新建文件后的窗口界面如图8所示:
图8.新建文件
8.此时光标在编辑窗口中闪烁,可以输入用户的应用程序,但此时这个新建文件与刚刚建立的工程还没有直接的联系,单击图标
,窗口界面如图9所示:
图9.建立联系
9.输入要保存的文件名,同时必须输入正确的扩展名(如果用C语言编写的程序,则扩展名必须是.c;
如果用汇编语言编写的程序,则扩展名必须是.asm).这里的文件名不一定要和工程名相同,可以随意填写文件名,然后单击【Save】按钮。
如图10所示:
图10.保存文件名
10.回到编辑界面,单击【Target1】前面的“+”号,然后在【SourceGroup1】单击右键,弹出如图所示的菜单然后选择【AddFilestoGroup‘SourceGroup1’】菜单项弹出如图11对话框:
图11.添加到SourceGroup1
11.选中【交通灯系统.C】,单击【Add】按钮,再单击【Close】按钮,然后再单击左侧【SourceGroup1】前面的“+”,屏幕窗口如图12所示,接着是在编辑窗口中编写程序:
图12.编写程序
12.编写好程序就要进行程序的编译,单击工具栏上的
进行编译,在编译过程中如果出现错误,修改程序直到没有错误为止,然后在依次点击
和
,在此过程中出现错误的,也要修改程序直到没有错误为止,编译过程中出现警告一般可以不必考虑,但特殊时也要通过修改程序消除警告。
13.把文件转化成十六进制文件,点击【Project】在下拉菜单里找到【OptionsforTarget‘target1】’,如图13所示单击【OptionsforTarget‘target1’】会弹出下面的对话框:
图13.转换文件
14.在Eprom和Ram后面的框中填入相应的数据(也可以不进行填写),然后单击Output选项出现如图14所示界面:
图14.更改数据
15.用鼠标左键单击CreatHEXFi:
前面的方框,这时方框里会用一个对号如图15:
图15.输出HEX文件
然后点击确定对话框就会消失,这样刚刚所建立的文件就转化成十六进制的文件。
16.用40针排线把DP-51PRO试验仪(如图16)上的A1区的P1.0-P1.5分别与LED1-LED6连接起来:
图16.DP-51PRO试验仪
17.对DP-51PRO试验仪上电。
打开DPFlash软件出现如图17界面:
图17.运行DPFlash软件
18.点击栏中的【文件】在下拉菜单里找到【装载】,如图18所示:
图18.装载文件
或者直接点击工具栏里图标
,点击后会弹出图19所示的对话框:
图19.装载HEX文件
19.找到刚刚所建立的文件,点击后按打开按钮对话框就会消失。
然后单击
会弹出图20所示的对话框:
图20.开始编程
20.单击编程后,软件开始把程序烧入试验仪,烧片的过程如图21:
图21.编程过程
当烧片完成后,点击退出就行了。
21.关闭DPFalsh软件。
把DP-51PRO单片机仿真试验仪A1区的工作模式选择开关(MOD_sw1)切换到RUN处,然后按一下复位键(RST),MON51程序即开始运行。
观察实验运行的情况是不是符合设想,实验现象设想为灯L1、L5亮30s后熄灭;
接着L3、L6亮,闪烁三次(1秒/次)后熄灭;
接着L2、L4亮30s后熄灭;
接下来又是L1、L5亮30s后熄灭,如此循环,直到停止工作。
但是如果不符合,对程序进行调试直到符合。
十.调试过程中出现的问题及相应解决办法
1、因为是第一次合作,所以同学之间默契度不高,在搞课程设计的时候大家没有分配好工作,导致分配到工作的同学感觉任务太重,有些同学就干脆在那聊天,但是这种情况在第二天的时候就彻底不存在了,大家都感觉到了责任的重大,看着其他同学纷纷投入到了课程设计当中,也开始进入状态中了。
2、在画流程图当中,因为没有Viso软件,所以画流程图很吃力,我们自己在草稿上把流程图都画好了,然后才去借电脑去画流程图,终于皇天不负有心人,老师看了我们画的流程图也说不错。
3、我们原来没有真正的画电路图,所以在画电路图的时候,我们都不会,后来我们画这个电路图的时候就用了三天,还是我们重新去学习的,搜了无数的资料,才把思路给确定了。
4、我们在编写程序的时候遇到了一个很大的障碍,实验室的单片机年代已久,不能用了,结果导致我们编写的程序全部泡汤,我们自己去借了单片机,然后重新去编写程序,还好程序虽然没了,但是思路还在,我们晚上连夜赶工,终于也把程序给弄好了。
十一、课程设计心得体会
周艳妹:
在这次课程设计中,我领会到了团队的重要性,一荣俱荣,一耻俱耻。
在一次项目中一个人的力量是远远不够的,这需要一个团体去共同去做一件事。
一根筷子易折断,我们团队之间要相互信任,相互帮助。
都兴忱:
这次课程设计让我知道了我的不足,我原来一直以为自己学得不错,但在这次课程设计中我发现了好多我自己不确定的东西,也学到了很多的知识。
自己一定要好好的学习,才能够学的更踏实。
赵欢:
这次课程设计不仅让我了解了单片机应用系统设计的基本方法和步骤还很好的将书本上的理论知识和实践有机的联系了起来,锻炼了我们的动手能力,同时也让我们懂得了理论与实际相结合的意义。
十二、源程序
/***********************************************************************************
这是一个用8个DIP按键模拟电子琴的按键,由4X3组成12个按钮矩阵,设计成12个音。
分别能够发出do,re,mi,fa,so,la,si的音符,可以弹奏出简单的音乐曲调
***********************************************************************************/
#include<
reg52.h>
unsigned
char
num,temp,key;
int
code
table[]={63689,63461,63340,63070,62767,62427,62243,61389};
//用定时器确定频率
sbit
been=P1^5;
void
delay(int
a)//延时函数
{
k;
for(;
a>
0;
a--)
for(k=0;
k<
110;
k++);
}
seek()//扫描矩阵
P1=0x7f;
//选定第一行
temp=P1;
//
把P1口的数据给temp
num=temp&
0x0f;
//确定P1口的数据是否改变
if(num!
=0x0f)//如果改变
delay(5);
//延时后再次检查(消抖)
//看看P1口的数据有没有一个稳定的变化
=0x0f)//如果有变化说明第一行右键按下
switch(num)//具体看看是哪个键被按下
case
0x07
:
key=0;
break
;
//0号键被按下
0x0b
key=1;
//1号键被按下
0x0d
key=2;
//2号键被按下
TR0=1;
//启动定时器0
while(num!
=0x0f)//按下键
P1=0xff;
TR0=0;
//关闭定时器0
been=1;
//蜂鸣器关闭
P1=0xbf;
//选定第二行
//把P1口的数据给temp
=0x0f)
switch(num)
key=3;
break;
//3号键被按下
key=4;
//4号键被按下
key=5;
//5号键被按下
//启动定时器0
P1=0xdf;
//选定第三行
//把P1口的数据给temp
//确定P1口的数据是否改变
//延时后再次检查(消抖)
key=6;
//6号键被按下
key=7;
//7号键被按下
main()
TMOD=0x01;
//设置定时器0为工作方式1(M1M0为01)
EA=1;
//开总中断
ET0=1;
//开定时器0中断
while
(1)//一直循环
seek();
//寻找那个键被按下
timer0()
interrupt
TH0=table[key]/256;
//重新装置
TL0=table[key]%256;
been=~been;
}
参考文献:
1.郭天翔.新概念51单片机C语言教程[M].北京:
电子工业出版社,2008.86-94
2.梁合庆等.从C到嵌入式C编程语言[M].北京:
北京航空航天大学出版社,2000
3.潘永雄.新编单片机原理与应用(第二版)[M].西安:
西安电子科技大学出版社,2007
4.段晨东.单片机原理及接口技术[M].北京:
清华大学出版社,2008.07
5.胡宴如.模拟电子技术[M].北京:
高等教育出版社,2004.121-134
6.李广弟.单片机基础[M].北京:
北京航空航天出版社,2001.45-47
7.何立民.单片机应用选编[M].西安:
西安电子科技大学出版社,1998.52-57
8.李勋.单片机实用教程[M].北京:
北京航空航天大学出版社,2005.05.
9.黄智伟.全国大学生电子设计竞训练教程[M].北京电子工业出版社,2004.11
10.王骥.基于STC89C51单片机的电子琴设计.西安电子科技大学出版社,2010.7-15