单片机课程设计报告.docx

上传人:b****2 文档编号:24622731 上传时间:2023-05-29 格式:DOCX 页数:17 大小:1MB
下载 相关 举报
单片机课程设计报告.docx_第1页
第1页 / 共17页
单片机课程设计报告.docx_第2页
第2页 / 共17页
单片机课程设计报告.docx_第3页
第3页 / 共17页
单片机课程设计报告.docx_第4页
第4页 / 共17页
单片机课程设计报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

单片机课程设计报告.docx

《单片机课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告.docx(17页珍藏版)》请在冰豆网上搜索。

单片机课程设计报告.docx

单片机课程设计报告

单片机课程设计

报告

 

课程名称:

单片机课程设计报告

课设题目:

基于单片机的音乐盒设计

专业班级:

电子科学与技术0902班

姓名:

徐万利学号:

090403038

课设时间:

2012年3月批阅时间:

指导教师:

朱建光成绩:

 

目录

摘要

时间安排

第一部分:

设计要求………………………………………3

第二部分:

方案设计………………………………………3

第三部分:

硬件介绍及原理图……………………………4

第四部分:

程序流程图……………………………………12

第五部分:

系统调试………………………………………12

第六部分:

总结……………………………………………13

参考文献……………………………………………………14

附录:

程序………………………………………………15

 

摘要

本设计是一个基于STC12C5410AD单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能音乐盒。

该音乐盒主要由按键电路、复位电路、数码管显示电路以及蜂鸣器组成。

本设计利用KEIL编程软件对音乐盒源程序进行编程并调试。

 

时间安排:

第一周:

周一至周三确定设计方案

周四至周五画程序流程图

第二周:

周一至周二编写程序

周三下载仿真调试程序

周四撰写课程设计报告

周五答辩

 

一、课程设计要求

利用I/O口产生一定频率的方波,驱动蜂鸣器,根据按键发出不同的音调,并能播放一首歌。

二、设计方案

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

具体做法如下所示。

例如:

高音(DO)的音频=1109HZ,周期T=1/1109s=901μs

定时器/计数器0的定时时间为:

T/2=901/2μs=450μs定时器450μs的计数值=定时时间/机器周期=450μs/0.54μs=833(时钟频率=22.1184MHZ)装入计数器初值为65536-833=64703,将64703装入T寄存器中,启动定时/计数器工作后,每计数833次时将产生溢出中断,进入中断服务时,每次对P2.6引脚的输出值进行取反,就可得到高音DO(1109HZ)的音符音频。

不同的初值可以产生不同的频率。

把DOREMIFASOLASI分别编码为1—7,把计算出的对应音调初值储存在一个数据类型为unsignedint的数组中。

歌曲播放的设计。

先将歌曲的简谱进行编码,储存在一个数据类型为unsignedchar的数组中。

程序从数组中取出一个数,查找到对应的音调初值赋给定时器,使之定时操作蜂鸣器,得出相应的音调。

 

三、硬件介绍及原理图

硬件原理框图:

 

 

1、stc12c5410ad

其中,其工作电压为3.5V到5.5V。

RAM是512字节,PWM是4路,程序空间大小是10K字节,有A/D转换功能,工作频率可得35M赫兹,工作温度范围-40--85摄氏度。

其管脚说明如下所示:

 

2、CH451

CH451是一个整合了数码管显示驱动和键盘扫描控制以及μP监控的多功能外围芯片。

CH451内置RC振荡电路,可以动态驱动8位数码管或者64位LED,具有BCD译码、闪烁、移位等功能;同时还可以进行64键的键盘扫描;CH451通过可以级联的串行接口与单片机等交换数据;并且提供上电复位和看门狗等监控功能。

 

其管脚说明如下:

Ch451的操作命令均为12位,操作命令如下:

 

3、按键连接方式如下:

按键代码如下:

4、数码管显示电路连接如下:

5、内部晶振电路连接如下:

机器周期=12/22.1184μs

6、扬声器链接电路如下:

 

四、程序流程图

演奏歌曲

转向不同音调

五、程序调试

Keil软件。

我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编。

目前已极少使用手工汇编的方法了。

机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。

Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。

运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。

六、总结

将程序导入芯片,调试成功后,可任意弹奏自己想要的旋律。

本课题通过制作电子琴,将几个模块很好的融合起来,对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。

利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。

说明一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,于是我们可以利用单片机的定时/计数器来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可,然后我们利用功放电路来将音乐声音放大,同时通过显示模块来确知自己所弹的音符。

通过这次课程设计,我感觉收获了很多:

第一,通过实践,加深对单片机系列知识及其系统的认识。

这个设计题目并不是新的,但从中能体现到一个系统开发设计的过程,足于让我们受益。

第二,通过设计学习到了很多软件的使用。

本次设计,软件部分用到了protues进行硬件设计,用keil进行程系编译。

第三,提高了自己的动手能力。

动手在一定程度上反映了一个人的能力,作为当代大学生,社会要求的我们不是只能说而不能做的人才。

 

参考文献

[1]谭浩强著、C程序设计教程、北京:

清华大学出版社、2007.7

[2]李群芳,张士军,黄建编著、单片微型计算机、北京:

电子工业出版社、2008.5

 

附录:

程序

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitdout=P2^2;

sbitload=P2^3;

sbitdin=P3^3;

sbitdclk=P3^4;

unsignedcharcodetable[]={0xbe,0x24,0xea,0xe6,0x74,0xd6,0xde,0xa4,0xfe,0xf6};

unsignedintcodeMusic_FreQ[]=

{65536,64703,64749,64835,64874,64948,65011,65066};//DO,RE,MI,FA,SO,LA,SI高音,对应频率的定时器初值

/**********************乐谱******************************/

unsignedcharcodeTabMusic[]=

{1,1,5,5,6,6,5,4,4,3,3,2,2,1,5,5,4,4,3,3,2,5,5,4,4,3,3,2,4,4,3,3,2,2,1};//一闪一闪亮晶晶

sbitspeak=P2^6;//音频输出端口

unsignedcharm=0,tt=0,tl=0,m0;

ucharFlag=1;//电子琴与音乐盒切换标志位

/************************延时函数*****************************/

voiddelay(uinta)

{while(a--);

}

voidTimer0Init()

{TMOD=0x11;

TH1=Music_FreQ[TabMusic[tl]]/256;

TL1=Music_FreQ[TabMusic[tl]]%256;

TL0=(65536-50000)%256;

TH0=(65536-50000)/256;

EA=1;ET0=1;TR0=0;ET1=1;TR1=0;

}

/**************************************************

函数名称:

外部中断0初始化说明:

下降沿触发

****************************************************/

unsignedcharch451_read()

{uchari,value=0;

uchartemp=0x07;

if(dout==0)

{load=0;

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

{din=temp&0x01;

dclk=0;

temp>>=1;

dclk=1;

}

load=1;

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

{if(dout)value|=0x01;

value<<=1;

dclk=0;

dclk=1;

}

switch(value>>1)

{case0x40:

return1;break;

case0x43:

return2;break;

case0x41:

return3;break;

case0x42:

return4;break;

case0x48:

return5;break;

case0x4b:

return6;break;

case0x49:

return7;break;

case0x4a:

return8;break;

}

}

return0;

}

voidch451_write(uintcommad)

{uchari;

load=0;

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

{din=commad&0x01;

dclk=0;

commad>>=1;

dclk=1;

}

load=1;

}

voidch451_set_mode()

{ch451_write(0x0201);//

ch451_write(0x0403);//0x0403,开显示,开键盘

ch451_write(0x0500);//

}

voiddisplay()

{ch451_write(0x0f00|table[m]);}

voiddelayms(uinta)

{while(a--);}

//主函数

voidmain()

{unsignedcharGetVal=0;

Timer0Init();

ch451_set_mode();

while

(1)

{GetVal=ch451_read();

if((GetVal!

=8)&&(GetVal!

=0))

{m=GetVal;

TR1=1;

delayms(50000);delayms(50000);delayms(50000);delayms(50000);

TR1=0;

speak=1;

}

if(GetVal==8)

{TR0=!

TR0;TR1=!

TR1;Flag=!

Flag;

}

display();

}

}

/******************************************************

函数名称:

定时器0服务函数

*******************************************************/

voidTimer0_ISR()interrupt1

{tt++;

if(tt==10)

{tt=0;tl++;tl%=28;TR1=0;

delay(5000);

TR1=1;

}

TL0=(65536-50000)%256;TH0=(65536-50000)/256;

}

/******************************************************

函数名称:

定时器1服务函数

*******************************************************/

voidTimer1_ISR()interrupt3

{speak=!

speak;

switch(Flag)

{case0:

TH1=Music_FreQ[TabMusic[tl]]/256;TL1=Music_FreQ[TabMusic[tl]]%256;break;

case1:

TH1=Music_FreQ[m]/256;TL1=Music_FreQ[m]%256;break;

}

}

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

当前位置:首页 > 高等教育 > 哲学

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

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