1引言
随着时代的前进和发展,控制智能化、仪器小型化、功耗微小化得到广泛关注。在这些领域中,单片机起到了举足轻重的作用,这就把单片机的应用提升到重要的地位,单片机应用系统设计就成为新的技术热点。
近几年来,随着市场上智能化楼宇的不断升温,门铃系统已作为智能化办公室和智能化住宅小区的一个重要组成部分,被各商家和用户所接受。人们已开始习惯用门铃系统代替传统的铁钥匙去管理各通道门,这使门铃系统得到了飞跃性的发展。随着单片机技术的飞速发展,通过单片机实现人们对物质生活的满足,这将会日益成为今后的一个重要发展的方向。
由于电子音乐门铃具有悦耳动听,价格低廉,耗电少等优点,在现代家居中的应用越来越流行。有了电子音乐门铃,在有客人拜访时,听到的将不再是单调的提示音,而是不同凡响的流行音乐旋律。特效音等个性化的电子音乐。这里用一个单片机设计的电子音乐门铃,仅需AT89C51单片机最小系统,再加上LM386做音频小功放,输出到扬声器。客人来访时,按一下按钮,门铃就会奏出优美的电子音乐。
2基本原理
音乐门铃的设计方案,掌握了汇编语言的编程方法,并熟练的运用AT89C51单片机定时器产生固定频率的方波信号。推动喇叭发出旋律,音乐是由音符组成的,不同的音符是由相应的频率的震动产生,产生不同的音频要有不同固定周期的脉冲信号。要产生音频脉冲,只要算出某一音频的周期(1/F),然后将此周期T除以2,即为半周期的时间。我们利用单片机的内部定时器T0,使其工作在计数器模式1,初始化适当的计数值TH0及TL0以及即时这个半周期的时间,每当记上得到此频率的脉冲。P1.0引脚接LM386作音频功放,然后输出到扬声器,从而发出美妙的乐声。
3结构设计说明
一 硬件设计
系统以AT89C51单片机为核心加上外围电源时钟电路、LM386功放电路及扬声器电路组成。ATMEL公司生产的AT89C51单片机是一种低功耗且电压性能高的8位单片机,内部除CPU外,还包括128字节RAM,4个8位并行I/O口,5个中断优先级,2层中断嵌套,2个16位可编程计数器,片内集成4k字节可改变程序FLASH,具有低功耗、速度快、程序擦写方便等优点,完全满足本系统设计需要,系统通过P1.0连接功放电路从而驱动扬声器产生电子乐声,T1口接门铃按键。
3.1 芯片简介
AT89C51单片机是把那些作为控制应用所必需的基本内容都集成在一个尺寸有限的集成电路芯片上。如果按功能划分,它由如下功能部件组成,即微处理器、数据存储器、程序存储器、并行I/O口、串行口、定时器/计数器、中断系统及特殊功能寄存器。他们都是通过片内单一总线连接而成,其基本结构依旧是CPU加上外围芯片的传统结构模式。但对各种功能部件的控制是采用特殊功能寄存器的集中控制方式。
1)微处理器
该单片机中有一个8位的微处理器,与通用的微处理器基本相同,同样包括了运算器和控制器两部分,只是增加了面向控制的处理功能,不仅可处理数据,还可以进行位变量的处理。
2)数据存储器
片内为18个字节,2片外最多可外扩至64k字节,用来存储程序在运行期间的工作变量、运算的中间结果、数据暂存和缓冲、标志位等,所以称为数据存储器。
3)程序存储器
由于受集成度限制,片内只读存储器一般容量较小,如果片内的只读存储器的容量不够,则需要扩展片外的只读存储器,片外最多可外扩至64k字节。
4)中断系统
具有5个中断源,2个中断优先权 5)定时器/计数器
片内有2个16位的定时器/计数器,具有四种工作方式 6)串行口
1个全双工的串行口,具有四种工作方式。可用来进行串行通讯,扩展并行I/O口,甚至与多个单片机相连接构成多机系统,从而使单片机的功能更强且应用更广。
7)I/O口
4个并行8位I/O口 8)特殊功能寄存器
共有21个,用于对片内的各功能的部件进行管理、控制、监视。实际上是一些控制寄存器和状态寄存器,是一个具有特殊功能的RAM区。
由上可见,AT89C51单片机的硬件结构具有功能部件种类全,功能强等特点。特别值得一提的是该单片机CPU中的微处理器实际上是一个完整的1位微计算机。这个1位微计算机有自己的CPU、位寄存器、I/O口和指令集。其在开关决策、逻辑电路仿真、过程控制方面非常有效;而8位机在数据采集、运算处理方面有明显的长处。MCS-51单片机中8位机和1位机的硬件资源复合在一起,二者相辅相成,它是单片机技术上的一个突破,也是MCS-51单片机在设计上的精美之处。
3.2引脚说明
MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分布可参照单片机引脚。 P0.0~P0.7 P0口8位双向线(在引脚的32~39号端子); 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口有三个功能:
1、外部扩展存储器时,当作数据总线(如图中的D0~D7为数据总线接口) 2、外部扩展存储器时,当作地址总线(如图中的A0~A7为地址总线接口) 3、不扩展时,可作一般的I/O口使用,但内部无上拉电阻,作为输入输出时应在外部接上拉电阻。
(2)P1口功能
P1口只作I/O口使用,其内部有上拉电阻。 (3)P2口功能
1、扩展外部存储器时,当作地址总线使用; 2、作一般I/O口使用,其内部有上拉电阻。 (4)P3口功能
1、除了作为I/O口使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置。
2、当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源,所以如果P0口作为输入时,或处在高阻抗状态,只有外接一个上拉电阻才能有效。
(5)ALE/PROG地址锁存控制信号
在系统扩展时,ALE用于控制把P0口的输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。
PROG为编程脉冲的输入端,在AT89C51单片机内部有一个4kB的程序存储器(ROM),ROM的作用就是用来存放用户需要执行的程序。我们如何把编写好的程序存入这个ROM中的呢?实际上是通过编程脉冲输入才能写进去,而这个脉冲的输入端口就是PROG。
(6)PSEN外部程序存储器读选通信号
在读外部ROM时PSEN低电平有效,以实现外部ROM单元的读操作: 1、内部ROM读取时,PSEN不动作;
2、外部ROM读取时,在每个机器周期会动作两次; 3、外部RAM读取时,两个PSEN脉冲被跳过不会输出; 4、外接ROM时,与ROM的OE脚相接。 (7)EA/VPP访问程序存储器控制信号
1、接高电平时:CPU读取内部程序存储器(ROM)
2、接低电平时:CPU读取外部程序存储器(ROM)。8031单片机内部是没有ROM的,因此在应用8031单片机时,这个脚时一直接低电平的。
(8)RST复位信号
当输入的信号连续2个机器周期以上高电平时即为有效,用以完成单片机的复位初始化操作,当复位后程序计数器PC=0000H,即复位后将从程序存储器的0000H单元读取第一条指令码。
(9)XTAL1和XTAL2
外接晶振引脚。当使用芯片内部时钟时,此二引脚用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。
(10)VCC 电源+5V输入 (11)GND 接地
3.3 主要电路设计
AT89C51是片内有ROM/EPROM的单片机,因此,这种芯片构成的系统简单、可靠。本设计利用单片机芯片构成应用系统时,主要是将单片机街上时钟电路和复位电路。
3.3.1时钟电路
AT89C51虽然有内部振荡电路,但要形成时钟,必须外部附加电路。AT89C51单片机的时钟产生方法有两种:内部时钟方式和外部时钟方式。
本设计采用最常用的内部时钟方式,即用外接晶体和电容组成的并联谐振回路。震荡晶体可在1.2MHZ到12MHZ之间选择。电容值无严格要求,单电容取值对振荡频率输出的稳定性、大小、振荡电路起振速度有少许影响,CX1、CX2可在20pF到100pF之间取值,但在60pF到70pF时振荡器有较高的频率稳定性。所以本设计中,震荡晶体频率选择
12MHZ,电容选择20pF。 在设计印刷电路板时,晶体和电容应尽可能靠近单片机芯片安装,以减少寄生电容,更好的保证振荡器稳定和可靠工作。
3.3.2 复位电路
AT89C51的复位是由外部的复位电路来实现的。复位引脚RST通过一个施密特触发器来抑制噪声。在每个机器周期的S5P2,施密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。
复位电路通常采用上电自动复位和按钮复位两种方式。
最简单的上电自动复位电路中上电自动复位是通过外部复位电路的电容充电来实现的。只要VCC的上升时间不超过1ms,就可以实现自动上电复位。时钟频率采用12MHZ时C取10μF,R取1kΩ。
除了上电复位外,有时还需要按键手动复位。本设计就是用的按键手动复位。按键手动复位有电平方式和脉冲方式两种。其中电平复位是通过RST端经电阻与电源VCC接通而实现的
四:技术指标分析
4.1音乐符设计
首先建立音乐,把音乐的音符找出。建立各个音符的定时常数T值表,编写程序时我们把T值表按顺序建立在“TABLE”栏。每个发音符使用一个字节,字节的位(简谱码)代表音符的节拍。如果1拍为0.4秒,4分之一秒就是0.4秒。只要设定延时时间就求得节拍的时间。假设4分之一为1DELAY,则一拍应为4DELAY,依次类推。所以只要求出4分之一的DELAY时间。其余的节拍就是它的倍数。4分之一拍的延时在此我们设为125ms,节拍码如表:
4.2 程序设计 (1)汇编程序
ORG 00H ;主程序起始地址 JMP START ;调至主程序
ORG 0BH ;TIMERO中断起始地址
JMP TIM0 ;跳至TIMERO 中断子程序
START: MOV TMOD,#00000001B ;设TIMERO在MODE1
MOV IE,#10000010B ; 中断使能 START0: MOV 30H,#00 ; 取简谱码普指针 NEXT: MOV A,30H ; 简谱码指针载入A
MOV DPTR,#TABLE ; 至TABLE取简谱码 MOVC A,@A+DPTR
MOV R2,A ;取到的简谱码暂存的R2 JZ END0 ;是否取到00(结束码)?
ANL A,#0FH ;不是,则取低4位 MOV R5,A ;将节拍码存入R5
MOV A,R2 ;将取到的简谱码在载入A SWAP A ;高低4位交换 ANL A,#0FH ;取低4位
JNZ SING ;取到的音符码是否为0? CLR TR0 ;是,则不发音
JMP D1 SING: DEC A MOV 22H,A RL A MOV DPTR,#TABLE1 MOVC A,@A+DPTR MOV TH0,A MOV 21H,A MOV A,22H RL A
INC A MOVC A,@A+DPTR MOV TL0,A MOV 20H,A SETB TR0 D1: CALL DELAY INC 30H
JMP NEXT END0: CLR TR0
;跳至D1
;取到音符码减1(不含0)
;存入(22H) ;乘2
;至TABLE1取相对的高位字节计数值 ;取到高位字节存入TH0 ;取到高位字节存入(21H) ;在载入取到的音符码 ;乘2 ;加1
;至TABLE1取相对的高位字节计数值 ;取到低位字节存入TL0 ;取到低位字节存入(20H) ;启动TIMER0
;基本单位时间1/4拍187毫秒
;取简谱码普指针加1 ;取下一个码
;停止TIMER0
JMP START0 ;重复循环
TIM0: PUSH ACC ;将A的值暂存入堆栈
PUSH PSW ;将PSW的值暂存于堆栈 MOV TL0,20H ;重设计数值 MOV TH0,21H
CPL POP
POP RETI DELAR: MOV D2: MOV D3: MOV DJNZ DJNZ DJNZ DJNZ
RET
TABLE1:
DW DW DW DW TABLE:
;1
P1.0 ;将P10位反相 PSW ;至堆栈取回PSW的值 ACC ;至堆栈取回A的值
;返回主程序 R7,#02 ;187毫秒 R4#187 R3#248
R3,$ R4,D3 R7,D2
R5,DELAY ;决定节拍 64021,64103,64260,64400 64524,64580,64684,64777 64820,64898,64968,65030 65058,65110,65157
DB 0A2H,0B2H,0D2H,0B2H,0A4H,0B2H,0D2H DB 0B2H,0A2H,82H,72H,88H
DB 72H,82H,0A2H,82H,72H,62H,42H,62H DB 38H,38H ;2
DB 0A4H,02H,0B2H,0A4H,84H DB 72H,82H,72H,62H,72H,84H,72H DB 64H,62H,12H,34H,02H,42H DB 38H,38H ;3
DB 44H,02H,32H,44H,64H
DB 72H,82H,72H,62H,72H,84H,0A2H DB 72H,74H,82H,0A4H,02H,0B2H DB 0A8H,0A8H
;4
DB 0B2H,0B4H,0A2H,84H,82H,72H DB 62H,72H,82H,0A2H,88H DB 72H,74H,62H,42H,32H,32H,62H DB 78H,78H ;5
DB 82H,84H,72H,82H,0A2H,84H DB 72H,82H,72H,62H,48H
DB 32H,0A2H,82H,0F2H,0A2H,0B2H,82H,72H DB 68H,68H
;6
DB 0B2H,0B2H,0B2H,0A2H,82H,84H,02H DB 72H,74H,62H,42H,32H,42H,62H
DB 78H,78H
DB 0A2H,0B2H,0A2H,72H,82H,84H,82H ;7
DB 72H,74H,62H,44H,64H DB 0A8H,0A4H,02H,0A2H
DB 0A2H,0B1H,0A1H,82H,0A2H,0B4H,0B2H,0C2H DB 0A2H,0B2H,0A2H,82H,78H ;8
DB 84H,72H,62H,44H,02H,62H
DB 72H,81H,71H,62H,72H,84H,02H,0A2H DB 0B4H,02H,82H,74H,82H,72H DB 68H,68H DB 00 END 4.3 定时器的初始化设置
以下介绍如何以定时器产生各种频率的声音,可以通过喇叭发出“DO”、“RE”“ME”……的音阶,实验仍以定时器0工作于模式0,计时时间长短按所发音的频率而定,下表是本设计所用的频率值:
低音 频率 中音 频率
1 262 1 523
2 294 2 587
3 330 3 659
4 349 4 698
5 392 5 784
6 440 6 880
7 494 7 987
高音 频率
1 1046
2 1174
3 1318
4 1396
5 1567
6 1760
7 1975
通过频率值我们可以推得定时计数器之间的关系: 其中各符号的含义如下: ◆f:频率值 ◆t:方波宽度
◆co:定时器所计数的次数 ◆lo:计数初值低字节 ◆hi:计数初值高字节 4.4音乐门铃的发声原理
一段音乐需要两个元素,即音符和节拍。
音符的发音主要靠不同的音频脉冲,只要算出某一音频的周期(频率的倒数),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期的时间,每当计时到了就将输出脉冲的I/O反相,然后重复计时此半周期时间,再对I/O反相,就可在I/O脚上产生优美的乐曲。
五:结论
本系统采用了AT89C51单片机来设计音乐门铃的功能,通过此次课程设计,让我们深刻了解了对单片机的编程、电路的分析以及系统控制原理等专业知识的分析和解决实际问题的全面锻炼。是一次很好的在单片机的基本原理、应用系统开发以及程序编写的锻炼机会。
六:参考文献
《8051单片机实践及应用》
七:致谢。 八:设计图纸
因篇幅问题不能全部显示,请点此查看更多更全内容