基于单片机的蜂鸣器放音乐课程设计.docx
- 文档编号:23233332
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:17
- 大小:125.89KB
基于单片机的蜂鸣器放音乐课程设计.docx
《基于单片机的蜂鸣器放音乐课程设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的蜂鸣器放音乐课程设计.docx(17页珍藏版)》请在冰豆网上搜索。
基于单片机的蜂鸣器放音乐课程设计
基于单片机的蜂鸣器放音乐课程设计
单片机课程设计
—蜂鸣器放音乐设计
学号:
**************
班级:
**************
姓名:
**
指导教师:
***
日期:
2012.6
课程设计任务书
级:
**********班
姓名:
**
设计周数:
1学分:
1
指导教师:
***
设计题目:
设计目的及要求:
目的:
.熟悉印制电路板设计的步骤和方法,能够按照自己的思想设计出所需的电路功能,并能明白其原理和应用。
.熟悉常用电子器件的类别、型号、规格、性能及其使用范围,能查阅有关的电子器件图书。
.能够正确识别和选用常用的电子器件,并且能够熟练使用普通万用表和数字万用表。
.能够熟练的使用单片机编程软件,实现硬件及软件的紧密结合,并能熟练地调试程序,明白程序的目的和编写步骤。
要求:
掌握设计电路和写单片机程序及调试.
设计内容和方法:
用STC89C52单片机和电平转换芯片MAX232组成一个简单的控制电路,用以控制蜂鸣器发出各种不同的声音,并利用虚拟仪器控制。
方法:
通过电脑的串口写入一段程序到单片机中,实现单片机的控制作用。
利用按键控制蜂鸣器的发声,经MAX232与电脑相连,用虚拟仪器实现对单片机的控制。
第一章绪论.............................................................1第二章总体设计..........................................................2第三章硬件部分..........................................................3第四章软件部分..........................................................4第五章总结..............................................................5参考文献................................................................6附录...................................................................7
第一章绪论
单片机的发展概况
单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统,数据采集系统、智能化仪器仪表,及通讯设备、日常消费类产品、玩具等。
并且已经深入到工业生产的各个环节以及人民生活的各层次中,如车间流水线控制、自动化系统等、智能型家用电器(冰箱、空调、彩电)等。
管脚图如图1所示。
图1MCS—51单片机引脚图
(1)电源地组Vcc和Vss;VCC—(40)脚接+5V电压;VSS—(20)脚接地
(2)时钟电路组XTAL1和XTAL2
(3)控制信号组RST/ALE/PSEN和EA
(4)I/O端口P0,P1,P2和P3
近来,单片机的发展尤为迅猛,并且趋于高智能化、存储器大量化、更多的外围电路内装化以及工艺上的多元化等方向,广泛应用于单机应用领域、多机应用领域、自动控制领域和智能化控制领域等。
单片机应用系统的结构通常分为三个层次,即单片机、单片机系统和单片机应用系统。
单片机通常指应用系统主处理机,即所选择的单片机器件等。
单片机系统指按照单片机的技术要求和嵌入对象的资源要求而构成的基本系统。
时钟电路、复位电路和扩展存储器等与单片机共同构成了单片机系统。
单片机应用系统指能满足嵌入对象要求的全部电路系统。
在单片机系统的基础上加上面向对象的接口电路,如前向通道、后向通道、人机交互通道(键盘、显示器、打印机等)和串行通信口(RS232)以及应用程序等。
单片机应用系统层次关系如图2所示。
应用程序
向前通道单片机应用系统
向后通道
单片机系统
人机交互通道串行通信口
单片机
图2单片机应用系统三个层次的关系
第二章总体设计
本设计是设计一个单片机控制的蜂鸣器发声系统的设计。
近年来随着科技的飞速发展,单片机的应用正在不断的走向深入,同时带动着传统控制检测日新月异更新。
本秒表采用89c52为中心器件,将软、硬件有机地结合起来,使得系统能够实现控制蜂鸣器发声。
其软件系统采用c语言编写程序,并在keil下调试通过,硬件电路通过MAX232与电脑相连,并与软件相结合,调试修改,使达到预期的目的。
第三章硬件部分
3.1鸣器电路设计
由于蜂鸣器的工作电流一般比较大,以致于单片机的I/O口是无法直接驱动的,所以要利用放大短路来驱动,一般使用三极管来放大电流就可以了。
3.2电源电路
电源电路是系统的最基本部分,任何部分都离不开电源部分,单片机系统也不例外,而且我们应该高度重视电源部分,不能因为电源部分电路比较简单而有所疏忽,其实有一半的故障或制作失败都和电源有关,电源部分做好才能保证电路的正常工作。
3.3单片机晶振电路
52单片机内部的振荡电路是一个增益反相放大器,引线XYAL1和XTAL2分别为反相放大器的输入和内部时钟电路输入和来自反相放大器的输出,该反相放大器可以配置为片内振荡器。
单片机内部虽然有震荡电路,但要形成时钟,外部还需要附加电路石晶振荡和陶瓷振荡均可采用,有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,单必须保证脉冲的高低电平要求的宽度。
单片机的时钟产生方式有两种,分别为:
内部时钟方式和外部时钟方式。
利用其内部的震荡电路XTAL1和XTAL2外接定时元件,内部震荡电路便产生自激震荡,用示波器可以观察到XTAL2的输出时钟信号。
在MCS-52中通常用内部时钟方式,也就是在XTAL1和XTAL2之间连接晶体振荡器与电容构成稳定的自激震荡器。
晶体和电容决定了单片机的工作精度为1微秒,晶体可在1.2-12MHZ之间选择。
MCS-51单片机在通常情况下,使用震荡频率为6MHZ的石英晶体,而12MHZ频率主要是在高速串行通信情况才使用,在这里我们用的是12MHZ的石英晶体。
对电容无严格要求,但它在取值对震荡频率的输出的稳定性、大小及震荡电路起震荡速度有点影响。
C1和C2可在10-100pF之间取值,一般情况下取30pF。
外部时钟方式是把外部震荡信号源直接接入XTAL1或XTAL2。
由于XTAL2的逻辑电平不是TTL,所以还要接上拉电阻。
3.4单片机复位电路
单片机小系统采用上电自动复位和手动按键复位两种方式实现系统的复位操作。
上电复位要求接通电源后,自动实现复位操作。
手动复位要求在电源接通的条件下,在单片机运行期间,如果发生死机,用按钮开关操作使单片机复位。
单片机要完成复位,必须向复位端输出并持续两个机器周期以上的高电平,从而实现复位操作。
3.5按键电路
3.6通信电路
第四章软件部分
4.1单片机程序
/*******************************************/
/*音乐:
新年好*/
/*******************************************/
#include"REG51.H"
#defineucharunsignedchar
sbitbeepIO=P1^5;
sbitS6=P3^2;
sbitLED=P2^0;
ucharm,n,Flag;
ucharcodeT[49][2]={{0,0},
{0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},{0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},
{0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},
{0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},{0xFF,0x42},{0xFF,0x4C},{0
xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81}
};
ucharcodemusic[][2]={{0,4},
{19,4},{19,4},{19,8},{14,8},{23,4},{23,4},{23,8},{19,8},{19,4},{23,4},{26,8},{26,8},{24,4},{23,4},{21,16},{21,4},{23,4},{24,8},{24,8},
{23,4},{21,4},{23,8},{19,8},{19,4},{23,4},{21,8},{14,8},{18,4},{21,4},{19,16},
{0xFF,0xFF}};
voiddelay(ucharp)
{
uchari,j;
for(;p>0;p--)
for(i=181;i>0;i--)
for(j=181;j>0;j--);
}
//发送、接收初始化
voidinit_sr()
{
SCON=0x50;//REN=1允许串行接受状态,串口
工作模式1
TMOD|=0x20;//定时器工作方式2
PT1=1;
TH1=0xFD;
TL1=0xFD;
ES=1;//开串口中断
TR1=1;
}
voidpause()
{
uchari,j;
for(i=150;i>0;i--)
for(j=150;j>0;j--);
}
voidEX0_int()interrupt0
{
staticbita=1;
EX0=0;
if(a)
{
a=0;
delay
(2);
if(S6==0)
{
LED=0;
ET0=0;
beepIO=1;
}
}
else
{
a=1;
delay
(2);
if(S6==0)
{
LED=1;
ET0=1;
}
}
EX0=1;
}
voidmain(){
uchari=0;
TMOD=0x01;
ET0=1;
EX0=1;
IT0=1;
PX0=0;
LED=1;
EA=1;
init_sr();
while
(1)
{
m=music[i][0];
n=music[i][1];
if(m==0x00)
{
TR0=0;
delay(n);
i++;
}
elseif(m==0xFF)
{
TR0=0;
delay(30);
i=0;
}
elseif(m==music[i+1][0])
{
TR0=1;
delay(n);
TR0=0;
pause();
i++;
}
else
{
TR0=1;
delay(n);
i++;
}
}
}
voidT0_int()interrupt1{
beepIO=!
beepIO;
TH0=T[m][0];TL0=T[m][1];}
//串口中断程序
voidser_int(void)interrupt4
{
if(RI==1)//RI接受中断标志
{
RI=0;//清除RI接受中断标志
S6=SBUF;//SUBF接受
Flag=1;
}
}
4.2CVI程序
#include
#include
#include
#include"kongzhi.h"
staticintpanelHandle;
intCOM,kaishi,comselect,duqu;charaa=0,status,FX;
charwrt[1];
voiddelay(unsignedcharz){
unsignedcharx,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
}
voidinit_lianjie()
{
aa=!
aa;
if(aa)
{
GetCtrlVal(panelHandle,PANEL_COMSELECT,&comselect);
COM=comselect;
status=OpenComConfig(COM,"",9600,0,8,1,512,512);
if(status!
=0)
{
MessagePopup("Error","连接错误!
");
aa=0;
}
SetCtrlVal(panelHandle,PANEL_LED,aa);
}
}
intmain(intargc,char*argv[]){
if(InitCVIRTE(0,argv,0)==0)
return-1;/*outofmemory*/
if((panelHandle=LoadPanel(0,"kongzhi.uir",PANEL))<0)
return-1;
DisplayPanel(panelHandle);
RunUserInterface();
DiscardPanel(panelHandle);
return0;
}
intCVICALLBACKPress(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2){
switch(event)
{
caseEVENT_COMMIT:
if(aa=1)
{
ComWrtByte(COM,0);
ComWrtByte(COM,1);
switch(FX++%8)
{
case0:
SetCtrlVal(panelHandle,PANEL_LED_7,0);
SetCtrlVal(panelHandle,PANEL_LED_1,1);
break;
case1:
SetCtrlVal(panelHandle,PANEL_LED_1,0);
SetCtrlVal(panelHandle,PANEL_LED_2,1);
break;
case2:
SetCtrlVal(panelHandle,PANEL_LED_2,0);
SetCtrlVal(panelHandle,PANEL_LED_3,1);
break;
case3:
SetCtrlVal(panelHandle,PANEL_LED_3,0);
SetCtrlVal(panelHandle,PANEL_LED_4,1);
break;
case4:
SetCtrlVal(panelHandle,PANEL_LED_4,0);
SetCtrlVal(panelHandle,PANEL_LED_5,1);
break;
case5:
SetCtrlVal(panelHandle,PANEL_LED_5,0);
SetCtrlVal(panelHandle,PANEL_LED_6,1);
break;
case6:
SetCtrlVal(panelHandle,PANEL_LED_6,0);
SetCtrlVal(panelHandle,PANEL_LED_7,1);
break;
}
}
break;
}
return0;
}
intCVICALLBACKQuit(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2){
switch(event)
{
caseEVENT_COMMIT:
CloseCom(COM);
QuitUserInterface(0);
break;
}
return0;
}
intCVICALLBACKLianjie(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2){
intcomvalue;
switch(event)
{
caseEVENT_COMMIT:
init_lianjie();
break;
}
return0;
}
第五章总结
作为一名电子信息工程的大三学生,我觉得做单片机课程设计是很有意义的,而且也是必要的。
在做这次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。
为了让自己的设计更加完善,查阅这方面的实际资料是十分必要的,也是必不可少的。
其次,在这次课程设计中,我们运用了以前学过的专业课知识,如:
proteus仿真、汇编语言、模拟和数字电路知识等。
虽然过去我从未独立应用过他们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。
最后,要做好一个课程设计,就必须做到:
在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机有哪些资源;要有一个清晰的思路和一个完整的软件流程图;在设计程序时,不能妄想一次将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,这样为资料的保留和交流提供了方便;在设计中遇到的问题要记录,以免下次遇到同样的问题。
在这次的课程设计中,我真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单片机更是如此,程序只有在经常写与读的过程中才能提高,这就是这次课程设计的最大收获。
参考文献:
1:
基于LabWindow/CVI的虚拟仪器设计与应用(第二版)电子工业出版社2:
单片机原理及接口技术人民邮电出版社
附录:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 蜂鸣器 音乐 课程设计