课程设计---基于51单片机三首歌音乐门铃设计

合集下载

音乐门铃课程设计

音乐门铃课程设计

音乐门铃课程设计一、课程目标知识目标:1. 学生能够理解音乐门铃的基本概念,掌握其构造和原理。

2. 学生能够识别并描述音乐门铃中常用的音符和节奏。

3. 学生能够了解音乐门铃在生活中的应用及其发展历史。

技能目标:1. 学生能够运用所学的音乐知识,创作出简单的音乐门铃旋律。

2. 学生能够通过实践操作,掌握音乐门铃的演奏技巧。

3. 学生能够与他人合作,共同完成音乐门铃的制作和演奏。

情感态度价值观目标:1. 培养学生对音乐的热爱,激发他们学习音乐的兴趣。

2. 培养学生动手实践的能力,增强他们解决问题的自信心。

3. 培养学生团队协作精神,提高他们的人际沟通能力。

4. 培养学生关注生活、发现生活中的音乐美,提升他们的审美素养。

课程性质:本课程为音乐制作与演奏的实践课程,旨在让学生通过动手操作,掌握音乐门铃的制作和演奏技巧,提高他们的音乐素养。

学生特点:考虑到学生所在年级的特点,他们对音乐有一定的认识和兴趣,但音乐制作和演奏技巧尚不熟练,需要通过实践操作来提高。

教学要求:课程要求教师以引导为主,关注学生的个体差异,提供充足的实践机会,让学生在动手操作中掌握音乐门铃的制作和演奏技巧。

同时,注重培养学生的团队协作能力和审美素养。

通过本课程的学习,学生能够将所学知识运用到实际生活中,发挥音乐的魅力。

二、教学内容1. 音乐门铃基础知识:- 门铃的发展历史与分类- 音乐门铃的构造与原理- 音乐门铃的音符与节奏识别2. 音乐门铃制作与演奏技巧:- 音乐门铃选材与制作流程- 音乐门铃演奏方法与技巧- 创作简单音乐门铃旋律3. 实践与展示:- 小组合作制作音乐门铃- 演奏练习与指导- 成果展示与评价4. 教学内容的安排与进度:- 第一节课:音乐门铃基础知识学习- 第二节课:音乐门铃制作与演奏技巧学习- 第三节课:小组合作制作音乐门铃- 第四节课:演奏练习与指导- 第五节课:成果展示与评价教材章节:- 《音乐制作与演奏》第五章:音乐门铃的制作与演奏- 内容包括:音乐门铃的构造、原理、制作流程、演奏技巧等。

基于单片机的门铃设计

基于单片机的门铃设计

基于单片机的门铃设计门铃是一种常见且具有实用性的装置,其用途是提醒主人外面有人到来。

随着科技的不断发展,基于单片机的门铃设计也变得越来越智能化和便捷。

本文将介绍一种基于单片机的智能门铃设计。

该设计使用单片机作为主要控制芯片,并搭配其他传感器和模块实现门铃的自动响铃、录像等功能。

设计理念是通过使用单片机来感知和处理外部信号,并通过触发相应的操作来实现人们对门铃的需求。

首先,我们需要选用一款适合的单片机作为主控制芯片。

单片机的选择要考虑处理能力、外设接口、功耗等因素。

推荐使用一款低功耗的低端单片机,如Arduino Uno。

其较小的体积和就能耗使其非常适合此类小型应用。

其次,我们需要考虑门铃的触发方式。

常见的门铃触发方式有按钮触摸、声音识别、人体感应等。

本设计采用人体感应作为门铃的触发方式。

通过连接红外传感器,当有人接近门口时,红外传感器将检测到人体的红外辐射,并触发门铃响铃。

然后,我们需要实现声音的播放和存储功能。

为了实现门铃响铃的功能,我们可以使用单片机内部的PWM模块来控制一个扬声器的输出。

另外,为了增加门铃的智能性,我们还可以将声音存储在一个闪存模块中,通过单片机的读取将门铃声音可视化,可以使用一块microSD卡作为存储介质。

最后,我们可以添加一些附加的功能,如拍摄照片、录制视频等。

为了实现这些功能,我们可以使用一块摄像头模块,例如一款带有Omnivision 5642芯片的摄像头模块。

通过连接摄像头模块和单片机,我们可以实现在有人接近门铃时自动拍摄照片或录制视频。

这些文件可以保存在存储介质中,并在需要的时候被读取。

综上所述,基于单片机的门铃设计可以实现智能化和便捷化。

通过使用单片机作为主要控制芯片,并搭配其他传感器和模块,我们可以实现门铃的自动响铃、存储声音、拍摄照片、录制视频等功能。

这些功能大大提高了门铃的实用性和智能性,为主人提供了更多的便利。

随着科技的不断进步,我们相信基于单片机的门铃设计将会有更多的创新和发展。

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

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

单片机课程设计题目:音乐门铃目录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拍是多少秒,然后计算出不同频率的波形在这个节拍上要重复几遍。

后面的事情就简单了,根据乐曲自行编辑出一段代码,每两个代码代表一个音符,前面一个表示音符的频率,后面一个代表持续的时间。

单片机课程设计电子门铃

单片机课程设计电子门铃

单片机课程设计电子门铃电子门铃设计项目一、引言电子门铃是现代家庭和办公室的常见设备之一,其功用是用来通知屋内的人有人敲门或访客到来。

随着科技的进步,电子门铃也越来越智能化,通常包含音频和视频功能,能够通过手机或其他远程设备实时接收访客信息。

本课程设计的目的是设计一个基于单片机的电子门铃,能够实现基本的功能,如接收门铃按键信号、发出响铃声音等。

二、设计思路本课程设计选择使用8051系列单片机作为核心处理器,主要通过其IO口来实现门铃按键输入和声音输出控制。

设计的基本原理如下:1.按键输入部分:使用独立按键开关作为门铃按键,按下按键时,门铃按键信号通过电阻和电容电路进行去抖处理,并送入8051单片机的IO 口。

2.声音输出部分:使用蜂鸣器作为声音输出装置,当门铃按键信号触发时,通过单片机的IO口控制蜂鸣器发出一段特定频率的声音。

3.供电电源:使用外部电源适配器供电,将稳压电源输出接入单片机的电源输入端,以提供工作电压。

三、设计步骤1.硬件设计(1)按键输入电路设计:门铃按键、电阻和电容电路连接在一起,通过连接到单片机的IO口,实现按键信号的输入。

(2)声音输出电路设计:将蜂鸣器连接到单片机的IO口和GND,通过单片机的IO口控制蜂鸣器的开关状态,以发出声音。

(3)电源电路设计:将外部电源适配器的正极接入单片机的电源输入端,负极接入地线,以提供工作电压。

2.软件设计(1)编写门铃按键信号检测程序:在单片机的主程序中,使用循环检测门铃按键信号,当检测到门铃按键按下时,触发门铃响铃的程序。

(2)编写门铃响铃程序:在门铃响铃程序中,通过单片机的IO口控制蜂鸣器的开关状态,以产生一定频率的声音。

可以设置不同的频率和间隔时间,以实现不同的铃声效果。

(3)编写外部中断程序:为了实现按键的去抖处理,可以使用外部中断来触发按键信号的检测和处理程序。

四、实验结果经过硬件和软件设计后,完成了电子门铃的设计。

当按下门铃按键时,蜂鸣器发出一段特定频率的声音,表示门铃响铃。

基于单片机控制的智能门铃设计

基于单片机控制的智能门铃设计

基于单片机控制的智能门铃设计第一章导言智能家居技术的发展日益迅猛,为我们的生活带来了诸多便利。

智能门铃作为智能家居的一部分,不仅能提供安全保障,还能方便我们与来访者进行互动。

本文将介绍一种基于单片机控制的智能门铃设计,旨在为读者提供一种简单、可靠的智能门铃解决方案。

第二章系统设计2.1 硬件设计智能门铃的硬件设计包括单片机、传感器、触摸屏、摄像头等组件。

其中,单片机作为控制中心,负责接收传感器信息,控制门铃的各项功能。

传感器可以包括人体红外传感器、声音传感器等,用于检测有人靠近门口或有人按门铃按钮。

触摸屏用于显示门铃的状态,让用户可以方便地进行操作。

摄像头则可以实时拍摄门口的画面,并通过触摸屏显示给用户。

2.2 软件设计智能门铃的软件设计包括单片机程序、手机应用程序等。

单片机程序负责接收传感器信息,控制各个组件的工作,并与手机应用程序进行通信。

手机应用程序可以实现与智能门铃的远程连接,包括查看门口画面、远程开锁等功能。

第三章功能实现3.1 人体红外检测智能门铃通过人体红外传感器可以实时检测门口有无人靠近,当有人靠近时,门铃会自动启动,并通过触摸屏显示来访者的画面。

这样一来,就可以及时知道门外有人来访,增加了家庭的安全性。

3.2 声音识别智能门铃还可以通过声音传感器识别来访者按门铃的声音,当有人按门铃按钮时,门铃会发出提示音,并通过触摸屏显示来访者的画面。

这样一来,即使主人不在家,也可以通过智能门铃知道有人来访,方便进行远程互动。

3.3 视频监控智能门铃内置摄像头,可以实时拍摄门口的画面,并通过触摸屏显示给用户。

用户可以通过触摸屏查看门外的画面,了解来访者的情况。

同时,智能门铃还支持远程视频监控,用户可以通过手机应用程序远程连接智能门铃,随时查看门口的情况。

3.4 远程开锁智能门铃还可以与家庭的门锁系统进行连接,实现远程开锁功能。

当用户接到来访者的请求时,可以通过手机应用程序远程开启门锁,方便来访者进入家中。

基于单片机的电子音乐门铃设计.

基于单片机的电子音乐门铃设计.

微机控制系统应用方向学年设计任务书微机控制系统应用方向学年设计说明书学院名称:计算机与信息工程学院班级名称:计科101学生姓名:祖杰、赵雷、周来宇、朱路平、张毅苗学号:2010211154、2010211150、2010211151、2010211153、2010211147题目:基于单片机的电子音乐门铃设计指导教师姓名:董再秀起止日期:2013.07.03--2013.08.29目录第一部分:正文部分 (1)1 绪论 (1)1.1 研究背景 (1)1.2 主要工作 (1)1.3 研究内容 (1)2 系统总体方案 (1)2.1 系统组成框图 (1)2.2 音乐门铃的功能结构图 (2)3 硬件设计 (2)3.1 各部分硬件设计及其原理 (2)3.1.1 AT89C51简介 (2)3.1.2 时钟振荡电路 (3)3.2 硬件电路图及功能 (3)4 软件设计 (4)4.1 音调的确定 (4)4.2 节拍的确定 (5)4.3 编码 (6)5 调试 (7)5.1 检查硬件连接 (7)5.2 检查软件系统 (7)5.3 测试结果 (7)总结 (8)致谢 (8)第二部分:参考文献 (9)附录A 源代码及注释 (10)第三部分:指导教师评语 (15)第四部分:成绩评定 (15)第一部分:正文部分1 绪论1.1 研究背景随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。

传统的门铃由于发音单调,已经不能很好满足人们的需要,不能实现批量生产。

本文设计的音乐门铃是以单片机为核心元件的电子式音乐门铃,体积小,功能强,能演奏和旋音乐,使用方便,并具有一定的商业价值。

人类所接触的信息也在不断增加并且日益复杂。

面对浩如烟海的信息,人们已经能够利用计算机等工具高效准确地对之进行处理,但要想将处理完的信息及时,清晰地传递给别人,还必须通过寻求更加卓越的显示技术来实现。

单片机技术与数码管显示技术的结合,使信息传输交流向着智能可视化方向迅速发展。

基于51单片机音乐播放器课程设计报告

基于51单片机音乐播放器课程设计报告

基于51 单片机音乐播放器课程设计报告课程设计课程设计名称:单片机课程设计专业班级电科0901 学生姓名:学号:200948360118指导教师:课程设计时间:2012-9-20〜2012-9-28 电子信息科学与技术专业课程设计任务书说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文) 首页一设计任务及要求利用单片机定时器完成控制音乐的频率,每个音调响的时长,来达到播放出音乐。

并且实时监测红外接收管是否触发中断,来判断是否遥控器按下了播放/ 暂停键、上一首、下一首,进而实时处理。

并把信息显示在1602 液晶上。

音高与频率的对应关系下表:二设计原理图单片机与1602 液晶、红外接收管SM0038 接线图单片机驱动蜂鸣器电路及红外遥控器键码本次实验所用按键及对应编码:( 1 )上一首07 (2) 下一首15 (3)播放/暂停09三程序设计框图Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256;装入的初值(10ms 的初装值)Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%256; 装入的初值TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TMOD |= 0x11;ET0 = 1;ET1 = 0;PT0 = 0;TR0 = 0;TR1 = 0;EA = 1;void write_cmd(uchar cmd)//1602 lcd_rs=0; lcd_w=0;P0=cmd;delay(7);lcd_en=1;delay(6);lcd_en=0;void write_date(uchar date)//1602lcd_rs=1;lcd_w=0;P0=date;delay(7);lcd_en=1;delay(6);lcd_en=0;void init_1602()// 初始化1602lcd_en=0;write_cmd(1);write_cmd(0x84);write_cmd(0x38); write_cmd(0x0f); write_cmd(0x06);void inte1_init()// 红外中断 // 计算 TL1 应 // 计算 TH1 应 IT1 = 1;// 外部中断,下降沿中断EX1 = 1;// 开外部中断PX1 = 1;//EA = 1;// 开总中断IRIN=1; // 读引脚前,先置高void jiema() // 红外解码uchar i,j; for(j=0;j<4;j++)irma[j]=0;// 清除上次的码for(i=0;i<8;i++)irma[j]=irma[j]>>1;// 右移 1 位while(!IRIN);// 等待 0.56ms 低电平结束 time2_init();// 启动定时, 0.8ms while(!TF2);// 等到 0.8ms 时间到TR2=0;// 关定时器TF2=0;// 清标志位if(IRIN)// 发送是 1,其高电平时间长,大于 0.565ms irma[j]|=0x80;// 把最高位置 1 while(IRIN);// 等待高电平结束,以便于进入下一位的解码 } void Lcd_displays(uchar add,char *s)//1602 显示字符串uchar i;write_cmd(add);for(i=0;i<strlen(s);i++)write_date(s[i]);void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int 写命令写数据Speed)// 播放歌曲函数unsigned int NewFreTab[12]; // 新的频率表unsigned char i,j;unsigned int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength; unsigned char Tone,Length,SL,SH,SM,SLen,XG,FD;for(i=0;i<12;i++) // 根据调号及升降八度来生成新的频率表j = i + Signature;if(j > 11)j = j-12;NewFreTab[i] = FreTab[j]*2;NewFreTab[i] = FreTab[j];if(Octachord == 1)NewFreTab[i]>>=2;else if(Octachord == 3)NewFreTab[i]<<=2;SoundLength = 0;while(Sound[SoundLength] != 0x00) // 计算歌曲长度SoundLength+=2;Point = 0;Tone = Sound[Point];Length = Sound[Point+1]; // 读出第一个音符和它时时值LDiv0 = 12000/Speed; // 算出 1 分音符的长度(几个10ms)LDiv4 = LDiv0/4; // 算出 4 分音符的长度LDiv4 = LDiv4-LDiv4*SOUND_SPACE; // 普通音最长间隔标准TR0 = 0;TR1 = 1;while(Point < SoundLength)SL=Tone%10; // 计算出音符SM=Tone/10%10; // 计算出高低音SH=Tone/100; // 计算出是否升半CurrentFre = NewFreTab[SignTab[SL-1]+SH]; // 查出对应音符的频率if(SL!=0)if (SM==1) CurrentFre >>= 2; // 低音if (SM==3) CurrentFre <<= 2; // 高音Temp_T = 65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);// 计算计数器初值Sound_Temp_TH0 = Temp_T/256;Sound_Temp_TL0 = Temp_T%256;TH0 = Sound_Temp_TH0;TL0 = Sound_Temp_TL0 + 12; // 加12 是对中断延时的补偿}SLen=LengthTab[Length%10]; // 算出是几分音符XG=Length/10%10; // 算出音符类型(0 普通 1 连音 2 顿音) FD=Length/100;LDiv=LDiv0/SLen; // 算出连音音符演奏的长度(多少个10ms) if (FD==1)LDiv=LDiv+LDiv/2;if(XG!=1)if(XG==0) // 算出普通音符的演奏长度if (SLen<=4)LDiv1=LDiv-LDiv4;LDiv1=LDiv*SOUND_SPACE;LDiv1=LDiv/2; // 算出顿音的演奏长度LDiv1=LDiv;if(SL==0) LDiv1=0;LDiv2=LDiv-LDiv1; // 算出不发音的长度if (SL!=0)TR0=1;for(i=LDiv1;i>0;i--) // 发规定长度的音while(TF1==0);TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TF1=0; if(LDiv2!=0) void BeepTimer0(void) interrupt 1 // 音符发生中断BeepIO = !BeepIO;TH0 = Sound_Temp_TH0;TL0 = Sound_Temp_TL0;void inte1inte() interrupt 2 // 红外中断,外部中断 1 uchar k=10;EX1 = 0;// 关外部中断while(k--)〃循环十次,一次0.8ms,十次8ms , time2_init();while(!TF2);TF2 = 0;TR2 = 0;if(IRIN)// 中间如果出现高电平,就说明不是9MS 的引导电平{EX1 = 1;// 则开外部中断,退出中断return;while(!IRIN);// 运行到此,说明是引导电平,等待9MS 引导结束k=3;// 循环 3 次,每次0.8ms ,总共 2.4ms,while(k--)time2_init();while(!TF2);TF2 = 0;TR2 = 0;if(!IRIN)//2.4ms 结束如果变低电平,说明是重码,EX1 = 1;return;// 开中断,退出中断while(IRIN);// 等待 4.5ms 高电平结束,到此说明是正常红外信号jiema();// 解码程序,包括用户码,和按键码// irfenli();if(irma[2]==0x09||irma[2]==0x15||irma[2]==0x07){// 判断按下是哪一个键if(irma[2]==0x09)if(com==0)com=1;com=0; if(com)Lcd_displays(0x80,"START");Lcd_displays(0x80,"PAUSE");else if(irma[2]==0x15) newmusic++;if(newmusic==4)newmusic=1;Lcd_displays(0x80,"NEST "); newmusic--;if(newmusic==0)newmusic=3;Lcd_displays(0x80,"LAST ");switch(newmusic){// 更新1602 显示case 1:Lcd_displays(0x88,"MUSIC1");break; case 2:Lcd_displays(0x88,"MUSIC2");break; case 3:Lcd_displays(0x88,"MUSIC3");break; }// Lcd_display();EX1 = 1;return;三首歌曲的代码:位于music.h 文件内// 挥着翅膀的女孩unsigned char code Music_Girl[]={0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x17,0x03, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x02, 0x18,0x03, 0x17,0x03, 0x15,0x02, 0x18,0x03, 0x17,0x03, 0x18,0x02,0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x1A,0x03, 0x1B,0x03, 0x1F,0x03,0x1F,0x03, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x1F,0x03, 0x1F,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00, 0x1A,0x03, 0x1A,0x03, 0x1A,0x03, 0x1B,0x03, 0x1B,0x03, 0x1A,0x03, 0x19,0x03, 0x19,0x02, 0x17,0x03, 0x15,0x17, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x04, 0x18,0x0E, 0x18,0x03, 0x17,0x04, 0x18,0x0E, 0x18,0x66, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x04, 0x1B,0x0E, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00, 0x18,0x02, 0x18,0x03, 0x1A,0x03, 0x19,0x0D, 0x15,0x03, 0x15,0x02, 0x18,0x66, 0x16,0x02, 0x17,0x02, 0x15,0x00, 0x00,0x00}; // 同一首歌unsigned char code Music_Same[]={0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x66, 0x18,0x03, 0x17,0x02, 0x15,0x02, 0x16,0x01, 0x15,0x02, 0x10,0x02, 0x15,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x02, 0x18,0x66, 0x17,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x16,0x00, 0x17,0x01, 0x19,0x02, 0x1B,0x02, 0x1B,0x70, 0x1A,0x03, 0x1A,0x01, 0x19,0x02, 0x19,0x03, 0x1A,0x03, 0x1B,0x02, 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x18,0x66, 0x18,0x03, 0x19,0x02, 0x1A,0x02, 0x19,0x0C, 0x18,0x0D, 0x17,0x03, 0x16,0x01, 0x11,0x02, 0x11,0x03, 0x10,0x03, 0x0F,0x0C,0x19,0x03, 0x1A,0x01, 0x1B,0x02, 0x1B,0x03, 0x1B,0x03, 0x1B,0x0C, 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x1F,0x01, 0x1A,0x01, 0x18,0x66, 0x19,0x03, 0x1A,0x01, 0x10,0x02, 0x10,0x03, 0x10,0x03, 0x1A,0x0C, 0x18,0x0D, 0x17,0x03, 0x16,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x70, 0x18,0x03, 0x17,0x02, 0x15,0x03, 0x15,0x03, 0x16,0x66, 0x16,0x03, 0x16,0x02, 0x16,0x03, 0x15,0x03, 0x10,0x02, 0x10,0x01, 0x11,0x01, 0x11,0x66, 0x10,0x03, 0x0F,0x0C, 0x1A,0x02, 0x19,0x02, 0x16,0x03, 0x16,0x03, 0x18,0x66, 0x18,0x03, 0x18,0x02, 0x17,0x03, 0x16,0x03, 0x19,0x00, 0x00,0x00 };// 两只蝴蝶unsigned char code Music_Two[] ={0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x15,0x03, 0x16,0x01, 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x01, 0x19,0x03, 0x1A,0x03, 0x19,0x03, 0x17,0x01, 0x16,0x03, 0x16,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0D, 0x15,0x00, 0x19,0x03, 0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03, 0x1B,0x03, 0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03, 0x16,0x0D, 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1A,0x02, 0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03, 0x19,0x02, 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, 0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, 0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03, 0x17,0x0D, 0x16,0x03, 0x17,0x03, 0x19,0x01, 0x19,0x03, 0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03, 0x1B,0x03, 0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03, 0x16,0x03, 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1A,0x02, 0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03, 0x19,0x03, 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, 0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,课程设计课程设计名称:单片机课程设计专业班级电科0901 学生姓名:学号:200948360118指导教师:课程设计时间:2012-9-20〜2012-9-28电子信息科学与技术专业课程设计任务书说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页一设计任务及要求利用单片机定时器完成控制音乐的频率,每个音调响的时长,来达到播放出音乐。

基于51单片机的多用户对讲门铃设计

基于51单片机的多用户对讲门铃设计

基于51单片机的多用户对讲门铃设计摘要:本文主要介绍基于51单片机的多用户对讲门铃的设计,该门铃具有多用户功能,可以支持多个室内和室外电话互相通话和拍照。

文章详细介绍了门铃系统的硬件设计和软件设计,给出了具体实现方案,并进行了系统测试。

结果表明,该门铃系统性能稳定,可靠性高,具有良好的用户体验和可扩展性。

关键词:51单片机,多用户,对讲门铃,硬件设计,软件设计,实现方案Abstract:This paper mainly introduces the design of a multi-user intercom doorbell based on 51 single-chip microcomputer. The doorbell has multi-user function, which can support multiple indoor and outdoor phones to communicate with each other and take photos. The article introduces the hardware and software design of the doorbell system in detail, provides a specific implementation plan, and conducts system testing. The results show that the doorbell system has stable performance, high reliability, good user experience, and scalability.Keywords: 51 single-chip microcomputer, multiple users, intercom doorbell, hardware design, software design, implementation plan一、问题背景和意义随着人们生活水平的提高,门铃不再是简单的开关,而变成了一个功能更为强大的设备。

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

单片机原理及接口技术课程设计报告题目:基于51单片机三首歌音乐门铃设计学院: 物理与信息工程学院专业: 09通信工程学号:姓名:指导老师:完成日期: 2012年5月18日一、设计功能要求传统的电子音乐门铃通常采用分立元件或专用的音乐IC制作。

本次设计用一个用STC89C52RC单片机设计的电子音乐门铃,仅需STC89C52RC单片机最小系统再加一片LM386做音频小功放驱动扬声器发声。

客人来访时,按一下按钮,门铃就会奏出优美的电子音乐声;再按一下,门铃又会奏出下一首电子音乐声音.共可以奏出六首不同旋律的歌曲。

二、主要技术指标1、利用STC89C52单片机定时中断实现输出不同频率的方波,通过一个简单的驱动电路使扬声器发出音乐,并通过外中断T0控制音乐播放,每按一次T0播放一首不同的音乐,使其能够播放三首歌曲后又循环播放。

2、其电路是由:STC89C52单片机最小系统电路和一个由电阻和音频小功放组成的驱动电路及扬声器再加上控制音乐播放的外中断T0。

3、音乐是由音符组成,不同的音符是由相应频率的振动产生。

产生不同的音频需要有不同固定周期的脉冲信号。

要产生音频脉冲,只要算出某一音频的周期T(1/f) ,然后将此周期T除以2,即为半周期的时间。

我们利用单片机的内部定时器TO,使其工作在计数器模式MODEl下.初始化适当的计数值THO及TLO以计时这个半周期时间。

每当计时时间到后就将输出脉冲的P1.0口反相。

然后重复计时此半周期时间,再对P1.0口反相,就可在单片机Pl.0引脚上得到此频率的脉冲。

P1.0引脚脉冲接LM386作音频功放,然后辅出到扬声器,从而发出美妙的乐音。

例如设单片机晶振为12MHz,每计数一次用时1µs。

我们要产生f低音DO,其频率为392Hz,周期T=1/392=2551µs,半周期时间为1276µs。

因此计数器应每计数1276次时将P1.0口反相,即计数初值应设定为(THxTLx)=一1276=64260,就可得到低音D0。

P3.5口作为控制门铃的按钮,每按一次,产生的电子乐音就改变一次,按完3次,再重复循环。

3首歌曲分别为《爱情买卖》、《生日快乐》、《不倒翁》。

三、设计方案电路仍以STC89C52为主要控制芯片,采用单片机最小系统和外围驱动电路推动扬声器发出声音,此电路更为简单,程序不复杂,通过外中断T0控制音乐的播放,并且三首歌曲能够循环播放。

音乐声音稳定、清晰。

减少了外围电路原件,节约了成本,电路基本框图如图1所示。

图1 方案方框图四、主要元器件功能介绍1、STC89C52RC芯片STC89C52RC有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,STC89C52RC可以按照常规方法进行编程,也可以在线编程。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

▲芯片封装与引脚功能▲主要功能特性:· 兼容MCS51指令系统· 8k可反复擦写(>1000次)Flash ROM· 32个双向I/O口· 256x8bit内部RAM· 3个16位可编程定时/计数器中断· 时钟频率0-24MHz· 2个串行中断· 可编程UART串行通道· 2个外部中断源· 共6个中断源· 2个读写中断口线· 3级加密位· 低功耗空闲和掉电模式·软件设置睡眠和唤醒功能2、LM386音频功率放大器LM386是音频功率放大器,主要应用于低电压消费类产品。

为使外围元件最少,电压增益内置为20。

但在1脚和8脚之间增加一只外接电阻和电容,便可将电压增益调为任意值,直至 200。

输入端以地位参考,同时输出端被自动偏置到电源电压的一半,在6V电源电压下,它的静态功耗仅为24mW,使得LM386特别适用于电池供电的场合。

▲ LM386引脚图▲主要特性·静态功耗低,约为4mA,可用于电池供电。

·工作电压范围宽,4-12V or 5-18V。

·外围元件少。

·电压增益可调,20-200。

·低失真度。

LM386电源电压4--12V,音频功率0.5w。

LM386音响功放是由NSC制造的,它的电源电压范围非常宽,最高可使用到15V,消耗静态电流为4mA,当电源电压为12V时,在8欧姆的负载情况下,可提供几百mW的功率。

它的典型输入阻抗为50K。

五、系统硬件电路设计1、硬件电路设计图2 电路原理图系统以STC89C52RC单片机为核心,加上外围电源时钟电路、LM386功放电路及扬声器电路组成。

STC89C52RC是一种低功耗/低电压、高性能的8位单片机,内部除CPU外,还包括128字节RAM,4个8位并行I/O口,5个中断优先级,2层中断嵌套中断,2个16位可编程定时计数器,片内集成4K字节可改变程序Flash存储器,具有低功耗、速度快、程序擦写方便等优点,完全满足本系统设计需要。

系统通过P1.0连接功放电路从而驱动扬声器放出电子声乐,P3.5口连接门铃按键。

此电子音乐门铃的电路连接图如上图2所示。

六、系统软件设计1、软件设计软件的设计主要是对STC89C52RC单片机进行编程,音乐门铃的程序主要是对音符频率的转换,采用定时中断,延时等实现其设计指标,通过外中断T0控制音乐的播放。

程序框图如图3。

图3 程序框图首先建立音乐,把音乐的音符找出,建立各个音符的定时常数T值表,如表1所示。

编写程序时我们把T值表按顺序建立在“TABLE”。

每个发音符使用1个字节,字节的高4位(简谱码)代表音符的高低,低4位(节拍码)代表音符的节拍。

如果l拍为0.4s,1/4拍就是0.1s,只要设定延迟时间就可求得节拍的时间。

假设1/4拍为1DELAY,则1拍应为4 DELAY,以此类推。

所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数。

1/4拍的延时时间在此我们设为125ms,节拍码如表2所示。

音符节拍码编程时放在程序的最后面“SONGx”处。

T值表按顺序建立在“TABLE”如下:table:dw 64260,64400,64524,64580dw 64684,64777,64820,64898dw 64968,65030,65058,65110dw 65157,65178,65217三首歌曲简码节拍码编写如下:song: ;第1首歌《爱情买卖》db 42h,44h,22h,14h,24h,44h,42h,52h,64h,04hdb52h,54h,42h,54h,52h,82h,82h,62h,62h,52h,64h,42h,44h,22h,14h,84h,62h,52h, 62h,52h,44h,52h,54h,42h,52h,54h,62hdb52h,42h,22h,52h,44h,42h,44h,22h,14h,24h,42h,44h,52h,64h,52h,54h,42h,54h, 52h,82h,82h,62h,62h,52h,64hdb42h,42h,42h,22h,14h,84h,62h,52h,62h,52h,48h,52h,54h,42h,52h,54h,62h,52h, 42h,22h,52h,48h,62h,84h,82h,84h,82hdb92h,82h,62h,52h,48h,92h,0b2h,92h,82h,62h,52h,42h,22h,54h,52h,62,62h,54h, 62h,84h,82h,84h,84h,92h,82h,62h,52h,44h,02h,22h,42h,22h,12h,54h,64h,44h, 04hdb 00hsong1: ;第2首歌《生日快乐》db 44h,54h,64h,44hdb 44h,54h,64h,44hdb 64h,74h,88hdb 64h,74h,88hdb 82h,92h,82h,72h,64h,44hdb 82h,92h,82h,72h,64h,44hdb 44h,84h,48hdb 44h,14h,48hdb 00hsong2: ;第3首歌《不倒翁》db 62h,82h,82h,62h,98hdb 92h,0b2h,0b2h,82h,98hdb 62h,82h,82h,52h,68hdb 92h,0b2h,0b2h,82h,98hdb 62h,82h,82h,62h,92h,92h,94hdb 92h,0b2h,0b2h,92h,84h,94hdb 0b8h,0b4h,04hdb 00h七、调试及性能分析:1、硬件调试2、软件调试调试步骤和方法:在WAVE平台上进行单片机系统程序设计、编辑、编译、调试,最后生成目标代码文件(*.hex)。

启动单片机,将生成的目标代码文件下载到单片机中去。

下载完成后按下T0,这时通过扬声器我们可以听到有音乐播放,再按一次T0可以听到单片机所播放的音乐换成了不同的歌曲。

当播放了三首不同的歌曲后,继续按下T0,单片机又开始播放第一首歌曲。

调试过程出现问题分析歌曲听起来比较模糊不清晰,主要是设置延时不当,在源程序适当调节节拍延时重新编译下载,可解决问题。

歌曲没有间断,一直唱不停,主要是每首歌完后未加上能够识别歌曲已唱完的不发音标志“ 00h”3、性能分析参考文献[1]段晨东编著 .单片机原理及接口技术.北京:清华大学出版社 , 2008[2] 范风强编著.单片机语言C51应用实战集锦.北京:电子工业出版社,2003[3]陈家俊,郑滔编著.程序设计教程.北京:机械工业出版社,2004附件:org 00h ;主程序起始地址jmp start ;跳动主程序org 0bh ;timer0中断起始地址jmp tim0 ;跳至timer0在mode1start: MOV tmod,#00000001b ;设timer0在mode1MOV ie,#10000010b ;中断使能jb p3.5,$ ;第一次按to?call delay1 ;消除抖动jnb p3.5,$ ;to放开?MOV 31h,#00 ;按to次数计数指针初值为00h start0:MOV 30h,# song ;取简谱码指针(第1首)next: MOV a,30hMOV dptr,#tableMOVc a,@a+dptr ;至相关页码,高4位为音符的高低 MOV r2,a ;低4位为音符的节拍jz end0 ;检查简谱码是否已结束(有无00?) anl a,#0fh ;取节拍(低4位)MOV r5,a ;存入r5,节拍的时间MOV a,r2swap aanl a,#0fh ;取音频值(高4位)jnz sing ;是否为0,是0则不发音clr tr0jmp d1sing: dec a ;因0不列入MOV 22h,a ;存入(22h)rl a ;乘2MOV dptr,#tableMOVc a,@a+dptr ;至table取码,取t的值MOV th0,a ;取到的高位字节存入th0MOV 21h,a ;取到的高位字节存入(21h)MOV a,22h ;再载入取到的音符码rl a ;乘2inc a ;加1MOVc a,@a+dptr ;至table取相对的低位字节计数值 MOV tl0,a ;取到的低位字节存入tl0MOV 20h,a ;取到的低位字节存入(20h)setb tr0 ;启动timer0d1: call delayinc 30h ;取简谱码指针加1jmp nextend0: clr tr0 ;停止计数器MOV a,31h ;载入计次指针xrl a,#00h ;是否按第1次?jnz end1 ;不是则跳至end1jb p3.5,$ ;按第2次?call delay1 ;消除抖动jnb p3.5,$ ;放开否?inc 31h ;计次地址(31h)加1MOV 30h,#song1 ;第2首歌指针jmp nextend1:MOV a,31h ;载入计次指针xrl a,#01h ;是否按第2次?jnz end2 ;不是则跳至end2jb p3.5,$ ;按第3次?call delay1 ;消除抖动jnb p3.5,$ ;放开否?inc 31h ;计次地址(31h)加1MOV 30h,# song2 ;第3首歌指针jmp nextend2:jmp start ;回到第1次位置tim0: push acc ;将a的值暂存于堆栈push psw ;将psw的值暂存于堆栈setb rs0 ;设工作寄存器库1,rs0=1,rs1=0 clr rs1MOV tl0,20h ;重设计数值MOV th0,21hcpl p1.1 ;将p11位反相pop psw ;至堆栈取回psw的值pop acc ;至堆栈取回a的值reti ;返回主程序delay: MOV r7,#02 ;125秒d2: MOV r4,#125d3: MOV r3,#248djnz r3,$djnz r4,d3djnz r7,d2djnz r5,delay ;决定节拍retdelay1: MOV r4,#20d4: MOV r3,#248djnz r3,$djnz r4,d4retorg 300htable:dw 64260,64400,64524,64580dw 64684,64777,64820,64898dw 64968,65030,65058,65110dw 65157,65178,65217song: ;第一首歌db 42h,44h,22h,14h,24h,44h,42h,52h,64h,04hdb52h,54h,42h,54h,52h,82h,82h,62h,62h,52h,64h,42h,44h,22h,14h,84h,62h,52h,62h,52h ,44h,52h,54h,42h,52h,54h,62hdb52h,42h,22h,52h,44h,42h,44h,22h,14h,24h,42h,44h,52h,64h,52h,54h,42h,54h,52h,82h ,82h,62h,62h,52h,64hdb42h,42h,42h,22h,14h,84h,62h,52h,62h,52h,48h,52h,54h,42h,52h,54h,62h,52h,42h,22h ,52h,48h,62h,84h,82h,84h,82hdb92h,82h,62h,52h,48h,92h,0b2h,92h,82h,62h,52h,42h,22h,54h,52h,62h,62h,54h,62h,84 h,82h,84h,84h,92h,82h,62h,52h,44h,02h,22h,42h,22h,12h,54h,64h,44h,04hdb 00hsong1: ;第2首歌;1db 44h,54h,64h,44hdb 44h,54h,64h,44hdb 64h,74h,88hdb 64h,74h,88h;2db 82h,92h,82h,72h,64h,44hdb 82h,92h,82h,72h,64h,44hdb 44h,84h,48hdb 44h,14h,48hdb 00hsong2: ;第3首歌db 62h,82h,82h,62h,98hdb 92h,0b2h,0b2h,82h,98hdb 62h,82h,82h,52h,68hdb 92h,0b2h,0b2h,82h,98h;2db 62h,82h,82h,62h,92h,92h,94h db 92h,0b2h,0b2h,92h,84h,94h db 0b8h,0b4h,04hdb 00hend。

相关文档
最新文档