基于单片机的音乐门铃课程设计与仿真

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机课程设计

题目:音乐门铃

目录

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

#include

#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)

相关文档
最新文档