基于单片机的电子音乐门铃设计 题目:电子音乐门铃设计 学院: 专业: 班级: 学号: 姓名: 时间: 目 录 一、设计目的 二、设计任务 三、设计要求 四、设计步骤(流程) 五、设计原理 六、设计内容 6.1硬件设计 6.2单片机引脚说明 6.3主要电路设计 6.3.1时钟电路 6.3.2复位电路 6.3.3功率放大电路 6.4软件设计 6.4.1音乐符设计 6.4.2程序设计 6.4.3程序流程图 6.4.4仿真界面图 6.5.5编程 七、设计小结 参考文献 一、设计目的: 1、动手焊接单片机硬件电路板,增进对单片机的感性认识,加深对单片机理论方面的理解。 2、了解单片机的内部功能模块的应用。 3、了解和掌握单片机应用系统的硬件设计和制作过程、方法及实现。 二、设计任务: 1、了解单片机的组成结构,设计相关电路原理图; 2、根据原理图焊接硬件电路。 3、实现所要求的功能。 三、设计要求: 1、要求理解单片机的组成结构; 2、根据给出的主要芯片,设计相关电路原理图; 3、焊接电路板,检测并调试。 四、设计步骤(流程): 1、根据电子音乐门铃原理设计相关电路图; 2、焊接电路板; 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)= 六、设计内容: 传统的电子音乐门铃通常采用分立元件或专用的音乐IC制作。本文介绍一个用AT89C51单片机设计的电子音乐门铃,仅需AT89C51单片机最小系统再加一片LM386做音频小功放驱动扬声器发声。客人来访时,按一下按钮,门铃就会奏出优美的电子音乐声;再按一下,门铃又会奏出下一首电子音乐声音.共可以奏出六首不同旋律的歌曲。 6、1硬件设计 电子音乐门铃设计系统以AT89C51单片机为核心加上外围电源时钟电路、LM386功放电路及扬声器电路组成。ATMEL公司生产的AT89C51单片机是一种低功耗且电压性能高的8位单片机,内部除CPU外,还包括128字节RAM,4个8位并行I/O口,5个中断优先级,2层中断嵌套,2个16位可编程计数器,片内集成4k字节可改变程序FLASH,具有低功耗、速度快、程序擦写方便等优点,完全满足本系统设计需要,系统通过P1.0连接功放电路从而驱动扬声器产生电子乐声,P3.5口接门铃按键。 电子音乐门铃的电路连接图如下图1所
6.2单片机引脚说明 AT89C51单片机是标准的40引脚双列直插式集成电路芯片,引脚分布可如下图2所示: 图2 AT89C51单片机引脚分布图
P1.0~P1.7 P1口8位双向线(在引脚的1~8号端子); P2.0~P2.7 P2口8位双向线(在引脚的21~28号端子); P3.0~P3.7 P3口8位双向线(在引脚的10~17号端子)。 1)P0口有三个功能: 外部扩展存储器时,当作数据总线(如图中的D0~D7为数据总线接口) 外部扩展存储器时,当作地址总线(如图中的A0~A7为地址总线接口) 不扩展时,可作一般的I/O口使用,但内部无上拉电阻,作为输入输出时应在外部接上拉电阻。 2)P1口功能 P1口只作I/O口使用,其内部有上拉电阻。 3)P2口功能 扩展外部存储器时,当作地址总线使用; 作一般I/O口使用,其内部有上拉电阻。 4)P3口功能 除了作为I/O口使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置。 当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源,所以如果P0口作为输入时,或处在高阻抗状态,只有外接一个上拉电阻才能有效。 5)ALE/PROG地址锁存控制信号 在系统扩展时,ALE用于控制把P0口的输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。 PROG为编程脉冲的输入端,在AT89C51单片机内部有一个4kB的程序存储器(ROM),ROM的作用就是用来存放用户需要执行的程序。我们如何把编写好的程序存入这个ROM中的呢?实际上是通过编程脉冲输入采能写进去,而这个脉冲的输入端口就是PROG。 6)PSEN外部程序存储器读选通信号 在读外部ROM时PSEN低电平有效,以实现外部ROM单元的读操作: 内部ROM读取时,PSEN不动作; 外部ROM读取时,在每个机器周期会动作两次; 外部RAM读取时,两个PSEN脉冲被跳过不会输出; 外接ROM时,与ROM的OE脚相接。 7)EA/VPP访问程序存储器控制信号 接高电平时:CPU读取内部程序存储器(ROM) 接低电平时:CPU读取外部程序存储器(ROM)。8031单片机内部是没有ROM的,因此在应用8031单片机时,这个脚时一直接低电平的。 8)RST复位信号 当输入的信号连续2个机器周期以上高电平时即为有效,用以完成单片机的复位初始化操作,当复位后程序计数器PC=0000H,即复位后将从程序存储器的0000H单元读取第一条指令码。 9)XTAL1和XTAL2 外接晶振引脚。当使用芯片内部时钟时,此二引脚用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。 10)VCC 电源+5V输入 11)GND 接地 6.3主要电路设计 AT89C51是片内有ROM/EPROM的单片机,因此,这种芯片构成的系统简单、可靠。本设计利用单片机芯片构成应用系统时,主要是将单片机街上时钟电路和复位电路。其应用特点: ◆有可供用户使用的大量I/O线 ◆内部存储器容量有限 ◆应用系统开发具有特殊性 6.3.1时钟电路 AT89C51虽然有内部振荡电路,但要形成时钟,必须外部附加电路。AT89C51单片机的时钟产生方法有两种:内部时钟方式和外部时钟方式。 本设计采用最常用的内部时钟方式,即用外接晶体和电容组成的并联谐振回路。震荡晶体可在1.2MHZ到12MHZ之间选择。电容值无严格要求,单电容取值对振荡频率输出的稳定性、大小、振荡电路起振速度有少许影响,CX1、CX2可在20pF到100pF之间取值,但在60pF到70pF时振荡器有较高的频率稳定性。所以本设计中,震荡晶体频率选择12MHZ,电容选择20pF。 在设计印刷电路板时,晶体和电容应尽可能靠近单片机芯片安装,以减少寄生电容,更好的保证振荡器稳定和可靠工作。 6.3.2复位电路 AT89C51的复位是由外部的复位电路来实现的。复位引脚RST通过一个施密特触发器来抑制噪声。在每个机器周期的S5P2,施密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。 复位电路通常采用上电自动复位和按钮复位两种方式。 最简单的上电自动复位电路中上电自动复位是通过外部复位电路的电容充电来实现的。只要VCC的上升时间不超过1ms,就可以实现自动上电复位。时钟频率采用12MHZ时C取10μF,R取1kΩ。本设计就是用上电复位。 复位时,ALE和PSEN成输入状态,片内RAM不受复位影响;复位后,PC指向0000H,单片机从起始地址0000H开始执行程序。所以单片机运行出错或进入死循环,可按复位键重新启动。在次单片机中,没有完全使用这些默认值,而是通过在程序中对单片机进行初始化。 复位电路采用的是简单的上电复位电路,此电路要求要保证在RESET引脚上提供10毫秒以上稳定的高电压。这种上电复位利用电容器充电来实现。当加电时,电容C充电,电路有电路流过,构成回路,在电阻R上产生压降,RESET引脚为高电平;当电容C充满电后,电路相当于断开,RESET的电位与地相同,复位结束。复位时间与充电的时间有关,充电时间越长复位时间越长,增大电容或增大电阻都可以增加复位时间。 6.3.3功率放大电路 LM386是音频功率放大器。输入端以地位参考,同时输出端以地位参考,被自动偏置到电源电压的一半,在5V电源电压下,它的静态功耗仅为24mW,使得LM386特别适用于电池供电的场合。本实验采用LM386的封装形式8引线双列直插式。 6.4软件设计 6.4.1音乐符设计 首先建立音乐,把音乐的音符找出。建立各个音符的定时常数T值表,编写程序时我们把T值表按顺序建立在“TABLE”栏。每个发音符使用一个字节,字节的位(简谱码)代表音符的节拍。如果1拍为0.4秒,4分之一秒就是0.4秒。只要设定延时时间就求得节拍的时间。假设4分之一为1DELAY,则一拍应为4DELAY,依次类推。所以只要求出4分之一的DELAY时间。其余的节拍就是它的倍数。4分之一拍的延时在此我们设为125ms,节拍码如表: 表 1 音符对应的简谱码、频率、定时常数
表2 节拍码及节拍数
6.4.2程序设计: 本系统采用MCS-51汇编语言编程。软件程序由主程序、定时器TO中断服务程序和延时子程序组成。系统初始化后,系统扫描按键(P3.5口的电平)判断是否有键按下,有键按下时,根据按下键的次数,向音频字符码指针赋以不同歌曲的地址,通过定时器TO中断子程序使P1.0口输出相应频率的音频脉冲,以达到发声目的。主程序流程图如图3所示。 6.4.3程序流程图如下图3所示:
N
图3 程序流程图 6.4.4仿真界面图 仿真界面图如下图4: 图4 仿真界面 6.4.5编程如下: MAIN: ORG 00H ;主程序的起始地址 JMP START ;跳至主程序 ORG 0BH ;TIMER0中断起始地址 LJMP TIM0 ;跳至TIMER0中断子程序 START:MOV TMOD,#00000001B ;设TIMER0在MODE1 MOV IE,#10000010B ;中断使能 JB P3.4, $ ;第一次按T0? CALL DELAY1 ;消除抖动 JNB P3.4, $ ;T0放开? MOV 31H,#00 ;按T0计数指针初始值为00H START0: MOV 30H,#LOW SONG ;取简谱码指针(第1首) NEXT: MOV A,30H MOV DPTR,# TABLE MOVC A,@A+DPTR ;至相关页取码 MOV R2,A ;低4位为音符的节拍 JZ END0 ;检查简谱码是否已结束(有无00?) ANL A,#0FH ;取节拍(低4位) MOV R5,A ;存入R5节拍的时间 MOV A,R2 SWAP A ANL A,#0FH ;取音频值(高4位) JNZ SING ;是否为0,是0则不发音 CLR TR0 JMP D1 SING: DEC A ;因0不列入 MOV 22H,A ;存入(22H ) RL A ;乘2 MOV DPTR,#TABLE MOVC A,@A+DPTR ;至TABLE取码,取T的值 MOV TH0,A ;取到的高位字节才存入TH0 MOV 21H,A ;取到的高位字节存入(21H) MOV A,22H ;在载入取到的音符码 RL A ;乘2 INC A ;加1 MOVC A,@A+DPTR ;至TABLE取相对的低位字节计数值 MOV TL0,A ;取到的低位字节存入TL0 MOV 20H,A ;取到的低位字节存入(21H) SETB TR0 ;启动TIMER0 D1: CALL DELAY INC 30H ;取简谱码指针加1 JMP NEXT END0: CLR TR0 ;停止计数器 MOV A,31H ;载入计数器指针 XRL A,#00H ;是否按第1次 JNZ END1 ;不是则跳至END1 JB P3.4,$ ;按第2次? CALL DELAY1 ;消除抖动 JNB P3.4,$ ;放开否? INC 31H ;计次地址(31H)加1 MOV 30H,#LOW SONG1 ;第2首歌指针 JMP NEXT END1: MOV A,31H ;载入计数器指针 XRL A,#01H ;是否按第2次 JNZ END2 ;不是则跳至END2 JB P3.4,$ ;按第3次? CALL DELAY1 ;消除抖动 JNB P3.4,$ ;放开否? INC 31H ;计次地址(31H)加1 MOV 30H,#LOW SONG2 ;第3首歌指针 JMP NEXT END2: MOV A,31H ;载入计数器指针 XRL A,#02H ;是否按第3次 JNZ END3 ;不是则跳至END3 JB P3.4,$ ;按第4次? CALL DELAY1 ;消除抖动 JNB P3.4,$ ;放开否? INC 31H ;计次地址(31H)加1 MOV 30H,#LOW SONG3 ;第4首歌指针 JMP NEXT END3: MOV A,31H ;载入计数器指针 XRL A,#03H ;是否按第4次 JNZ END4 ;不是则跳至END4 JB P3.4,$ ;按第5次? CALL DELAY1 ;消除抖动 JNB P3.4,$ ;放开否? INC 31H ;计次地址(31H)加1 MOV 30H,#LOW SONG4 ;第5首歌指针 JMP NEXT END4: MOV A,31H ;载入计数器指针 XRL A,#04H ;是否按第5次 JNZ END5 ;不是则跳至END5 JB P3.4,$ ;按第6次? CALL DELAY1 ;消除抖动 JNB P3.4,$ ;放开否? INC 31H ;计次地址(31H)加1 MOV 30H,#LOW SONG5 ;第6首歌指针 JMP NEXT END5: JMP START ;回到第1次位置 TIM0: PUSH ACC ;将A的值暂存于堆栈 PUSH PSW ;将PSW的值暂存于堆栈 SETB RS0 ;设工作寄存器库1,RS0=1,RS1=0 CLR RS1 MOV TL0,20H ;重设计数值 MOV TH0,21H CPL P1.0 ;将P1.0位反相 POP PSW ;至堆栈取回PSW的值 POP ACC ;至堆栈取回A的值 RETI ;返回主程序 DELAY:MOV R7,#02 ;延时125毫秒 D2: MOV R4,#125 D3: MOV R3,#248 DJNZ R3,$ DJNZ R4,D3 DJNZ R7,D2 DJNZ R5,DELAY ;决定节拍 RET DELAY1:MOV R4,#20 D4: MOV R3,#248 DJNZ R3,$ DJNZ R4,D4 RET ORG 300H ;定时常数T值表 TABLE: DW 64260,64400,64524,64580 DW 64684,64777,64820,64898 DW 64968,65030,65058,65110 DW 65157,65178,65217 ;音符节拍码数据表 SONG: ;生日快乐 ;1 DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 82H,01H,81H,94H,84H DB 0C4H,0B4H,04H ;2 DB 82H,01H,81H,0F4H,0D4H DB 0B4H,0A4H,94H DB 0E2H,01H,0E1H,0D4H,0B4H DB 0C4H,0B4H,04H DB 00H SONG1: ;两只老虎 ;1 DB 44H,54H,64H,44H DB 44H,54H,64H,44H DB 64H,74H,88H DB 64H,74H,88H ;2 DB 82H,92H,82H,72H,64H,44H DB 82H,92H,82H,72H,64H,44H DB 44H,84H,48H DB 44H,14H,48H DB 00H SONG2: ;三只小猫 ;1 DB 62H,82H,82H,62H,98H DB 92H,0B2H,0B2H,82H,98H DB 62H,82H,82H,52H,68H DB 92H,0B2H,0B2H,82H,98H ;2 DB 62H,82H,82H,62H,92H,92H,94H DB 92H,0B2H,0B2H,92H,84H,94H DB 0B8H,0B4H,04H DB 00H SONG3: ;哈巴狗 ;1 DB 42H,42H,42H,52H,64H,04H DB 62H,62H,62H,72H,84H,04H DB 92H,92H,82H,72H,64H,04H DB 82H,82H,52H,62H,44H,04H ;2 DB 42H,42H,42H,52H,64H,04H DB 62H,62H,62H,72H,84H,04H DB 92H,92H,82H,72H,64H,04H DB 82H,82H,52H,62H,44H,04H DB 00H SONG4: ;不倒翁 ;1 DB 84H,94H,88H DB 64H,54H,68H DB 84H,64H,54H,44H DB 62H,82H,42H,62H,58H ;2 DB 84H,94H,88H DB 64H,54H,68H DB 84H,64H,54H,44H DB 52H,42H,52H,62H,48H DB 00H SONG5: ;妹妹背着洋娃娃 ;1 DB 84H,02H,82H,64H,54H DB 64H,54H,48H DB 64H,02H,52H,44H,24H DB 14H,24H,18H ;2 DB 24H,02H,22H,42H,24H DB 44H,54H,68H DB 54H,02H,52H,84H,84H DB 54H,64H,48H DB 00H END 七、设计小结: 通过3个星期的实习,我懂得了很多。学会了常用的单片机控制音乐门铃的用法。将所学到的理论知识应用于实际,使所学的知识得到进一步巩固,使这些知识得到提高,初步培养了单片机设计的独立设计,为今后的工作打下良好基础,树立正确的设计思路。 在这次设计过程中遇到很多问题,通过老师的指导和帮助,我们克服了这些困难解决了问题,提高了解决问题的能力。在这次设计中,我们要学会亲自去尝试,不要害怕失败。 这次实习,使我们有了团队合作,培养了我们的团队合作精神。通过团队相互讨论,很多问题都迎刃而解了。通过团队合作,使我们认识到:一个人的能力是有限的,只有相互合作,相互学习才能把事情做得更好。 最后,这次实习是我认识到:我们现在的知识还是薄弱,基础还不够扎实。今后我们要更加努力学习专业知识,只有扎扎实实打好基础,才能在社会的竞争中处于不败之地。今后我们要努力改正自己的不足,发扬自己的优点。 参考文献: 【1】 李珍.单片机原理与应用技术 [M] .北京:清华大学出版社, 2003年. 【2】 孙函芳.MCS-51/96单片机原理及应用[M] .北京: 北京航空航天大学出版社 , 1994年. 【3】 刘进峰 .电子制作实训[M] .湖北:中国劳动社会保障出版社 2006年 【4】 张靖武 .单片机原理、应用与PROTEUS仿真 [M] .北京:电子工业出版社 ,2007年. 【5】陈明莹 . 8051单片机课程设计实训教材 [M] .北京: 清华大学出版社 , 2003年. 【6】王昊等.通用电子元器件的选用与检测 [M] .北京:电子工业出版社,1996. 【7】张毅刚等.单片机原理与应用设计 [M] .北京:电子工业出版社,2005. 基于单片机的电子音乐门铃设计 题目:电子音乐门铃设计 学院: 专业: 班级: 学号: 姓名: 时间: 目 录 一、设计目的 二、设计任务 三、设计要求 四、设计步骤(流程) 五、设计原理 六、设计内容 6.1硬件设计 6.2单片机引脚说明 6.3主要电路设计 6.3.1时钟电路 6.3.2复位电路 6.3.3功率放大电路 6.4软件设计 6.4.1音乐符设计 6.4.2程序设计 6.4.3程序流程图 6.4.4仿真界面图 6.5.5编程 七、设计小结 参考文献 一、设计目的: 1、动手焊接单片机硬件电路板,增进对单片机的感性认识,加深对单片机理论方面的理解。 2、了解单片机的内部功能模块的应用。 3、了解和掌握单片机应用系统的硬件设计和制作过程、方法及实现。 二、设计任务: 1、了解单片机的组成结构,设计相关电路原理图; 2、根据原理图焊接硬件电路。 3、实现所要求的功能。 三、设计要求: 1、要求理解单片机的组成结构; 2、根据给出的主要芯片,设计相关电路原理图; 3、焊接电路板,检测并调试。 四、设计步骤(流程): 1、根据电子音乐门铃原理设计相关电路图; 2、焊接电路板; 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)= 六、设计内容: 传统的电子音乐门铃通常采用分立元件或专用的音乐IC制作。本文介绍一个用AT89C51单片机设计的电子音乐门铃,仅需AT89C51单片机最小系统再加一片LM386做音频小功放驱动扬声器发声。客人来访时,按一下按钮,门铃就会奏出优美的电子音乐声;再按一下,门铃又会奏出下一首电子音乐声音.共可以奏出六首不同旋律的歌曲。 6、1硬件设计 电子音乐门铃设计系统以AT89C51单片机为核心加上外围电源时钟电路、LM386功放电路及扬声器电路组成。ATMEL公司生产的AT89C51单片机是一种低功耗且电压性能高的8位单片机,内部除CPU外,还包括128字节RAM,4个8位并行I/O口,5个中断优先级,2层中断嵌套,2个16位可编程计数器,片内集成4k字节可改变程序FLASH,具有低功耗、速度快、程序擦写方便等优点,完全满足本系统设计需要,系统通过P1.0连接功放电路从而驱动扬声器产生电子乐声,P3.5口接门铃按键。 电子音乐门铃的电路连接图如下图1所
6.2单片机引脚说明 AT89C51单片机是标准的40引脚双列直插式集成电路芯片,引脚分布可如下图2所示: 图2 AT89C51单片机引脚分布图
P1.0~P1.7 P1口8位双向线(在引脚的1~8号端子); P2.0~P2.7 P2口8位双向线(在引脚的21~28号端子); P3.0~P3.7 P3口8位双向线(在引脚的10~17号端子)。 1)P0口有三个功能: 外部扩展存储器时,当作数据总线(如图中的D0~D7为数据总线接口) 外部扩展存储器时,当作地址总线(如图中的A0~A7为地址总线接口) 不扩展时,可作一般的I/O口使用,但内部无上拉电阻,作为输入输出时应在外部接上拉电阻。 2)P1口功能 P1口只作I/O口使用,其内部有上拉电阻。 3)P2口功能 扩展外部存储器时,当作地址总线使用; 作一般I/O口使用,其内部有上拉电阻。 4)P3口功能 除了作为I/O口使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置。 当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源,所以如果P0口作为输入时,或处在高阻抗状态,只有外接一个上拉电阻才能有效。 5)ALE/PROG地址锁存控制信号 在系统扩展时,ALE用于控制把P0口的输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。 PROG为编程脉冲的输入端,在AT89C51单片机内部有一个4kB的程序存储器(ROM),ROM的作用就是用来存放用户需要执行的程序。我们如何把编写好的程序存入这个ROM中的呢?实际上是通过编程脉冲输入采能写进去,而这个脉冲的输入端口就是PROG。 6)PSEN外部程序存储器读选通信号 在读外部ROM时PSEN低电平有效,以实现外部ROM单元的读操作: 内部ROM读取时,PSEN不动作; 外部ROM读取时,在每个机器周期会动作两次; 外部RAM读取时,两个PSEN脉冲被跳过不会输出; 外接ROM时,与ROM的OE脚相接。 7)EA/VPP访问程序存储器控制信号 接高电平时:CPU读取内部程序存储器(ROM) 接低电平时:CPU读取外部程序存储器(ROM)。8031单片机内部是没有ROM的,因此在应用8031单片机时,这个脚时一直接低电平的。 8)RST复位信号 当输入的信号连续2个机器周期以上高电平时即为有效,用以完成单片机的复位初始化操作,当复位后程序计数器PC=0000H,即复位后将从程序存储器的0000H单元读取第一条指令码。 9)XTAL1和XTAL2 外接晶振引脚。当使用芯片内部时钟时,此二引脚用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。 10)VCC 电源+5V输入 11)GND 接地 6.3主要电路设计 AT89C51是片内有ROM/EPROM的单片机,因此,这种芯片构成的系统简单、可靠。本设计利用单片机芯片构成应用系统时,主要是将单片机街上时钟电路和复位电路。其应用特点: ◆有可供用户使用的大量I/O线 ◆内部存储器容量有限 ◆应用系统开发具有特殊性 6.3.1时钟电路 AT89C51虽然有内部振荡电路,但要形成时钟,必须外部附加电路。AT89C51单片机的时钟产生方法有两种:内部时钟方式和外部时钟方式。 本设计采用最常用的内部时钟方式,即用外接晶体和电容组成的并联谐振回路。震荡晶体可在1.2MHZ到12MHZ之间选择。电容值无严格要求,单电容取值对振荡频率输出的稳定性、大小、振荡电路起振速度有少许影响,CX1、CX2可在20pF到100pF之间取值,但在60pF到70pF时振荡器有较高的频率稳定性。所以本设计中,震荡晶体频率选择12MHZ,电容选择20pF。 在设计印刷电路板时,晶体和电容应尽可能靠近单片机芯片安装,以减少寄生电容,更好的保证振荡器稳定和可靠工作。 6.3.2复位电路 AT89C51的复位是由外部的复位电路来实现的。复位引脚RST通过一个施密特触发器来抑制噪声。在每个机器周期的S5P2,施密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。 复位电路通常采用上电自动复位和按钮复位两种方式。 最简单的上电自动复位电路中上电自动复位是通过外部复位电路的电容充电来实现的。只要VCC的上升时间不超过1ms,就可以实现自动上电复位。时钟频率采用12MHZ时C取10μF,R取1kΩ。本设计就是用上电复位。 复位时,ALE和PSEN成输入状态,片内RAM不受复位影响;复位后,PC指向0000H,单片机从起始地址0000H开始执行程序。所以单片机运行出错或进入死循环,可按复位键重新启动。在次单片机中,没有完全使用这些默认值,而是通过在程序中对单片机进行初始化。 复位电路采用的是简单的上电复位电路,此电路要求要保证在RESET引脚上提供10毫秒以上稳定的高电压。这种上电复位利用电容器充电来实现。当加电时,电容C充电,电路有电路流过,构成回路,在电阻R上产生压降,RESET引脚为高电平;当电容C充满电后,电路相当于断开,RESET的电位与地相同,复位结束。复位时间与充电的时间有关,充电时间越长复位时间越长,增大电容或增大电阻都可以增加复位时间。 6.3.3功率放大电路 LM386是音频功率放大器。输入端以地位参考,同时输出端以地位参考,被自动偏置到电源电压的一半,在5V电源电压下,它的静态功耗仅为24mW,使得LM386特别适用于电池供电的场合。本实验采用LM386的封装形式8引线双列直插式。 6.4软件设计 6.4.1音乐符设计 首先建立音乐,把音乐的音符找出。建立各个音符的定时常数T值表,编写程序时我们把T值表按顺序建立在“TABLE”栏。每个发音符使用一个字节,字节的位(简谱码)代表音符的节拍。如果1拍为0.4秒,4分之一秒就是0.4秒。只要设定延时时间就求得节拍的时间。假设4分之一为1DELAY,则一拍应为4DELAY,依次类推。所以只要求出4分之一的DELAY时间。其余的节拍就是它的倍数。4分之一拍的延时在此我们设为125ms,节拍码如表: 表 1 音符对应的简谱码、频率、定时常数
表2 节拍码及节拍数
6.4.2程序设计: 本系统采用MCS-51汇编语言编程。软件程序由主程序、定时器TO中断服务程序和延时子程序组成。系统初始化后,系统扫描按键(P3.5口的电平)判断是否有键按下,有键按下时,根据按下键的次数,向音频字符码指针赋以不同歌曲的地址,通过定时器TO中断子程序使P1.0口输出相应频率的音频脉冲,以达到发声目的。主程序流程图如图3所示。 6.4.3程序流程图如下图3所示:
N
图3 程序流程图 6.4.4仿真界面图 仿真界面图如下图4: 图4 仿真界面 6.4.5编程如下: MAIN: ORG 00H ;主程序的起始地址 JMP START ;跳至主程序 ORG 0BH ;TIMER0中断起始地址 LJMP TIM0 ;跳至TIMER0中断子程序 START:MOV TMOD,#00000001B ;设TIMER0在MODE1 MOV IE,#10000010B ;中断使能 JB P3.4, $ ;第一次按T0? CALL DELAY1 ;消除抖动 JNB P3.4, $ ;T0放开? MOV 31H,#00 ;按T0计数指针初始值为00H START0: MOV 30H,#LOW SONG ;取简谱码指针(第1首) NEXT: MOV A,30H MOV DPTR,# TABLE MOVC A,@A+DPTR ;至相关页取码 MOV R2,A ;低4位为音符的节拍 JZ END0 ;检查简谱码是否已结束(有无00?) ANL A,#0FH ;取节拍(低4位) MOV R5,A ;存入R5节拍的时间 MOV A,R2 SWAP A ANL A,#0FH ;取音频值(高4位) JNZ SING ;是否为0,是0则不发音 CLR TR0 JMP D1 SING: DEC A ;因0不列入 MOV 22H,A ;存入(22H ) RL A ;乘2 MOV DPTR,#TABLE MOVC A,@A+DPTR ;至TABLE取码,取T的值 MOV TH0,A ;取到的高位字节才存入TH0 MOV 21H,A ;取到的高位字节存入(21H) MOV A,22H ;在载入取到的音符码 RL A ;乘2 INC A ;加1 MOVC A,@A+DPTR ;至TABLE取相对的低位字节计数值 MOV TL0,A ;取到的低位字节存入TL0 MOV 20H,A ;取到的低位字节存入(21H) SETB TR0 ;启动TIMER0 D1: CALL DELAY INC 30H ;取简谱码指针加1 JMP NEXT END0: CLR TR0 ;停止计数器 MOV A,31H ;载入计数器指针 XRL A,#00H ;是否按第1次 JNZ END1 ;不是则跳至END1 JB P3.4,$ ;按第2次? CALL DELAY1 ;消除抖动 JNB P3.4,$ ;放开否? INC 31H ;计次地址(31H)加1 MOV 30H,#LOW SONG1 ;第2首歌指针 JMP NEXT END1: MOV A,31H ;载入计数器指针 XRL A,#01H ;是否按第2次 JNZ END2 ;不是则跳至END2 JB P3.4,$ ;按第3次? CALL DELAY1 ;消除抖动 JNB P3.4,$ ;放开否? INC 31H ;计次地址(31H)加1 MOV 30H,#LOW SONG2 ;第3首歌指针 JMP NEXT END2: MOV A,31H ;载入计数器指针 XRL A,#02H ;是否按第3次 JNZ END3 ;不是则跳至END3 JB P3.4,$ ;按第4次? CALL DELAY1 ;消除抖动 JNB P3.4,$ ;放开否? INC 31H ;计次地址(31H)加1 MOV 30H,#LOW SONG3 ;第4首歌指针 JMP NEXT END3: MOV A,31H ;载入计数器指针 XRL A,#03H ;是否按第4次 JNZ END4 ;不是则跳至END4 JB P3.4,$ ;按第5次? CALL DELAY1 ;消除抖动 JNB P3.4,$ ;放开否? INC 31H ;计次地址(31H)加1 MOV 30H,#LOW SONG4 ;第5首歌指针 JMP NEXT END4: MOV A,31H ;载入计数器指针 XRL A,#04H ;是否按第5次 JNZ END5 ;不是则跳至END5 JB P3.4,$ ;按第6次? CALL DELAY1 ;消除抖动 JNB P3.4,$ ;放开否? INC 31H ;计次地址(31H)加1 MOV 30H,#LOW SONG5 ;第6首歌指针 JMP NEXT END5: JMP START ;回到第1次位置 TIM0: PUSH ACC ;将A的值暂存于堆栈 PUSH PSW ;将PSW的值暂存于堆栈 SETB RS0 ;设工作寄存器库1,RS0=1,RS1=0 CLR RS1 MOV TL0,20H ;重设计数值 MOV TH0,21H CPL P1.0 ;将P1.0位反相 POP PSW ;至堆栈取回PSW的值 POP ACC ;至堆栈取回A的值 RETI ;返回主程序 DELAY:MOV R7,#02 ;延时125毫秒 D2: MOV R4,#125 D3: MOV R3,#248 DJNZ R3,$ DJNZ R4,D3 DJNZ R7,D2 DJNZ R5,DELAY ;决定节拍 RET DELAY1:MOV R4,#20 D4: MOV R3,#248 DJNZ R3,$ DJNZ R4,D4 RET ORG 300H ;定时常数T值表 TABLE: DW 64260,64400,64524,64580 DW 64684,64777,64820,64898 DW 64968,65030,65058,65110 DW 65157,65178,65217 ;音符节拍码数据表 SONG: ;生日快乐 ;1 DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 82H,01H,81H,94H,84H DB 0C4H,0B4H,04H ;2 DB 82H,01H,81H,0F4H,0D4H DB 0B4H,0A4H,94H DB 0E2H,01H,0E1H,0D4H,0B4H DB 0C4H,0B4H,04H DB 00H SONG1: ;两只老虎 ;1 DB 44H,54H,64H,44H DB 44H,54H,64H,44H DB 64H,74H,88H DB 64H,74H,88H ;2 DB 82H,92H,82H,72H,64H,44H DB 82H,92H,82H,72H,64H,44H DB 44H,84H,48H DB 44H,14H,48H DB 00H SONG2: ;三只小猫 ;1 DB 62H,82H,82H,62H,98H DB 92H,0B2H,0B2H,82H,98H DB 62H,82H,82H,52H,68H DB 92H,0B2H,0B2H,82H,98H ;2 DB 62H,82H,82H,62H,92H,92H,94H DB 92H,0B2H,0B2H,92H,84H,94H DB 0B8H,0B4H,04H DB 00H SONG3: ;哈巴狗 ;1 DB 42H,42H,42H,52H,64H,04H DB 62H,62H,62H,72H,84H,04H DB 92H,92H,82H,72H,64H,04H DB 82H,82H,52H,62H,44H,04H ;2 DB 42H,42H,42H,52H,64H,04H DB 62H,62H,62H,72H,84H,04H DB 92H,92H,82H,72H,64H,04H DB 82H,82H,52H,62H,44H,04H DB 00H SONG4: ;不倒翁 ;1 DB 84H,94H,88H DB 64H,54H,68H DB 84H,64H,54H,44H DB 62H,82H,42H,62H,58H ;2 DB 84H,94H,88H DB 64H,54H,68H DB 84H,64H,54H,44H DB 52H,42H,52H,62H,48H DB 00H SONG5: ;妹妹背着洋娃娃 ;1 DB 84H,02H,82H,64H,54H DB 64H,54H,48H DB 64H,02H,52H,44H,24H DB 14H,24H,18H ;2 DB 24H,02H,22H,42H,24H DB 44H,54H,68H DB 54H,02H,52H,84H,84H DB 54H,64H,48H DB 00H END 七、设计小结: 通过3个星期的实习,我懂得了很多。学会了常用的单片机控制音乐门铃的用法。将所学到的理论知识应用于实际,使所学的知识得到进一步巩固,使这些知识得到提高,初步培养了单片机设计的独立设计,为今后的工作打下良好基础,树立正确的设计思路。 在这次设计过程中遇到很多问题,通过老师的指导和帮助,我们克服了这些困难解决了问题,提高了解决问题的能力。在这次设计中,我们要学会亲自去尝试,不要害怕失败。 这次实习,使我们有了团队合作,培养了我们的团队合作精神。通过团队相互讨论,很多问题都迎刃而解了。通过团队合作,使我们认识到:一个人的能力是有限的,只有相互合作,相互学习才能把事情做得更好。 最后,这次实习是我认识到:我们现在的知识还是薄弱,基础还不够扎实。今后我们要更加努力学习专业知识,只有扎扎实实打好基础,才能在社会的竞争中处于不败之地。今后我们要努力改正自己的不足,发扬自己的优点。 参考文献: 【1】 李珍.单片机原理与应用技术 [M] .北京:清华大学出版社, 2003年. 【2】 孙函芳.MCS-51/96单片机原理及应用[M] .北京: 北京航空航天大学出版社 , 1994年. 【3】 刘进峰 .电子制作实训[M] .湖北:中国劳动社会保障出版社 2006年 【4】 张靖武 .单片机原理、应用与PROTEUS仿真 [M] .北京:电子工业出版社 ,2007年. 【5】陈明莹 . 8051单片机课程设计实训教材 [M] .北京: 清华大学出版社 , 2003年. 【6】王昊等.通用电子元器件的选用与检测 [M] .北京:电子工业出版社,1996. 【7】张毅刚等.单片机原理与应用设计 [M] .北京:电子工业出版社,2005. |
|