单片机课程设计
题目:音乐门铃
目录
1.功能
2.设计步骤
1.前期工作 (1)
2.电路结构 (1)
3.基本步骤 (1)
4.预期结果 (2)
3.硬件电路设计
1.模拟仿真电路 (2)
2.元件列表 (2)
3.发声原理 (3)
4.软件设计
1.设计材料 (3)
2.实验源程序 (4)
5.实验结果
1.仿真结果 (8)
2.实验感受 (8)
音乐门铃的设计
摘要:该设计以AT89C51为芯片组成的一个音乐门铃解决方案,在设计系统硬件电路的基础上,实现了电子门铃系统软件设计,该系统设计主要包括电源、按键模块等。
经过系统测试,证明达到了设计要求。
1.功能
1.用单片机编程实现自由切换播放三首歌曲,并且用LED灯进行显示,达到门铃效果。
2.设计步骤
1.前期工作
通过大家对单片机的学习,能够通过keilC软件编写C语言程序,并且能够在Proteus 仿真软件上成功的运行。
2.电路结构
音乐门铃的硬件电路由6个部分组成:单片机、时钟与复位电路、选择按键输入电路、音频发生器、音频放大器和扬声器。
音乐门铃的硬件电路设计框图如下。
图2-1 音乐门铃硬件电路设计框图
3.基本步骤
先用c语言编写实现音乐门铃的程序代码,然后将c语言用keil软件生成hex文件下载到stc89c51集成芯片中,利用不同的频率发出不同的音调,利用延时产生不同的节拍,通过功率放大器传送到喇叭使其发出美妙的音乐。
4.预期结果
按下门铃键,即同普通门铃的工作方法一样,由AT89C51控制蜂鸣器放出美妙的音乐,提醒主人开门。
3.硬件设计
1.模拟仿真电路
2.元件列表
3.发声原理
首先要让单片机出一定频率的波形,因为音符的差别就是频率的差别,网上有音符频率对照表可以参考。
所谓的节拍就是该频率的波形持续的时间,对于一般的乐曲先定好1/4拍是多少秒,然后计算出不同频率的波形在这个节拍上要重复几遍。
后面的事情就简单了,根据乐曲自行编辑出一段代码,每两个代码代表一个音符,前面一个表示音符的频率,后面一个代表持续的时间。
4.软件设计
1.设计材料
2.实验源程序:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit K1=P1^0;
sbit SPK=P3^7;
uchar Song_Index=0,T one_Index=0;
uchar code DSY_CODE[]={0x06,0x5b,0x4f};
uchar code HI_LIST[]={0,226,229,232,233,236,238,240,241,242,244,245,246,2 47,248};
uchar code LO_LIST[]={0,4,13,10,20,3,8,6,2,23,5,26,1,4,3}; uchar code Song[][50]=
{
{1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,6,5,3,5,3,2,1,2,1,-1}, {3,3,3,4,5,5,5,5,6,5,3,5,3,2,1,5,6,5,3,3,2,1,1,-1},
{3,2,1,3,2,1,1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,3,2,1,3,2,1,1,-1}
};
uchar code Len[][50]=
{1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,-1}, {1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,-1},
{1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,2,1,1,2,2,-1}
};
void EX0_INT() interrupt 0
{
TR0=0;
Song_Index=(Song_Index+1)%3;
T one_Index=0;
P2=DSY_CODE[Song_Index];
}
void T0_INT() interrupt 1
{
TL0=LO_LIST[Song[Song_Index][T one_Index]];
TH0=HI_LIST[Song[Song_Index][T one_Index]];
SPK=~SPK;
}
void Delay(uint time)
uint j=0;
for(;time>0;time--)
for(j=0;j<125;j++);
}
void main()
{
P2=0x06;
SPK=0;
TMOD=0x00;
IE=0x93;
IT0=1;
IP=0x02;
while(1)
{
while(K1==1);
while(K1==0);
TR0=1;
T one_Index=0;
while(Song[Song_Index][T one_Index]!=-1&&K1==1&&TR0==1)
Delay(300*Len[Song_Index][T one_Index]); T one_Index++;
}
TR0=0;
while(K1==0);
}
}
5.实验感受
1.仿真结果
2.实验感受
-
作为电子信息科学与技术专业的大三学生,我觉得做此次设计是十分有意义的,而且是十分必要的。
在已度过的大学时间里,我们大多数接触的是专业课。
我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做类似的课程设计就为我们提供了良好的实践平台。
在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。
为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。
我们是在做单片机课程设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。
其次,在这次课程设计中,我们运用到了以前所学的专业课知识,如:C语言、模拟和数字电路知识等。
虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。
- . - 总结资料-。