APP下载

基于STC89C52单片机的蜂鸣器的设计与实现

2022-11-11

无线互联科技 2022年16期
关键词:蜂鸣器字节中断

徐 敏

(江苏联合职业技术学院 无锡旅游商贸分院 信息工程系,江苏 无锡 214000)

0 引言

单片机是智能制造和智能服务的基础技术,具有集成度高、可控力强、适应度高、功耗低、扩展灵活等优势。蜂鸣器是传感器的一种,它是一种一体化结构的电子讯响器,采用直流电压供电,在生活的方方面面都有应用,例如在计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。

1 STC89C52单片机

本次设计中单片机选用STC89C52 型号,它是STC公司生产的一种低功耗、高性能CMOS八位微控制器,使用经典的MCS-51内核,同时也做了很多的改进,使得芯片具有传统的51单片机不具备的功能,为嵌入式控制应用系统提供高灵活有效的解决方案[1]。STC89C52单片机的最小系统有复位、时钟、电源3部分电路组成:复位电路的作用是初始化,再次使用时可以重新开始;时钟电路使单片机具有自我把控时间的功能,进而准确地进行数据处理;电源电路主要起到为整体电路供电作用[2]。

1.1 STC89C52的功能及参数

STC89C52的时钟机器周期有两种,分别为:6时钟/机器周期和12时钟/机器周期;工作电压为5.5 V~3.3 V或3.8 V~2.0 V;工作频率范围为0~40 MHz;用户应用程序空间为8 k字节Flash,512字节的RAM,32 位I/O口线;内置4KB EEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒一个7向量4级中断结构,兼容传统51单片机的5向量2级中断结构,全双工串行口,可用定时器软件实现多个UART。另外,STC89C52可降至0 Hz 静态逻辑操作,支持可选择节电模式。工作温度范围分为工业级和商业级,工业级为-40~85 ℃,商业级为0~75 ℃。最高运作频率为35 MHz,6T/12T可选。系统可编程ISP与应用可编程IAP可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成,无需专用编程器或专用仿真器。封装形式可采用LQFP-44,PDIP-40,PLCC-44,PQFP-44。

1.2 STC89C52单片机的工作模式

STC89C52RC单片机的工作模式有正常工作模式、掉电模式和空闲模式三种。其中正常工作模式下,单片机处于正常执行程序的状态,典型功耗为4 mA~7 mA;掉电模式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止,中断返回后,继续执行源程序,掉电模式的典型功耗远远小于0.1 μA;空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作,典型功耗为2 mA[3]。

1.3 STC89C52串口结构

STC89C52串口有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H;接收器是双缓冲结构;发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误。STC89C52串口结构,如图1所示。

图1 STC89C52串口结构

2 开发环境

2.1 KEIL集成开发环境

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统。与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境μVision将这些部分组合在一起。Keil软件可在WIN98,NT,WIN2000,WINXP等操作系统下运行。

2.2 STC-ISP 烧录软件

STC-ISP烧录软件用于单片机下载编程烧录程序,是针对STC系列单片机而设计的,可下载STC89系列、12C2052系列和12C5410等系列的STC单片机。

STC-ISP烧录软件有串口助手、Keil仿真设置、定时器计算器、波特率计算器等功能模块。本项目中,主要运用串口助手对程序进行烧录。通过选择单片机型号、串口号及波特率将编译程序下载,根据485通信协议,发送并接收指令及数据。

3 蜂鸣器设计

3.1 蜂鸣器原理

本设计由电磁式有源蜂鸣器,由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。

蜂鸣器连接到了STC89C52的P05口,I/O口为低电平时打开,高电平时关闭。通过对 I/O 口取 0/1 电平来引发蜂鸣器电压的通断,就可让蜂鸣器产生振动频率。

3.2 实验环境

本设计硬件采用STC89C52开发板、Micro数据线、485串口模块、杜邦线和PC机。软件包括Windows7及以上系统、KEIL C51开发环境、STC-ISP烧写助手。

3.3 实验步骤

3.3.1 延时处理

传感器在数据采集时,由于要和485串口服务器进行通信,所以需要一定的配置来满足485串口采集器的实时采集功能。(1)定义延时处理函数,设置280 ms,40 ms,50 ms,100 ms的延时。(2)设置配置系统标志位为全局变量 glb_sts.system_flag = FALSE,它是主函数中是否进行数据处理的核心变量。(3)设置定时器文件,用来准确计算时间,定时的时间达到了以后,glb_sts.system_flag = TRUE,相当于告诉单片机可以去执行要执行的程序。

3.3.2 数据包接收与校验方法

串口服务器通信的数据包接收与校验方法中,定义最大包长为20,设置串口波特率为9 600,配置485 控制引脚为P43。定义串口初始化、串口发送字节、485发送字符串以及控制485芯片位发送模式4个函数。进行串口初始化:配置串口为模式1,清零T1的控制位,配置T1为模式2,计算T1重载值,当初值等于重载值时,禁止T1中断并使串口中断,启动T1。在串口发送字节函数中,置发送中断标志为1,然后发送数据并且等待数据发送完毕。485发送字符串函数,检查发送的数据是否正确,并发送数据包的数据。控制485芯片位发送模式包括485芯片发送和读写模式。

串口中断服务函数的程序设计,如图2所示。(1)首先清除接收中断;(2)当数据已接收并未处理的情况下,则不再接收数据;(3)当读取的数据超过数据包大小,接收数据计数清零,将读取的数据储存在数据包里;(4)校验数据包头是否正确,不正确则重新接收数据;(5)将读取的485数据存在数据包内;(6)清除发送中断,清除串口发送标志。

图2 串口中断服务函数流程

3.3.3 控制蜂鸣器的打开与关闭

首先进行外设初始化,包括定时器初始化、串口初始化、全局函数初始化,并将485总线设置为读模式。当系统标志复位成功,表示10 ms的周期到了,清除标志位。判断串口数据是否读取成功,清除串口读取完成标志位。数据包校验,如果失败则清除接收到的数据;读取addr位是不是蜂鸣器的标志,如果读取的字符为0,表示关闭蜂鸣器;如果读取的字符为1,表示打开蜂鸣器;如果读取的字符为0XFF,表示读取当前蜂鸣器的状态。设置包尾为0XBB,发送485数据包。相关代码如下:

……

if(uart_sts.recv_buf[1] ==ADDR)//485addr

{

P44 = !P44;

TX_BUF[0] =PACK_HEAD;

TX_BUF[1] =ADDR;

TX_BUF[2] = 0x00;

TX_BUF[3] = 1;

if(uart_sts.recv_buf[4] == 0)

{

P05 = CLOSE; //关闭蜂鸣器

TX_BUF[4]= 0; //将蜂鸣器状态设置为0

}

elseif(uart_sts.recv_buf[4]== 1)

{

P05 = OPEN; //打开蜂鸣器

TX_BUF[4] = 1; //将蜂鸣器状态设置为1

}

elseif(uart_sts.recv_buf[4] == 0xff)

{

if(P05 == 1 )

{

TX_BUF [4] = 0; //返回状态-->关闭

}

else

{

TX_BUF [4] = 1; //返回状态-->打开

}

}

}

……

3.3.4 按键控制

机械触点式按键开关,其主要功能是把机械上的通断转换为电气上的逻辑关系。当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动。为了不产生这种现象而做的措施就是按键消抖。按键消抖是指按键按下时刻抖动的波形,读取这一时刻之后20 ms左右的按键信息,此时波形已平稳,这样可以防止一次按键被误读多次。

根据上面的原理描述,即可对按键的输入管脚进行边沿检测,当检测到输入信号变化后,计数清零并开始计数,计数到20 ms时进行采样;再对每次采样的值进行下降沿检测,检测的结果作为按键消抖的脉冲输出,每次检测到下降沿时让状态翻转并输出。

理想波形与实际波形之间是有区别的,实际波形在按下和释放的瞬间都有抖动的现象,抖动时间的长短和按键的机械特性有关,一般为5~10 ms,如图3所示。通常采用手动按键然后释放,这个动作中稳定闭合的时间超过了20 ms。因此,单片机在检测按键是否按下时都要加上去抖动操作,有专用的去抖动电路,也有专门的去抖动芯片,但通常采用软件延时的方法解决抖动问题。

图3 按键消抖

3.4 实验结果

利用KEIL开发环境打开实验例程,单击option按钮,勾选生成hex文件;打开stc-isp烧录软件选择单片机型号STC89C/LE52RC。将MICRO-USB线插入电脑的USB口,查看并识别串口号。单击打开程序文件按钮,选择刚刚生成的hex文件。插入485-USB串口给STC89C52供电,然后单击下载/编程按钮,再按下单片机的电源供电按钮,等待单片机程序下载成功。

3.4.1 485通信协议

485通信协议是传感器进行通信的一种合约,传感器模块在接收到485通信指令的时候进行数据的采集并返回结果。每次数据通信的数据包都由包头+包体+包尾组成,如图4所示。其中,包头包括起始字节、地址编码、指令值和包体长度;起始字节固定为0xaa,地址编码为485地址编码,不同的传感器接入在固定的地址上。蜂鸣器被定义为0x44,指令值为0时,表示获取传感器状态;为1时表示设置状态/开关,长度是指数据包体的字节数。包尾固定为一个字节,值为0xbb。

图4 485通信协议指令与数据传输过程

打开串口调试助手,选择16进制发送,分别输入对应的指令,观察能否控制蜂鸣器的打开与关闭。根据485的协议包,控制并测试蜂鸣器打开、关闭以及查看蜂鸣器的当前状态,实验结果如表1所示。

表1 实验结果

3.4.2 按键控制

置P40为开关键,当P40为低电平时,蜂鸣器开;当P40为高电平时,蜂鸣器关。

4 结语

本设计采用的有源蜂鸣器只能发出一个调,为了呈现的发音效果更丰富,可以采用无源蜂鸣器,只需要给其加上脉冲信号就会发出相应的音调。蜂鸣器在日常生活的方方面面都有所应用,例如:主板蜂鸣器、机箱蜂鸣器、打印机控制板蜂鸣器、警报蜂鸣器、电子玩具音乐蜂鸣器、汽车电子设备中的车载蜂鸣器、倒车蜂鸣器等,还可应用于医疗设备、环境监控等行业。

本设计中,蜂鸣器是一种执行器,它属于控制类型模块,是根据指令来执行控制命令的;除此之外,风扇控制器、继电器控制器、RGB灯控制器的设计也是运用相同的原理来实现的。

猜你喜欢

蜂鸣器字节中断
电动自行车产品车速提示音检测现状和整改技术研究(2)
No.8 字节跳动将推出独立出口电商APP
掌控板制作简易钢琴
No.10 “字节跳动手机”要来了?
单片机驱动蜂鸣器的程序设计
简谈MC7字节码
跟踪导练(二)(5)
千里移防,卫勤保障不中断
丰田凯美瑞240V车间隙警告蜂鸣器异常鸣响
AT89C51与中断有关的寄存器功能表解