基于STC89C52单片机的简易电子琴.docx

上传人:b****5 文档编号:5543455 上传时间:2022-12-19 格式:DOCX 页数:17 大小:1.77MB
下载 相关 举报
基于STC89C52单片机的简易电子琴.docx_第1页
第1页 / 共17页
基于STC89C52单片机的简易电子琴.docx_第2页
第2页 / 共17页
基于STC89C52单片机的简易电子琴.docx_第3页
第3页 / 共17页
基于STC89C52单片机的简易电子琴.docx_第4页
第4页 / 共17页
基于STC89C52单片机的简易电子琴.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

基于STC89C52单片机的简易电子琴.docx

《基于STC89C52单片机的简易电子琴.docx》由会员分享,可在线阅读,更多相关《基于STC89C52单片机的简易电子琴.docx(17页珍藏版)》请在冰豆网上搜索。

基于STC89C52单片机的简易电子琴.docx

基于STC89C52单片机的简易电子琴

基于STC89C52单片机的简易电子琴

课程设计报告

 

课程名称:

微机原理课程设计

题目:

简易电子琴

 

学院:

环境与化学工程系:

过程装备与测控工程

专业:

测控技术与仪器

班级:

测仪xxx班

学号:

学生姓名:

起讫日期:

2013-12-27~2013-1-6

指导教师:

一、设计任务、要求

1.1、设计任务:

利用52单片机最小系统,共阴数码管,无源蜂鸣器以及独立按键,设计实现可发出八个基本音阶的简易电子琴系统。

1.2、设计要求:

1、蜂鸣器可发出八个简单音阶。

2、八位独立按键分别控制不同的音阶产生。

3、四位数码管依据所按按键,在不同的数码管上显示不同的数字。

4、通过按键实现系统复位。

二、方案总体设计

本次设计简易电子琴,通过STC89C52芯片最小系统控制电路,以八位独立按键控制,蜂鸣器产生八个不同的音阶,四位共阴数码管显示不同的数字,独立按键控制复位。

系统编程采用Keilc软件,电路图设计以及PCB板绘制使用Altiumdesigner软件,仿真调试使用ISIS软件实现。

将不同模块结合起来,实现简易电子琴的设计。

2.1、显示模块

本设计采用四位数码管显示,每位数码管分别由八位发光二极管组成。

数码管可分为共阴和共阳两种,通过不同的位选操作驱动不同的数码管显示,再通过不同的段选点亮不同的发光二极管,达到显示不同数字的功能。

2.2、按键模块

八位独立按键,通过P2口控制音阶的产生和数码管显示,按下响应的键产生设定的声音点亮对应的数码管。

2.3、蜂鸣器音阶产生模块

蜂鸣器可分为两种,分别为有源蜂鸣器和无源蜂鸣器

注意,这里的“源”不是指电源。

而是指震荡源。

也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。

而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。

必须用2K~5K的方波去驱动它有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。

  

无源蜂鸣器的优点是:

 1。

便宜 2。

声音频率可控,可以做出“多来米发索拉西”的效果 3。

在一些特例中,可以和LED复用一个控制口。

有源蜂鸣器的优点是:

程序控制方便

乐曲中不同的音符,实质就是不同频率的声音。

通过单片机产生不同的频率的脉冲信号,经过放大电路,由蜂鸣器放出,就产生了美妙和谐的乐曲。

(1)单片机产生不同频率脉冲信号的原理:

 

要产生音频脉冲,只要算出某一音频的脉冲(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器或延时函数计时这个半周期的时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期的时间再对I/O反相,就可以在I/O脚上得到此频率的脉冲。

例如:

要产生1KHZ的频率,则半周期为0.5ms,则P3^5所送出的信号中,0.5ms为高电平,0.5ms为低电平。

若0.5ms高电平与0.5ms为低电平为一组信号(总共1ms),连续送出100组,则可得到1KHZ的声音约0.1s:

停止输出0.1s之后,在连续送出100组高低电平,则可听到“哔,哔”两声。

通过改变频率,控制产生不同的方波,就可以产生不同的音阶。

使用无源蜂鸣器,通过内部程序延时产生不同频率的方波,使蜂鸣器产生八个基本的音阶Do,Re,Mi,Fa,So,La,Si,Do-H。

l按键与参数的对照表

按键

音阶

参数

S1

中音Do

115

S2

中音Re

102

S3

中音Mi

91

S4

中音Fa

86

S5

中音So

77

S6

中音La

68

S7

中音Si

61

S8

高音Do

57

图2-1音阶参数对应图

2.4、总体设计:

设计总体框架图如图2-1所示。

 

图2-2总体框架图

三、硬件设计

3.1、最小系统

3.1.1、时钟信号的产生

89C52芯片内部有一个高增益法相放大器,用于构成振荡器。

反相放大器的输入端为XTAL1,输出端为XTAL2,两端跨接石英晶体及两个电容就可以构成稳定的自己振荡器,电路如图3-1所示。

图3-1晶振电路

3.1.2、复位电路

复位操作有上电自动复位和按键手动复位两种方式,本设计采用按键电平复位,结构如图3-2所示。

图3-2复位电路

3.2、数码管显示模块

3.2.1、数码管引脚图

图3-3四位八段共阴极数码管

3.2.2、数码管连线电路

本设计中是用P1口低四位接1k的电阻控制数码管的位选,用P0口接1k的上拉排阻控制数码管的段选。

连线电路图:

图3-4数码管连线电路图

3.3、矩阵键盘

本设计采用八位独立按键,通过P2口控制,按键序号及接线图如下图所示:

图3-5独立键盘连线电路图

3.4、蜂鸣器电路

本课程设计使用的蜂鸣器是无源蜂鸣器,通过程序控制产生不同频率的方波送给蜂鸣器,驱动蜂鸣器蜂鸣器发出相应频率的声音,驱动电路如下图所示:

图3-6蜂鸣器连线电路图

3.5、整体电路

图3-7整体电路图

图3-8PCB电路图

四、程序流程图

程序流程图如4-1所示

图4-1程序流程图

五、系统仿真与调试

5.1、仿真软件简介

本次设计使用ProteusISIS仿真软件进行调试。

ProteusISIS是英国Labcenter公司开发的电路设计、分析与仿真软件,功能极其强大。

该软件的主要特点是:

①集原理图设计、仿真分析(ISIS)和印刷电路板设计(ARES)于一身。

可以完成从绘制原理图、仿真分析到生成印刷电路板图的整个硬件开发过程。

②提供几千种电子元件(分立元件和集成电路、模拟和数字电路)的电路符号、仿真模型和外形封装。

③支持大多数单片机系统以及各种外围芯片(RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真等)的仿真。

④提供各种虚拟仪器,如各种测量仪表、示波器、逻辑分析仪、信号发生器等。

过去需要昂贵的电子仪器设备、繁多的电子元件才能完成的电子电路、单片机等实验,

5.2、调试与仿真过程图

图5-1仿真调试图

5.3、实物图

按键模块

按键

复位

模块

蜂鸣器模块

图5-2实物图

图5-4实物调试图

5.4、使用说明

按键分布图

图5-5按键分布

按下0号键,蜂鸣器发出Do的音阶,第一位数码管显示0;

按下1号键,蜂鸣器发出Re的音阶,第二位数码管显示1;

按下2号键,蜂鸣器发出Mi的音阶,第三位数码管显示2;

按下3号键,蜂鸣器发出Fa的音阶,第四位数码管显示3;

按下4号键,蜂鸣器发出So的音阶,第一位数码管显示4;

按按下5号键,蜂鸣器发出La的音阶,第二位数码管显示5;

按下6号键,蜂鸣器发出Si的音阶,第三位数码管显示6;

按下7号键,蜂鸣器发出Do-H的音阶,第一位数码管显示7;

 

六、总结、心得体会

在这次课程设计中,由刚开始时的手足无措不知从何下手,到过程中电路设计,程序编写,调试模拟,腐蚀电路板,做出实物,实物调试。

一步一步收获了很多。

刚开始的几天,面对要把课本上的单片机做出实物,并且实现一定的功能就让动手实践能力不佳的我很犯难。

尤其是在选择课题上,怕选的太难实现不了功能,选的太简单没有挑战性,但是最终还是选择了简易电子琴这个设计课题。

选定课题后,第一步各种查资料,查音阶的产生原理,数码管的引脚分布,蜂鸣器的发声原理等等。

画电路板找元件到生成PCB板,调节各个元件的位置,选择封装形式,处理飞线等等。

最开始PCB的图就做了三次,选错封装,飞线太多,一步一步慢慢学着让自己的板子看起来更合理。

收获了很多但是最后还是由于粗心忘记加电源和底线的孔。

程序的编写可能是这次课设中对我来说最具挑战性的环节了,程序的编写不但需要一定的c语言的基础还需要把单片机的各种功能和引脚知识结合起来,程序的编写刚开始是错误加警告满篇,查资料问同学,一步一步改。

先是模仿书上的程序调试,然后是查资料。

把课设的功能分为好几个模块,一个模块一个模块的通过编程实现,然后相互加在一起通过一定的逻辑实现了最后的功能。

当然调试中,也遇到了很多的麻烦,按键不能起到控制作用,数码管亮度太低,引脚底座被焊坏,用万用表一条条的查线路,查引脚,按键,直到最后功能的全部实现。

这次课设真的让我收获很多,从硬件到软件,没有经验欠缺很多知识,虽然这个简易电子琴真的不难,但是从设计构想到实物的功能实现,还是花费了不少心血。

做设计不但要有丰厚的知识做后盾,还要细心耐心,有很好的动手能力,才能取得最后成功。

而我在这些方面还差的很多,这次课设在让我锻炼和收获的同时,也让我明白了自己还有很多的东西要学要做。

最后感谢课设过程中给予我帮助的老师和同学。

 

 

七、参考文献

【1】李朝青《单片机原理及接口技术》北京航天大学出版社

【2】杨长兴《C++程序设计》中国铁道出版社

【3】张义和《例说51单片机》人民邮电出版社

 

附录

/*-----------------

简易电子琴

时间:

2013.12.31

------------------*/

#include//

#defineDuanxuanP0

#defineWeixuanP1

#defineSW_PortP2

sbitbuzzer=P3^5;

unsignedcharkeys;

/*声明音阶数组DoReMiFaSolaSiDo_H*/

unsignedcharcodetone[8]={115,102,91,86,77,68,61,57};

unsignedcharcodeTAB[8]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};

unsignedcharcodeCAB[8]={0xfe,0xfd,0xfb,0xf7,0xfe,0xfd,0xfb,0xf7};

voiddisplay(unsignedchar);

voidsound(int);

voiddelay(int);

//------主程序------

main()

{

{while

(1)

if(SW_Port==0xfe)

{display(0);

sound(0);}

elseif(SW_Port==0xfd)

{display

(1);

sound

(1);}

elseif(SW_Port==0xfb)

{display

(2);

sound

(2);}

elseif(SW_Port==0xf7)

{display(3);

sound(3);}

elseif(SW_Port==0xef)

{display(4);

sound(4);}

elseif(SW_Port==0xdf)

{display(5);

sound(5);}

elseif(SW_Port==0xbf)

{display(6);

sound(6);}

elseif(SW_Port==0x7f)

{display(7);

sound(7);}

}

}

//---数码管显示函数-----

voiddisplay(unsignedcharx)

{

{

Duanxuan=TAB[x];

Weixuan=CAB[x];

}

}

//----发声函数-----

voidsound(intx)

{inti;

for(i=0;i<100;i++)

{buzzer=0;

delay(tone[x]);

buzzer=1;

delay(tone[x]);

}

}//----延时函数----

voiddelay(intx)

{inti,j;

for(i=0;i

for(j=0;j<1;j++);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1