单片机课程设计3.docx
- 文档编号:9312384
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:21
- 大小:293.66KB
单片机课程设计3.docx
《单片机课程设计3.docx》由会员分享,可在线阅读,更多相关《单片机课程设计3.docx(21页珍藏版)》请在冰豆网上搜索。
单片机课程设计3
单片机课程设计
专 业电气工程及其自动化
指导教师
学 生
学 号
题目基于单片机屏幕式电子琴的设计
2013年12月25日
基于51单片机屏幕电子琴的设计
摘要:
随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶。
我们都会抽空欣赏世界名曲,作为对精神的洗礼。
本论文设计一个基于单片机的屏幕电子琴。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本系统是以51系列单片机AT89C52为主控制器,附有矩阵键盘、屏幕式LED、扬声器组成。
系统完成显示输入信息、播放相应音符等基本功能。
本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。
关键词:
AT89C52,按键,屏幕式LED,扬声器。
1、设计任务与要求
利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出7个不同的音调,而且有一个按键可以自动播放歌曲,要求按键按下时发声,松开延时一小段时间,中间再按别的键则发另外一音调的声音,当系统扫描到键盘按下,则快速检测出是哪一个按键被按下,然后单片机的定时器启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。
如果在前一个按下的键发声的同时有另一个按键被按下,则启动中断系统。
前面的发音停止,转到后按的键的发音程序。
发出后按的键的音调。
2、总体设计方案
2.1总体硬件组成框图
该设计方案是通过按键随意按下所要表达的音符,作为电平送给主体电路,中央处理器通过识别,解码输出音符,在扬声器中发出有效的声音。
通过这样可以不断的弹奏我们想要的音符或者是音调,电路由复位电路,指示灯电路,和功能按键电路组成,通过功能键可以选择播放音乐或者弹奏音节,硬件主要有下面几个部分组成。
用P3口的高四位和P3口的第四位作为按键的接口,用P1口做信号输出口。
图2-1电子琴硬件设计框图
2.2设计方案
2.2.1播放模块
播放模块是由喇叭构成,它几乎不存在噪声,音响效果较好,而且由于所需驱动功率较小,且价格低廉,所以,被广泛应用。
2.2.2按键控制模块
电子琴设有8个按键,其中7个作为音符输入,另外一个作为模式转换按键,实现用户存放的自动播放歌曲。
7个按键分别代表7个音符,包括中音段的全部音符,通过软硬件设计,模式转换按键触发外部中断,中断使程序跳转,实现模式转换,启动电子琴。
然后通过查询电子琴所按下的按键,读取电子琴输入状态,跳转到对应的程序入口,实现自编歌曲的。
三、系统的硬件设计
为了使电子琴的控制系统更加的方便、灵活以及稳定性,我们对系统硬件进行了简约和优化,使硬件更加的实用,更加的人性化,硬件电路包括中心控制模块、播放模块、按键控制模块、复位按键模块四大类。
3.1中心控制模块的硬件设计
这次设计的中心控制模块是采用AT89C52单片机来控制整个系统。
其中P3口作为输入口,P2口为信号输出口,P1.0连接音响驱动电路。
3.2声音播放模块的硬件设计
图3-1音频放大电路
如下图所示,为声音的播放模块,它接到P1.4口上,当有按键按下时,它通过AT89C52中心控制芯片的识别后发出相应的音符。
3.3按键控制模块和复位电路模块的硬件设计
在P2口连接有8个按键开关加8个拉电阻,它们一端接5V电源,一端接地。
只要有一个按键被按下,并被单片机扫描到,则会播放发出音符。
图3-2按键复位电路
图3-3按键电路
四、单片机最小系统设计
4.1电子琴主要电路及其芯片
在电子琴主要电路设计中,我们采用了AT89C52单片机芯片,其特点及管脚封装如下介绍一般。
AT89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
AT89C52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
8位微控制器8K字节在系统可编程FlashAT89C52。
P3口亦作为AT89C52特殊功能(第二功能)使用,如下表所示。
在flash编程和校验时,P3口也接收一些控制信号。
端口引脚第二功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2INTO(外中断0)
P3.3INT1(外中断1)
P3.4TO(定时/计数器0)
P3.5T1(定时/计数器1)
P3.6WR(外部数据存储器写选通)
P3.7RD(外部数据存储器读选通)
此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。
RST——复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。
图4-1AT89S52芯片的管脚图
4.2音频功放电路三极管8050
图4-2为三极管8050功放电路
电子琴的功放电路采用了两个8050的三极管放大音频,使用AT89S52驱动音频放大芯片工作,以达到我们想要输出的音频效果.
LM386是美国国家半导体公司生产的音频功率放大器,主要应用于低电压消费类产品。
为使外围元件最少,电压增益内置为20。
但在1脚和8脚之间增加一只外接电阻和电容,便可将电压增益调为任意值,直至200。
输入端以地位参考,同时输出端被自动偏置到电源电压的一半,在6V电源电压下,它的静态功耗仅为24mW,使得LM386特别适用于电池供电的场。
4.3扬声器
扬声器是一种把电平转变为声信号的换能器件,扬声器和性能对音质的高低音响很大。
扬声器的种类很多,按其换能原理可分为电动式、静电式、电磁式、压电式等几种,后两种多用于农村有线广播网中,按频率范围可分为低音扬声器、中音扬声器,这些常在音箱中作为组合扬声器使用。
在本次试验作品中使用电磁式扬声器。
当按键被按下时,相应的引脚被拉低,经扫描后,获得键值,并执行键功能程序,因此按下不同的按键,将执行不同的功能程序。
软件是该电子琴控制系统的重要组成部分,在系统的软件设计中我们也用了模块设计,将系统的各部分功能编写成子模块的形式,这样增强了系统软件的可读性和可移植性。
4.4系统软件流程
图4-3软件设计流程图
本系统软件中还要是编辑电子琴播放状态的内容,在设计中采用汇编语言编写了电子琴控制系统控制和播放内容的程序。
源程序参考附录一
主要程序:
voidmain()
{
s1num=0;//流水灯种类标志
key1=1;
key2=1;
TMOD=0x01;
TH0=a;
TL0=b;
ET0=1;//打开定时器,但是未允许中断
TR0=1;
while
(1)
{
check_key();
keyscan();
}
}
在程序编写中多次采用了判断指令,来扫描按键的按下,然后把相应的音符传送到指定的内存空间,使其相应的按键对应相应的音符。
源程序参考附录一。
五、电路的仿真和调试
Proteus的ISIS是一款Labcenter出品的电路分析实物仿真系统,可仿真各种电路和IC,并支持单片机,元件库齐全,使用方便,可以给我们做电路设计提供方便快捷的仿真效果,让我们事半功倍。
目前支持的单片机类型有:
680以及各种外围芯片0系列、8051系列、AVR系列、PIC12系列、HC11系列。
把程序烧进单片机,进行仿真没有问题,证明电路原理图和程序可以使用。
5-1电子琴仿真图
在此之前,本实验组功放电路曽一度采用复杂的LM326芯片放大电路来播放声音,其仿真图如下所示:
图5-2LM326音频功放电路
仿真虽然成功,但是在做完板子调试的时候性能及其不稳定,音响效果也很差,声音大小无法调节,最后通过询问老师以及同学,最后采用了三极管8050的音频放大电路,最终达到了实验所要的目的。
在作品板的调试过程中,本作品的复位电路的高电平和单片机没有接好,在一开始的调试中就遇到了难题,最终在检验板子和检测中找出问题,并以解决,最终达到了实验的目的。
六、结论与心得
将以调试好的程序烧进AT89S52芯片,再放到电路板中,按下按键就可以发出相应的音。
本次试验通过制作电子琴,将几个模块换呢好的融合起来,对使用单片机设计简易电子琴进行了分析,并接受了基于单片机电子期硬件组成。
利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。
说明一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,于是我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可,然后我们利用功放电路来将音乐声音放大,同时同股沟显示模块来确知自己所弹的音符。
通过这次实训设计,我感觉收获了很多:
通过这次的单片机实训,我加深了对单片机系列知识及其系统的认识。
这个设计题目并不怎么新颖,但从中体现到了个系统开发设计的过程,足以让我们受益匪浅。
在这次的实训中,让我更进一步的提高了动手能力,也重新复习了一次单片机的程序编程能力,在这期间,让我更加深刻了体会到了汇编程序的思路,加强了对编程能力的理解和对相应资料的查阅。
参考文献
[1]刘乐喜.微机计算机接口技术及应用[M].华中科技大学出版社.
[2]石东海.单片机数据通信技术从入门到精通.[M].西安电子科技大学出版社.
[3]谢自美等.电子线路设计、实验、测试.[M].华中科技大学出版社.
[4]长德.李华.李东.MC51/98系列单片机原理与应用[M].机械工业出版社.
附录1:
电路图
附录2:
源程序
sfrP4=0xe8;//定义P4组I0口
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitspeaker=P1^4;//喇叭接30脚
sbitkey1=P1^0;//流水灯按键(暂时)
sbitkey2=P1^1;//播放音乐按键(暂定)
uchara,b,num1,s1num,n1,n2;
charnum;//定义num为可以负数
ucharcodeyinfu[]={0xfb,0xe9,//Do
0xfc,0x5c,//Re
0xfc,0xc1,//Mi
0xfc,0xef,//Fa
0xfd,0x45,//So
0xfd,0x92,//La
0xfd,0xd0,//Si
0xfd,0xee,//Do#
0x00,0x00,//间隔
};
ucharcodeshengri_tone[]={1,0,1,2,1,4,3,0,//生日快乐音调
1,0,1,2,1,5,4,0,
1,0,1,8,6,4,3,2,0,
7,0,7,6,4,5,4,0//0代表不发声,即停顿;数字即为音调
};
ucharcodeshengri_beat[]={24,1,24,48,48,48,72,5,//节拍
24,1,24,48,48,48,72,5,
24,1,24,48,48,48,48,72,5,
24,1,24,48,48,48,72,5//节拍,即tone表各音调的延时
};
ucharcodeledtable[]={0x7f,0xbf,0xdf,0xef,//取反
0xf7,0xfb,0xfd,0xfe};//P0组口的发光二极管代码(焊接过程可能会相反,具体更改)
ucharcodeledtable2[]={0x7f,0xbf,0xdf,0xef,//取反
0xf7,0xfb,0xfd,0xfe};//P2组口发光二极管代码,相反!
voidcheck_key();//改为P3组为按键
voidkeyscan();
voidturn();//顺时针流动
voidback();
voidqianhou();
voiddangshuang();
voiddelay(uintz);//延时函数声明
voiddelay1(void);//声明第二个延时函数
voidplay1(void);//播放生日快乐
voidmain()
{
s1num=0;//流水灯种类标志
key1=1;
key2=1;
TMOD=0x01;
TH0=a;
TL0=b;
ET0=1;//打开定时器,但是未允许中断
TR0=1;
while
(1)
{
check_key();
keyscan();
}
}
voidtime0()interrupt1
{
TH0=a;
TL0=b;
speaker=~speaker;
}
voidcheck_key()
{
P3=0xff;//先赋给P2组口高电平
switch(P3)//按下一个键相应4个灯亮
{
case0xfe:
P0=0xee;P2=0x77;a=0xfb;b=0xe9;EA=1;break;//P0,P2组为发光二极管组
case0xfd:
P0=0xdd;P2=0xbb;a=0xfc;b=0x5c;EA=1;break;//注意:
EA不能改为TR0
case0xfb:
P0=0xbb;P2=0xdd;a=0xfc;b=0xc1;EA=1;break;
case0xf7:
P0=0x77;P2=0xee;a=0xfc;b=0xef;EA=1;break;
case0xef:
P0=0xee;P2=0x77;a=0xfd;b=0x45;EA=1;break;
case0xdf:
P0=0xdd;P2=0xbb;a=0xfd;b=0x92;EA=1;break;
case0xbf:
P0=0xbb;P2=0xdd;a=0xfd;b=0xd0;EA=1;break;
case0x7f:
P0=0x77;P2=0xee;a=0xfd;b=0xee;EA=1;break;
default:
EA=0;speaker=0;//P0=0xff;P2=0xff;
}
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidkeyscan()
{
if(key1==0)
{
delay(5);
if(key1==0)
{
s1num++;
while(!
key1);
if(s1num==1)
{
turn();
}
}
if(s1num==2)
{
back();
}
if(s1num==3)
{
qianhou();
}
if(s1num==4)
{
dangshuang();
}
if(s1num==5)
s1num=1;
}
if(key2==0)
{
delay(5);
while(~key2);
play1();
}
}
voiddelay1(void)//第二个延时函数
{
ucharn=15;
while(n--)
{
uchari;
for(i=0;i<125;i++);
}
}
voidplay1(void)//播放生日快乐
{
ucharm=0;
uchars;
ucharc=1;
P0=0xaa;
P2=0x55;
while
(1)
{
EA=0;
c=shengri_tone[m];//取音符
s=shengri_beat[m];//取节拍
a=yinfu[2*c-2];
b=yinfu[2*c-1];
EA=1;
while(s--)
{
delay1();
P0=~P0;
P2=~P2;
}
m++;
if(m>=33)return;//数值是shengri相关表中的元素数量
}
}
/*以下为N种流水灯流动花式*/
voidturn()//流水灯顺时针走动(5次)
{
for(num1=0;num1<8;num1++)
{
for(num=0;num<8;num++)
{
P0=ledtable[num];
delay(30);//时间暂定
}
P0=0xff;//之后关闭P1组
for(num=7;num>-1;num--)
{
P2=ledtable2[num];
delay(30);
}
P2=0xff;//之后关闭P2组
}
}
voidback()//逆时针流动
{
for(num1=0;num1<8;num1++)
{
for(num=0;num<8;num++)
{
P2=ledtable[num];
delay(30);
}
P2=0xff;
for(num=7;num>-1;num--)
{
P0=ledtable2[num];
delay(30);
}
P0=0xff;
}
}
voidqianhou()//前后来回
{
for(num1=0;num1<10;num1++)
{
for(num=0;num<8;num++)
{
P0=ledtable[num];
P2=ledtable2[num];
delay(30);
}
P0=0xff;
P2=0xff;
for(num=7;num>-1;num--)
{
P0=ledtable[num];
P2=ledtable2[num];
delay(30);
}
P0=0xff;
P2=0xff;
}
}
voiddangshuang()//单数双数
{
for(num1=0;num1<15;num1++)
{
P0=0x55;
P2=0xaa;
delay(150);
P0=0xaa;
P2=0x55;
delay(150);
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计