当前位置:文档之家› 音乐门铃

音乐门铃

时间:周四上午 3,4,5,6节组号:2创新性实验报告题目音乐门铃设计学院电子信息学院专业电子信息工程班级08041816,08041818学号08041406,08041430学生姓名钟婷,吴登榜指导教师刘公致完成日期2010年12月摘要AT89C2051是由ATMEL公司推出的一种小型单片机。

95年出现在中国市场。

其主要特点为采用Flash存贮器技术,降低了制造成本,其软件、硬件与MCS-51完全兼容,可以很快被广大用户接受,其程序的电可擦写特性,使得开发与试验比较容易。

我们采用51单片机开发板来完成制作,软硬件相互结合,实现播放音乐功能的电子门铃,并且外加显示屏显示欢迎信息,目的是让在等待在门口的人感受音乐和享有愉悦的心情,减少等待的焦躁。

选择AT89C2051单片机,通过T0定时中断,并配合P1.5引脚输出音频频率;P1.5接扬声器;通过P3.7引脚接入“播放音乐”按键,以中断方式接入。

P0口接LCD显示文字。

关键词:单片机,电子门铃,定时器,蜂鸣器, LCD液晶显示器(1602)目录1.引言 (4)2.系统总体设计 (5)3.硬件电路设计 (6)3.1 LCD显示模块电路 (6)3.2 蜂鸣器电路模块 (7)4. 程序流程图 (8)5.制作与调试 (10)5.1硬件电路的布线 (10)5.2程序调试中遇到的问题及解决方法 (10)6.结论与建议 (11)7.参考文献 (12)8附录 (13)附录1: 实物照片 (13)附录2:软件编译和proteus仿真图................................14-15 附录3: 原理图 (16)附录4: 源程序 (16)1 引言随着时代的前进和发展,控制智能化、仪器小型化、功耗微小化得到广泛关注。

在这些领域中,单片机起到了举足轻重的作用,这就把单片机的应用提升到重要的地位,单片机应用系统设计就成为新的技术热点。

近几年来,随着市场上智能化楼宇的不断升温,门铃系统已作为智能化办公室和智能化住宅小区的一个重要组成部分,被各商家和用户所接受。

人们已开始习惯用门铃系统代替传统的铁钥匙去管理各通道门,这使门铃系统得到了飞跃性的发展。

随着单片机技术的飞速发展,通过单片机实现人们对物质生活的满足,这将会日益成为今后的一个重要发展的方向。

2系统总体设计音乐门铃的硬件电路由6个部分组成:单片机、时钟与复位电路、选择按键输入电路、音频发生器,扬声器。

音乐门铃的硬件电路设计框图如下。

图1 系统框图时钟与复位电路选择按键输入电路单 片 机扬声器音频发生器液晶显示屏3 硬件电路设计3.1 LCD显示模块电路这里VCC=3.3V,因为我们用的是自己的52单片机,在其内部通过P2.6与LCD(1602)的RS连接,P2.5与RW,P2.7与E相连接。

不需要我们通过杜邦线再连接了。

P0[0:7]需要加上拉电阻Ri=10K拉高。

我们只需要通过调节VO来控制LCD的亮度即调节与VO相连接的滑动变阻器来实现。

3.2 蜂鸣器电路模块我们的AT89S52单片机内部由P1.5与蜂鸣器相连接,只需要将P1.5拉高,即可使蜂鸣器发出声音。

为了保护蜂鸣器,再与VCC相连使加上一个上拉电阻去报蜂鸣器不会被烧坏。

4.程序流程图图3 主程序流程图通过液晶显示屏上电显示“HELLO! WELCOME TO MY HOME ”,如果有门铃按键的信号输入,启动定时器,产生一定频率的脉冲,驱动蜂鸣器发音,放出乐曲。

对按键的次数计数,根据按键的次数选择播放的音乐,程序里预设了6首音乐可供循环播放。

开始液晶屏示欢迎语是播放音乐否是否有门铃 按键信号?初始化LCD 接口初始化定时器否第一首歌曲地址取节拍(低四位)取音频(高四位)简谱码是否结束?是否是否有门按键?开定时器蜂鸣器发音取下一个简码地址关定时器是否音频是否为零?是执行中断程序,产生脉冲图4:音乐播放程序流程图5 制作与调试一、硬件电路的布线由于我们是二人一组,硬件上的设计相对简单。

本来打算使用LM386组成音频放大电路,提高音乐的播放质量,后简化为直接由蜂鸣器输出。

硬件电路由单片机,键盘, lcd1602液晶显示屏,蜂鸣器组成,用杜邦线连接相应的接口。

二、程序调试中遇到的问题及解决方法1.有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发现是因为程序中有的指令书写得不规范导致的2.程序中的跳转指令的运用很重要,为保险起见,都用LJMP,我们就遇到过跳转指令用错程序无法正常运行的现象。

如果指令的跳转范围比较少,这时要用一个标号中转。

不然编译通不过。

3.编程时要注意,在程序开始时,要写入各定时器中断的入口地址。

编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。

4.程序的结构要设计的合理,避免上下乱调用的现象,这样会使程序更加清晰化。

5.在实现LCD显示功能时遇到很多问题,比如完全没显示或者显示不完全,这是因为程序中有时使用相同的寄存器,而寄存器中的数据没有得到好的清零处理。

另外就是显示太模糊,要很费劲才看得清楚。

6 结论及建议作为电子信息工程专业的大三学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。

在已度过的大学时间里,我们大多数接触的是专业课。

我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力呢,如何把我们所学的专业基础课理论知识运用到实践中去呢,创新性实验的开设就提供了这样一个平台,希望学校能为我们这些大学生提供更多的能让我们自己动手与理论结合的实践平台。

在做本次课程设计的过程中,我们感触最深的当属查阅大量的设计资料了。

一开始我们只想设计一个简单的音乐门铃的方案。

但是后来发现简单的功能实现起来也不是那么容易的。

同时为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。

我们不是艺术家,不可以抛开实际尽情在幻想的世界里翱翔,一切都要有据可依,有理可寻。

软硬件的结合相当重要。

另一方面,团队合作相当的重要,假如组员相互不沟通不讨论,制作就没有办法完成。

每个人都有自己的长处和短处,学会扬长避短,相互宽容,理解才能合作愉快。

最后,通过我们不懈的努力与老师的指导,终于完成了我们的设计及制作。

当然,我们的功能还不是很完善,有待改进。

希望通过以后的学习能够制作出更好的作品。

参考文献[1] 曹建树,夏云生,曾林春.51单片机实用教程. 中国石化出版社[2] 白延敏.51单片机典型系统开发实例精讲电子工业出版社[3] 高惠芳单片机原理与应用技术科学出版社[4] 韩志军单片机系统设计与应用实例第二版机械工业出版社[5] 楼顺天周佳社微机原理与接口技术科学出版社附录附录1: 实物照片附录2:软件编译和proteus仿真图keil编译图proteus仿真图附录3: 原理图附录4: 源程序;*************接口定义*************** BUZZER EQU P1.5KEY EQU P3.7RS EQU P2.6 ;液晶接口的定义RW EQU P2.5E EQU P2.7;**************************************ORG 0000H ;主程序起始地址JMP MAIN ;跳动主程序ORG 000BH ;TIMER0中断起始地址JMP TIM0 ;跳至TIMER0在MODE1 ;************显示主程序****************ORG 1000HMAIN: ;液晶初始化MOV SP,#70H ;设置堆栈MOV P0,#01H ;清屏LCALL ENABLEMOV P0,#38H ;8位,2行显示LCALL ENABLEMOV P0,#0FH ;显示开关控制(屏显on,光标on,闪烁on)LCALL ENABLEMOV P0,#06H ;计数地址加1,显示幕onLCALL ENABLEMOV P0,#80H ;第一行的开始位置LCALL ENABLEMOV DPTR,#TABLE1 ;显示LCALL WRITE1 ;到TABLE1取码?MOV P0,#0C0H ;第二行的位置LCALL ENABLEMOV DPTR,#TABLE2 ;显示LCALL WRITE1 ;到TABLE2 取码MOV P0,#0C2H ;光标定位0C0HCALL ENABLE;*******************音乐主程序******************START0:MOV TMOD,#01H ;定时器0,工作方式1MOV IE,#82H ;中断使能JB KEY,$ ;第一次按KEY?CALL DELAY1 ;消除抖动JNB KEY,$ ;KEY放开?MOV 31H,#00H ;按KEY次数计数指针初值为00HMOV DPTR,#0000HSTART1: MOV 30H,#LOW 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,R2SW AP AANL A,#0FH ;取音频值(高4位)JNZ SING ;是否为0,是0则不发音CLR TR0JMP D1SING: DEC AMOV 22H,A ;存入(22H)RL A ;乘2MOV DPTR,#TABLEMOVC A,@A+DPTR ;至TABLE取码,取T的值MOV TH0,A ;取到的高位字节存入TH0MOV 21H,A ;取到的高位字节存入(21H)MOV A,22H ;再载入取到的音符码RL AINC AMOVC 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 KEY,$ ;按第2次?CALL DELAY1 ;消除抖动JNB KEY,$ ;放开否?INC 31H ;计次地址(31H)加1MOV 30H,#LOW SONG1 ;第2首歌指针JMP NEXTEND1:MOV A,31H ;载入计次指针XRL A,#01H ;是否按第2次?JNZ END2 ;不是则跳至END2JB KEY,$ ;按第3次?CALL DELAY1 ;消除抖动JNB KEY,$ ;放开否?INC 31H ;计次地址(31H)加1MOV 30H,#LOW SONG2 ;第3首歌指针JMP NEXTEND2:MOV A,31H ;载入计次指针XRL A,#02H ;是否按第3次?JNZ END3 ;不是则跳至END3JB KEY,$ ;按第4次?CALL DELAY1 ;消除抖动JNB KEY,$ ;放开否?INC 31H ;计次地址(31H)加1MOV 30H,#LOW SONG3 ;第4首歌指针JMP NEXTEND3:MOV A,31H ;载入计次指针XRL A,#03H ;是否按第4次?JNZ END4 ;不是则跳至END4JB KEY,$ ;按第5次?CALL DELAY1 ;消除抖动JNB KEY,$ ;放开否?INC 31H ;计次地址(31H)加1MOV 30H,#LOW SONG4 ;第5首歌指针JMP NEXTEND4:MOV A,31H ;载入计次指针XRL A,#01H ;是否按第5次?JNZ END5 ;不是则跳至END2JB KEY,$ ;按第6次?CALL DELAY1 ;消除抖动JNB KEY,$ ;放开否?INC 31H ;计次地址(31H)加1MOV 30H,#LOW SONG5 ;第6首歌指针JMP NEXTEND5:JMP START0 ;回到第1次位置TIM0: PUSH ACC ;暂存A的值PUSH PSW ; 暂存P SW的值SETB RS0 ;设工作寄存器库1,RS0=1,RS1=0CLR RS1MOV TL0,20H ;重设计数值MOV TH0,21HCPL BUZZER ;将P10位反相CLR RS0POP 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: ;第一首歌哈巴狗;1DB 42H,42H,42H,52H,62H,04HDB 62H,62H,62H,72H,84H,04HDB 92H,92H,82H,72H,64H,04HDB 82H,82H,52H,62H,44H,04H;2DB 42H,42H,42H,52H,62H,04HDB 62H,62H,62H,72H,84H,04HDB 92H,92H,82H,72H,64H,04HDB 82H,82H,52H,62H,44H,04HDB 00HSONG1: ;第2首歌生日快乐;1DB 82H,01H,81H,94H,84HDB 0B4H,0A4H,04HDB 82H,01H,81H,94H,84HDB 0C4H,0B4H,04H;2DB 82H,01H,81H,0F4H,0D4HDB 0B4H,0A4H,94HDB 0E2H,01H,0E1H,0D4H,0B4HDB 0C4H,0B4H,04HDB 00HSONG2: ;第3首歌不倒翁;1DB 84H,94H,88HDB 64H,54H,68HDB 84H,64H,54H,44HDB 52H,42H,52H,62H,48H;2DB 84H,94H,88HDB 64H,54H,68HDB 84H,64H,54H,44HDB 52H,42H,52H,62H,48HDB 00HSONG3: ;第4首歌妹妹背着洋娃娃;1DB 84H,02H,82H,64H,54HDB 64H,54H,48HDB 64H,02H,52H,44H,24HDB 14H,24H,18H;2DB 24H,02H,22H,42H,24HDB 44H,54H,68HDB 54H,02H,52H,84H,84HDB 54H,64H,48HDB 00HSONG4: ;第5首歌两只老虎;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,48H,00HSONG5: ;第6首歌三只小猫;1DB 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,94HDB 92H,0B2H,0B2H,92H,84H,94HDB 0B8H,0B4H,04H21DB 00H;*****************显示子程序************* ENABLE:CLR RS ;送命令CLR RWCLR ECALL DELAY0SETB ERETWRITE1: MOV R1,#00H ;显示TABLE1,2中的值A1: MOV A,R1;到TABLE1,2取码MOVC A,@A+DPTRCALL WRITE2 ;显示到LCDINC R1CJNE A,#00H,A1 ;是否到00HRETWRITE2: MOV P0,A ;显示SETB RSCLR RWCLR ECALL DELAY0SETB ERETDELAY0: MOV R6,#05D0:MOV R7,#0FFHDJNZ R7,$DJNZ R6,D0RETTABLE1: DB"WELCOME TO ",00HTABLE2: DB"MY HOME ",00HEND22。

相关主题