#51单片机# 用中断实现蜂鸣器

发布者:星光闪耀最新更新时间:2021-10-26 来源: eefocus关键字:51单片机  中断  蜂鸣器 手机看文章 扫描二维码
随时随地手机看文章

蜂鸣器常作为提示音,用于计算机、打印机、万用表等设备中。提示音一般很简单,能响就行。


某单片机的蜂鸣器原理图:

一张蜂鸣器原理图

该单片机的CPU原理图:

与之配套的CPU原理图

下面这段程序用到了中断的算法,实现了蜂鸣器在4kHz和1kHz频率下的发声。


#include


sbit Buzz = P0^7;//蜂鸣器控制引脚

unsigned char T0RH = 0;//T0重载值的高字节

unsigned char T0RL = 0;//T0重载值的低字节


void StartBuzz(unsigned int frequ);

void StopBuzz();


void main()

{

unsigned int i;


TMOD = 0X01;//设置定时器模式

EA = 1;//中断使能总开关


while(1)

{

StartBuzz(4000);//以4kHz启动蜂鸣器

for(i=0;i<40000;i++);

StopBuzz();    //关闭蜂鸣器

for(i=0;i<40000;i++);

StartBuzz(1000);//以1kHz启动蜂鸣器

for(i=0;i<40000;i++);

StopBuzz();    //关闭蜂鸣器

for(i=0;i<40000;i++);


}


Buzz  = 0;

}


//启动蜂鸣器,frequ指蜂鸣器工作频率

void StartBuzz(unsigned int frequ)

{

unsigned int reload;//计算所需的定时器重载值


reload = 65536- (11059200/12)/(frequ*2);//根据传入的形参frequ,计算定时器重载值


T0RH =(unsigned char)(reload>>8); //将16位的reload分成2个8位的数值,分别存入T0重载值的高位和低位

T0RL = (unsigned char)reload;


TH0 = 0XFF;

TL0 = 0XFE;

ET0 = 1;//使能T0中断

TR0 = 1;//启动T0

}


//关闭蜂鸣器

void StopBuzz()

{

ET0 = 0; //禁用T0中断

TR0 = 0; //关闭T0

}


//中断服务函数,用于控制蜂鸣器发声

void InterrupteTimer0() interrupt 1

{

TH0 = T0RH; //重新加载重载值

TL0 = T0RL;


Buzz = ~Buzz;//反转蜂鸣器控制电平

}


关键字:51单片机  中断  蜂鸣器 引用地址:#51单片机# 用中断实现蜂鸣器

上一篇:#51单片机#PWM
下一篇:#51单片机#中断实现按键消抖

推荐阅读最新更新时间:2024-11-08 12:24

51单片机在微机自动交换系统中稳定运行的设计
  MCS—51 单片机 在电力线载波通信中处理任务时的实时性尤为突出。由于该系统整机配置的主要服务对象是电力调度,且它的使用环境将来多为无人值守站,所以系统工作是否稳定直接影响到电力线载波机的整机性能。针对电力通信特点,在考虑稳定运行方面我们采取了以下几项措施。   1 设置上电延时复位电路   1.1 为什么要进行上电复位46   计算机在启动运行时都要进行复位。作为在控制领域中应用最广泛的单片机,复位处理更是设计中的关键。单片机内部的各个功能部件均受特殊功能寄存器控制,程序运行直接受程序计数器指挥,寄存器的复位状态决定了单片机内有关功能部件工作用的初始状态,而程序的正常运行就是从这个状态开始的。如果上电时没有做到正
[单片机]
<font color='red'>51单片机</font>在微机自动交换系统中稳定运行的设计
stm32f429 中通过基本定时器中断控制LED灯亮一秒、灭一秒
stm32f429中基本定时器有两个,通用定时器有十个,高级定时器有两个。其中基本定时器为TIM6和TIM7。 此处通过编写TIM7定时中断控制LED灯亮灭,TIM6与之类似。 首先可以新建一个.c 和.h 文件,在.c文件中进行TIM7函数定义等,如下图所示: #include bsp_tim_basic.h static void BASIC_TIMx_Mode_Config() { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7,ENABLE);//开启时钟 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;//结构体
[单片机]
关于STM32中断的部分理解
中断这个问题从学习stm32一开始就困扰着我,我想估计很多初学者都会有这样的问题。曾经问过隔壁实验室的职工,人家没告诉我,让我自己回去理解。同行是冤家,这句话很在理。 首先提出我对几个中断的理解不了的问题: 1、中断是干嘛的? 2、中断是如何从函数进入的? 3、中断相关设置是如何设置的? 第一个问题:关于中断可以有一个很形象的解释:你正在吃饭,突然尿急了,准备去尿尿,中断了吃饭的这一过程。从程序上解释就是吃饭可以分解为一系列的动作,称为主程序,每个动作相当于函数,组成了这个主程序。这时候你尿急了,产生了一个信号,相当于中断信号,告诉大脑CPU,现在尿急比较重要,不然会尿裤子。这时候大脑会停下吃饭这一主程序,去执行撒尿这程序
[单片机]
PIC中档单片机的中断总结
与51或者其他系列的单片机相比,PIC 单片机的中断机制有其特殊之处,针对我们一些初学者存在的一些问题和疑惑,我在此做一个个人总结,不当的地方,请站友们指正。 先摘引三个对PIC中断理解的回帖,然后我再对中断活动的过程、应该注意的事项、及一个疑惑进行较详细的总结和解释。 --------------- john frank :关于pic中断有些不明白的地方 借用大虾的程序; ;******************** 中断服务代码 btfss INTCON,T0IE ; 判断是否为T0中断 goto other_int btfss INTCON,T0IF ; it ’s the t
[单片机]
基于51单片机-C语言之预处理总结
简介:编译预处理器是C语言编译器的一个重要组成部分。很好的利用C语言的预处理命令可以增强代码的可读性,灵活性,和易于修改等特点,便于程序的结构化。 预处理命令由符号“#”开头,包括宏定义,文件包含,条件处理三个部分。 其中条件编译我还没有用过,所以就详细介绍一下宏定义和文件包含。 一.宏定义 宏定义命令为#define,它的作用就是实现用一个简单易读的字符串来代替 另一个字符串。增加程序的可读性,和维护性。 宏定义分为不带参数的宏定义,和带参数的宏定义。 不带参的宏定义: 一般格式:#define 标识符 常量表达式 例如用一个字符代替一个常数 #define PI 3.1415926
[单片机]
中断中处理延时及一些函数的调用规则
1,中断处理程序中不能使用有睡眠功能的函数,如ioremap,kmalloc,msleep等,理由是中断程序并不是进程,没有进程的概念,因此就没有休眠的概念; 2,中断处理程序中的延时可以用忙等待函数来代替,如ndelay,udelay,mdelay等,这些函数在实现上本质是根据CPU频率进行一定次数的循环;最好不要使用mdelay,因为毫秒延时对内核来说已经是非常大了。但是在中断处理程序中使用msleep却不行。(见linux设备驱动开发详解第二版p210页) 3,printk函数在中断处理函数中可以使用,但是会占用较多时间,降低效率。在调IIC驱动的时候,由于IIC读取写入处理时必须进行一定延时,在我没有使用udela
[单片机]
AVR外部中断实验程序
简介:用按键控制 1位led数码管显示,只是简单的测试对外部中断的响应。 程序没加按键消抖处理,果然抖得厉害。 /***************************************************** This program was produced by the CodeWizardAVR V2.05.5a Evaluation Date : 2011/12/13 Author : Freeware, for evaluation and non-commercial use only Chip type : ATmega16 Program type : Application AVR
[单片机]
基于利用89C51单片机的微波脉冲测试系统设计方案
1工作原理 本系统充分利用89C51单片机的控制和计算能力,采用MCS-51汇编语言,设计了一种基于平均功率法的微波脉冲测试系统。 平均功率法测量的是射频脉冲复重周期的平均功率,并采用辅助方法测出脉冲的占空系数。设脉冲为矩形,宽度为τ,重复周期为T。则脉冲峰值功率为: 上式中,Q=τ/T是射频脉冲的占空系数。 测量时,用示波器显示其脉冲波形,并测量脉冲重复周期T和宽度τ。用测量连续波功率的方法测出脉冲的平均功率Pav。 当使用衰减器和定向耦合器时,若衰减器两端匹配时的衰减量为A(dB),定向耦合器的过渡衰减量为C(dB),方向性为无穷大,则脉冲峰值功率为 当脉冲为非理想矩形时,须乘以修正系数K进行修正,即Ppp
[单片机]
基于利用89C<font color='red'>51单片机</font>的微波脉冲测试系统设计方案
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved