课程设计报告55751874.docx
- 文档编号:16050036
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:14
- 大小:212.40KB
课程设计报告55751874.docx
《课程设计报告55751874.docx》由会员分享,可在线阅读,更多相关《课程设计报告55751874.docx(14页珍藏版)》请在冰点文库上搜索。
课程设计报告55751874
(此文档为word格式,下载后您可任意编辑修改!
)
河南理工大学
《单片机应用与仿真训练》设计报告
基于单片机的电子琴设计
姓名:
郭鹏超王芳
学号:
专业班级:
电气08-6班
指导老师:
王莉
所在学院:
电气工程与自动化学院
2012年5月19日
摘要
当代,爱好音乐的人越来越多,有不少人自己练习弹奏乐器作为业余爱好和一种放松的手段,鉴于一些乐器学习难度大需要太多的学习时间,且其价格又太过于高昂,使得一部分有这种想法的人不得不放弃这种想法。
而一些简易的电子乐器价格相对便宜,学习上手快,一般人容易负担的起,能够满足一般爱好者的需求,故简易电子琴的研制具有一定的社会意义。
本次课程设计主要研究基于AT89S52单片机的简易电子琴设计。
整个系统主要包括以下几个部分组成:
(1)单片机的最小系统:
最小应用系统设计是单片机应用系统的设计基础。
它包括单片机的选择、时钟系统设计、复位电路设计、简单的IO口扩展、掉电保护等。
(2)矩阵键盘:
当按键数目较多时,为了节省IO口线,通常采用矩阵式键盘接口电路。
本设计采用5*8矩阵键盘(共40个按键,其中36个按键用来显示高中低音的1、1#、2、2#、3、4、4#、5、5#、6、6#、7的36个音调,其它4个按键可以随意的播放已存歌曲)。
(3)产生外部中断的系统:
它由两个四输入与非门74LS20和一个两输入或非门74LS02组成,把矩阵的五行与与非门74LS20和或非门74LS02相接后接在了单片机的P3.2口,下降沿触发产生中断INT0。
(4)发音电路:
此电子琴发音电路是由或非门来驱动扬声器发音的,控制单片机的P2.7口产生不同频率使扬声器发出不同的音调。
本文主要对单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴的硬件组成。
并且从原理图,主要芯片,各模块的原理和各个模块的程序调试来阐述。
利用单片机产生不同频率来获得我们要求的音阶,最终可以随意弹奏想要表达的音乐,还设计了一按键用来自动播放一首曲子。
系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比高等,具有一定的使用和参考价值。
目录
1概述1
1.1本次课程设计的目的意义1
1.2本次课程设计的任务及要求1
2系统总体方案及硬件设计2
2.1设计原理分析2
2.2设计方案2
2.2.1原理框图2
2.2.2定时计数器的设计和状态字定义:
3
2.2.3矩阵键盘设计及相关应用技术5
2.2.4LED显示设计及相关应用技术5
2.2.5发音电路设计6
2.2.6产生外部中断电路设计6
2.2.7单片机最小系统设计7
3软件设计8
3.1系统分析8
3.1.1系统软件的组成8
3.1.2系统程序总体流程图8
3.2参数计算9
3.3程序设计10
3.3.1弹奏程序流程图10
3.3.2自动播放歌曲程序流程图11
4实验仿真测试13
5课程设计体会14
1概述
1.1本次课程设计的目的意义
本论文是基于单片机的电子琴设计,电子琴是现代科技与音乐结合的产物,是一种新型的键盘乐器。
它是现代音乐扮演着的重要角色,单片机具有强大的控制功能和灵活的编程实现特性,它融入现代人们的生活中,成为不可替代的一部分。
因此说,学会运用单片机做一些简单的课程设计是我们工程技术人员必需掌握的一向技能。
本次设计要求我们综合利用所学单片机知识完成一个单片机应用系统设计并仿真实现,从而加深对单片机软硬知识的理解,获得初步的应用经验,为走出校门从事单片机应用的相关工作打下基础。
另外,通过本次课程设计,对我们还有以下帮助:
1、进一步熟悉和掌握单片机的内部结构和工作原理,了解单片机应用系统设计的基本方法和步骤
2、掌握单片机仿真软件Proteus的使用方法;
3、掌握键盘和显示器在的单片机控制系统中的应用。
4、掌握撰写课程设计报告的方法。
1.2本次课程设计的任务及要求
实现电子琴发声控制系统,要求电路实现如下功能:
利用扬声器或者蜂鸣器作为发声部件,两个数码管作为显示部件,设置多个按键,实现高音、中音、低音的1、2、3、4、5、6、7的发音。
并在存储一首歌曲的内容,可以实现自动播放。
说明:
单片机的工作时钟频率为12MHz。
2系统总体方案及硬件设计
2.1设计原理分析
一定频率产生声音,频率高低决定音调。
利用单片机输出脉冲信号经放大后送给喇叭,便可发出声音。
利用单片机的定时器,让定时器中断一次就对改变喇叭的状态一次,即形成矩形方波,这也是数字电路产生声音的方法。
由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,可以利用不同的频率的组合,即可构成我们所想要的音乐了,对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时计数器T0来产生这样方波频率信号,因此,只要把一首歌曲的音阶对应频率关系弄正确即可。
2.2设计方案
2.2.1原理框图
原理图如下图所示
2.2.2定时计数器的设计和状态字定义:
用单片机播放音乐,或者弹奏电子琴,实际上是按照特定的频率,输出一连串的方波。
为了输出合适的方波,首先应该知道音符与频率的关系。
若要产生音频脉冲,只要算出某一音频的周期(1频率),再将此周期除以2,即为半周期的时间。
利用定时器计时半周期时间,每当计时终止后就将P2.7反相,然后重复计时再反相。
就可在P2.7口引脚上得到此频率的脉冲。
利用AT89S52的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1523=1912μs,因此只要令计数器计时956μs1μs=956,每计数956次时将IO反相,就可得到中音DO(523Hz)。
计数脉冲值与频率的关系式是:
N=fi2fr,式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。
其计数初值T的求法如下:
T=65536-N=65536-fi2fr
例如:
设K=65536,fi=1MHz,求中音DO(261Hz)。
T=65536-N=65536-fi2fr=65536-2fr=65536-500000fr,中音DO的T=65536-500000523=64580。
单片机12MHZ晶振,音符与计数T0相关的计数值如表所示:
C调音符
频率Hz
THTL
C调音符
频率Hz
THTL
C调音符
频率Hz
THTL
低音1
262
F88B
1
523
FC43
高音1
1045
FE21
低音1#
277
F8F2
1#
553
FC78
高音1#
1106
FE3C
低音2
293
F95B
2
586
FCAB
高音2
1171
FE55
低音2#
311
F9B7
2#
621
FCDB
高音2#
1241
FE6D
低音3
329
FA14
3
658
FD08
高音3
1316
FE84
低音4
349
FA66
4
697
FD33
高音4
1393
FE99
低音4#
370
FAB9
4#
739
FD5B
高音4#
1476
FEAD
低音5
392
FB03
5
783
FD81
高音5
1563
FEC0
低音5#
415
FB4A
5#
830
FDA5
高音5#
1658
FED2
低音6
440
FB8F
6
879
FDC7
高音6
1755
FEE3
低音6#
466
FBCF
6#
931
FDE7
高音6#
1860
FEF3
低音7
494
FC0B
7
987
FE05
高音7
1971
FF02
采用查表程序进行查表时,可以为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据:
低音0-11之间,中音在12-23之间,高音在24-35之间
TABLE:
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,0xD2,0xFE,0xE3,0xFE,0xF3,0xFF,0x02高音
把这个数据表,放在程序中,需要播音的时候,就从表中取出一个数据送到定时器,当定时器溢出中断的时候,再对输出引脚取反,那么,在扬声器中,即可听到上表中对应频率的声音。
音乐的音拍,一个节拍为单位(C调)
曲调值
DELAY
曲调值
DELAY
调44
125ms
调44
62ms
调34
187ms
调34
94ms
调24
250ms
调24
125ms
对于不同的曲调我们也可以用单片机的另外一个定时计数器来完成。
在这个程序中用到了两个定时计数器来完成的。
其中T0用来产生音符频率延时函数用来产生音拍。
2.2.3矩阵键盘设计及相关应用技术
采用5X8行列式键盘识别;
(1)把“单片机系统”区域中的P1.0-P1.7端口用8芯排线连接到“5X8行列式键盘”区域中的列C1-C8端口上,把P2.0-P2.4端口连接到“5X8行列式键盘”区域中的行R1-R5上;
(2)把“单片机系统”区域中的P0.0-P0.7端口用8芯排线连接到“7段数码显示模块”区域中的任一个a-();运行
voidKeyScan();扫描键盘
voiddelay_1ms(uchar);1ms延时
voidPlayMusic(ucharcode*p);演奏音乐
voidDisplay(uchar);
sbitSpeaker=P2^7;
sbitG=P2^6;
sbitD=P2^5;
sbitLed=P1^0;
ucharKeyValue;按键值
ucharTh0,Tl0;TH0,TL0
ucharKeyPinlv;按键对应频率
ucharflag;
ucharcodetable_d[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};数码管编码
音调频率
ucharcodepinlv[]={
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,0xD2,0xFE,0xE3,0xFE,0xF3,0xFF,0x02高音
};
ucharcodemusic[]={xFF};
voidDisplay(ucharKey)
{
P0=table_d[Key12];
G=0;D=1;
delay_1ms(10);P2.5低位P2.6高位
P0=table_d[Key%12];
G=1;D=0;
delay_1ms(10);
}
voiddelay_1ms(uchari)1ms延时
{
ucharx,j;
for(j=0;j
for(x=0;x<=148;x++)
;
}
voidKeyScan()检测按键
{
uchari,j;
uchartemp;
uchartable0[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
EX0=0;扫描键盘,关外部中断
for(j=0;j<8;++j)
{
P1=table0[j];delay();
temp=0x01;
for(i=0;i<5;++i)
{
if(!
(P2&temp))
{
KeyValue=i*8+j;
EX0=1;开外部中断
P1=0x00;
return;
}
temp<<=1;
}
}
EX0=1;
}
voidRun()运行
{
ucharcode*p;
if(KeyValue<36)
{
PlayKey(pinlv[KeyValue*2],pinlv[KeyValue*2+1]);
}
else
{
p=music;
PlayMusic(p);
}
}
voidPlayKey(ucharPLH,ucharPLL)运行按键
{
Th0=PLH;
Tl0=PLL;
TR0=1;
delay_1ms(187);
TR0=0;
Speaker=1;
}
voidPlayMusic(ucharcode*p)
{
uinti,j;
flag=0;
for(i=0;p[2*i]!
=0xFF;++i)
{
j=p[2*i];
if(j!
=0)
{
while(j--)
{
if(flag==1)
return;
PlayKey(pinlv[p[2*i+1]*2],pinlv[p[2*i+1]*2+1]);
}
}
if(j==0)
{
delay_1ms(187);
}
}
}
voidDevice_init()初始化
{
TMOD=0x01;使用定时器0的16位工作模式
TR0=0;
ET0=1;定时器0中断
EX0=1;
IT0=1;下降沿中断
EA=1;打开总中断
flag=0;没有按键
P1=0x00;
}
timer0()interrupt1using0定时器中断
{
TH0=Th0;TL0=Tl0;
Speaker=!
Speaker;
}
Int0()interrupt0using1外部中断
{
EX0=0;
flag=1;
P1=0x00;
EX0=1;
}
voidmain()
{
Device_init();
while
(1)
{
if(flag)
{
KeyScan();
Run();
flag=0;
}
Display(KeyValue);
}
}
附2系统原理图
设计仪器、设备和材料清单:
主要仪器设备:
个人计算机和相关的软件
主要元器件:
按键40个、单片机芯片AT89S52一片
12MHz晶振一个
不同阻值电阻数个
开关一个
USB电源插口一个
喇叭一个10uF、30pF电容数个
电路板一块
电烙铁一个等
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告 55751874