新闻中心

EEPW首页 > 模拟技术 > 设计应用 > 基于AT89C51型单片机的号音自动播放器设计

基于AT89C51型单片机的号音自动播放器设计

——
作者:张玉林,镇桂勤 时间:2007-01-26 来源:《国外电子元器件》 收藏

1 引言

本文引用地址:https://www.eepw.com.cn/article/21225.htm

机关、院校日常作息需要计时和号音提示,笔者利用at89c51型单片机和lm386型音频功率放大器构成了自动计时和号音播放器,成本低,效果好,值得推广。

2 at89c51的主要特性和引脚功能

at89c51是带4k字节闪烁可编程可擦除只读存储器(eperom)的低电压、高性能cmos 8位微处理器(俗称单片机)。该单片机与工业标准的mcs-51型机的指令集和输出引脚兼容。at89c51将多功能8位cpu和闪烁存储器组合在单个芯片中,为很多嵌入式控制提供了灵活性高且价格低廉的方案。

at89c51的主要特性如下:

寿命达1000写/擦循环;

数据保留时间:10年;

全静态工作:0hz-24mhz;

三级程序存储器锁定;

128×8位内部ram;

32可编程i/o线;

2个16位定时器/计数器;

5个中断源;

可编程串行通道;

低功耗闲置和掉电模式;

片内振荡器和时钟电路。

at89c51引脚排列如图1所示,引脚功能如下:

vcc(40):+5v。

gnd(20):接地。

p0口(39-32):p0口为8位漏极开路双向i/o口,每引脚可吸收8个ttl门电流。

p1口(1-8):p1口是从内部提供上拉电阻器的8位双向i/o口,p1口缓冲器能接收和输出4个ttl门电流。

p2口(21-28):p2口为内部上拉电阻器的8位双向i/o口,p2口缓冲器可接收和输出4个ttl门电流。

p3口(10-17):p3口是8个带内部上拉电阻器的双向i/o口,可接收和输出4个ttl门电流,p3口也可作为at89c51的特殊功能口。

rst(9):复位输入。当振荡器复位时,要保持rst引脚2个机器周期的高电平时间。

ale/prog(30):当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节,在flash编程期间,此引脚用于输入编程脉冲。在平时,ale端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6,它可用作对外部输出的脉冲或用于定时目的,要注意的是,每当访问外部数据存储器时,将跳过1个ale脉冲。

psen(29):外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期2次psen有效,但在访问外部数据存储器时,这2次有效的psen信号将不出现。

ea/vpp(31):当ea保持低电平时,外部程序存储器地址为(0000h-ffffh)不管是否有内部程序存储器。flash编程期间,此引脚也用于施加12v编程电源(vpp)。

xtal1(19):反向振荡器放大器的输入及内部时钟工作电路的输入。

xtal2(18):来自反向振荡器的输出。

3 号音自动播放系统的设计

号音自动播放系统如图2所示,at89c51的p1.0端接音频放大模块的in+端口,在音频放大模块的vout端接一个8欧姆或者16欧姆的喇叭。

3.1 电路设计及音乐编程原理

若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将p1.0反相,然后重复计时再反相。就可在p1.0引脚上得到此频率的脉冲。

利用at89c51的内部定时器使其工作计数器模式(mode1)下,改变计数值th0及tl0以产生不同频率的方法产生不同音阶,例如,频率为523hz,其周期t=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将i/o反相,就可得到中音do(523hz)。

计数脉冲值与频率的关系式是:

n=fi÷2÷fr

式中,n是计数值;fi是机器频率(晶体振荡器为12mhz时,其频率为1mhz);fr是想要产生的频率。

其计数初值t的求法如下:

t=65536-n=65536-fi÷2÷fr

例如:设k=65536,fi=1mhz,求低音do(261hz)、中音do(523hz)、高音do(1046hz)的计数值。

t=65536-n=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr

低音do的t=65536-500000/262=63627

中音do的t=65536-500000/523=64580

高音do的t=65536-500000/1046=65059

c调各音符频率与计数初值t对照如表1所示。

3.2 主程序流程

本系统主要完成作息定时和号音播放功能,因此用定时器t1中断方式产生100ms基准时间,再根据作息表上各段时间的长短对基准时间用软件计时。可以用查表方式取得计数参数,计时到后将播放子程序地址送dptr,转入播放子程序,放2遍对应号音后再继续计时。主程序流程如图3所示。

播放子程序是用t0中断方式控制p1.0不断取反以产生不同频率音符,节拍的长短靠调用200ms延时子程序次数来完成。子程序也用查表来完成。



关键词:

评论


相关推荐

技术专区

关闭