精华内容
下载资源
问答
  • 51单片机 中断控制蜂鸣器

    千次阅读 2020-02-21 17:30:23
    51单片机 中断控制蜂鸣器 单片机通过使用外部中断控制蜂鸣器。 #include <reg51.h> #define uint unsigned int #define uchar unsigned char // 定义蜂鸣器连接的引脚 sbit beep = P1^0; // 延时...

    51单片机 中断控制蜂鸣器


    单片机通过使用外部中断控制蜂鸣器。

    #include <reg51.h>
    
    #define uint unsigned int
    #define uchar unsigned char
    
    // 定义蜂鸣器连接的引脚
    sbit beep = P1^0;
    
    // 延时函数
    void delay(uint x)
    {
        uchar i;
        while(x--)
            for(i=0;i<120;i++);
    }
    
    // 初始化外部中断1
    void INT1_Init()
    {
        EA=0;
        EX1 = 1;
        IT1 = 1;
        EA = 1;
    }
    
    
    void main()
    {
        // 调用初始化中断1
        INT1_Init()
        while(1)
        {
        }
    }
    
    // 外部中断1
    void INT1_int1() interrupt 2
    {
        delay(10); // 延时消抖
        if(!INT1)
        {    
            beep=INT1;
            while(1)  // 蜂鸣器响
            {
                beep =~beep;
                delay(1); 
                if(INT1) // 如果按钮松开
                {
                    beep = INT1;
                    break;
                }
            }
                
        } 
    }

       

     

    展开全文
  • 本资源为用51单片机控制蜂鸣器发声,语言为C语言,有代码注释
  • 我写的程序如下,出学者咨询大老问题在哪#include typedef unsigned char uch; typedef unsigned long uint; sbit power=P3^3; sbit beep=P1^5; void delay(uint i) { while(i--); } void duan() { EX0=1;...
  •   初学51单片机第一个实验一般都是...  示波器、LED、电压表、蜂鸣器、AT89C51 实验电路图: 实验代码: #include <reg52.h> #define uchar unsigned char #define uint unsigned int uint i = 0; sbit b...

      初学51单片机第一个实验一般都是以点亮LED灯开始,以下是使用Proteus仿真软件的实验效果。
      实验需要仿真仪器:
      示波器、LED、电压表、蜂鸣器、AT89C51

    实验电路图:

    在这里插入图片描述

    实验代码:

    #include <reg52.h>
    #define uchar unsigned char
    #define uint unsigned int
    uint i = 0;
    sbit buzzer = P2^1;
    sbit led=P2^0;		 //将单片机的P2.0端口定义为led
    
    void delay(uint i)
    {
    	while(i--);	
    }
    
    //定时器T0初始化
    void Timer0init()
    {   //设置T0
        TMOD|=0X01; //选择为定时器0模式,工作方式1,仅用TR0打开启动
        TH0=0x0F8;	//给定时器赋初值,定时0.5ms  
        TL0=0x30;	 
        ET0=1;      //打开定时器0中断允许 
        EA=1;       //打开总中断
        TF0=0;      //溢出位清零 
        TR0=1;      //打开定时器	
    }
    void Timer0() interrupt 1
    {
    		uchar count;
        TH0=0x3c;	//给定时器赋初值
        TL0=0xb0;
    		count++;	//计时变量加
    		if(count==10)//定时器定时是50ms,此处计数10次,正好是500ms
    		{
    			buzzer = ~buzzer;
    			delay(10);
    			count = 0;
    			TR0 = 0;
    		}
    		TR0 = 1;
        
    }
    
    
    void main(void)
    {   
    		Timer0init();   //定时器T0初始化 	
        while(1)
    	{
    		led=1;
    		delay(50000); //大约延时450ms
    		led=0;
    		delay(50000); //大约延时450ms	
    	}		 
    }
    

    效果截图:

    在这里插入图片描述
    从示波器可以看出,这次中断产生的PWM效果并不是太好。

    展开全文
  • 资料包含以下内容: 1.项目需求文档 2.硬件原理图和资源配置文档 3.源代码 4.STM8S003的datasheet 5.音乐乐谱相关学习资料...本资料对学习单片机定时器控制中断服务中IO控制、声音相关、项目资料整理有着很大的帮助
  • #51单片机# 用中断实现蜂鸣器

    千次阅读 2020-02-19 21:26:28
    蜂鸣器常作为提示音,用于计算机、打印机、万用表等设备中。提示音一般很简单,能响就行。 下面这段程序用到了中断...//蜂鸣器控制引脚 unsigned char T0RH = 0;//T0重载值的高字节 unsigned char T0RL = 0;//T0重...
    蜂鸣器常作为提示音,用于计算机、打印机、万用表等设备中。提示音一般很简单,能响就行。

    某单片机的蜂鸣器原理图:
    一张蜂鸣器原理图
    该单片机的CPU原理图:
    与之配套的CPU原理图
    下面这段程序用到了中断的算法,实现了蜂鸣器在4kHz和1kHz频率下的发声。

    #include <reg52.h>
    
    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;//反转蜂鸣器控制电平
    }
    
    展开全文
  •  //开总中断,T0中断 flag2=0; // flag1=0; key=1; k_max=3; //最大键值(取值范围1~254) n=0; i=0; p_music=music_table1; //指针赋初值 while (1) { switch (p_music[i]) { case 0x00: i=0; //歌曲完,则停止...

    #include

    sbit spek=P3^7;  //声音输出端

    sbit set=P3^2;  //设定及退出键,按奇数次为设定功能;偶数次为退出功能

    sbit up=P3^1;  //上一曲

    sbit down=P3^0;  //下一曲

    bit flag1,flag2;  //按键扫描标志位,新键值标志位

    unsigned char f_t,n,i,key,k_max; //音符频率对应的二分之一周期值,节拍常数值,查表用计数器,键值,最大键值

    unsigned char *p_music;  //指向音乐数据数组的指针

    void timer_ms(unsigned char tim);  //毫秒级延时函数声明

    void timer_us(unsigned char t);  //微秒级延时函数

    void key_scan(void);  //按键扫描函数

    void key_manage();  //键值处理函数

    //格式为:频率常数,节拍常数,频率常数,节拍常数

    unsigned char code music_table1[]={

    0x18,0x30,0x1c,0x10,0x20,0x40,0x1c,0x10,0x18,

    0x10,0x20,0x10,0x1c,0x10,0x18,0x40,0x1c,0x20,

    0x20,0x20,0x1c,0x20,0x18,0x20,0x20,0x80,0xff,

    0x20,0x30,0x1c,0x10,0x18,0x20,0x15,0x20,0x1c,

    0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2b,0x20,

    0x26,0x20,0x20,0x20,0x30,0x80,0xff,0x20,0x20,

    0x1c,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2b,

    0x20,0x30,0x20,0x2b,0x40,0x20,0x20,0x1c,0x10,

    0x18,0x10,0x20,0x20,0x26,0x20,0x2b,0x20,0x30,

    0x20,0x2b,0x40,0x20,0x30,0x1c,0x10,0x18,0x20,

    0x15,0x20,0x1c,0x20,0x20,0x20,0x26,0x40,0x20,

    0x20,0x2b,0x20,0x26,0x20,0x20,0x20,0x30,0x80,

    0x20,0x30,0x1c,0x10,0x20,0x10,0x1c,0x10,0x20,

    0x20,0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x40,

    0x20,0x15,0x1f,0x05,0x20,0x10,0x1c,0x10,0x20,

    0x20,0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x40,

    0x20,0x30,0x1c,0x10,0x18,0x20,0x15,0x20,0x1c,

    0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2b,0x20,

    0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1c,

    0x10,0x18,0x40,0x1c,0x20,0x20,0x20,0x26,0x40,

    0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,

    0x80,0x00}; //八月桂花香

    unsigned char code music_table2[]={

    0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,

    0x10,0x20,0x80,0x26,0x20,0x30,0x20,0x30,0x20,

    0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,

    0x20,0x20,0x20,0x1c,0x20,0x20,0x80,0x2b,0x20,

    0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,

    0x80,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,

    0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,

    0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,

    0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,0x2b,

    0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,

    0x2b,0x20,0x2b,0x40,0x40,0x20,0x20,0x10,0x20,

    0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,

    0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x40,0x26,

    0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,

    0x20,0x20,0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,

    0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,

    0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,

    0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,0x18,0x20,

    0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,

    0x10,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,

    0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,

    0x10,0x30,0x20,0x39,0x20,0x26,0x10,0x2b,0x10,

    0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,

    0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,

    0x00};  //祝你平安

    unsigned char code music_table3[]={

    0x20,40,0x26,20,0x20,20,0x17,80,0x1c,40,0x17,40,

    0x20,80,0x20, 40,0x2f,20,0x2a,20,0x26,40,0x2a,20,

    0x2f,20,0x2a,80,0xff,0x20,40,0x26,20,0x20,20,0x17,60,

    0x19,20, 0x1c,40,0x17,40,0x20,80,0x20,40,0x2a,20,

    0x26,20,0x24,60,0x32,20,0x2f,80,0xff,0x1c,40,0x17,40,

    0x17, 80,0x19,40,0x1c,20,0x19,20,0x17,80,0x1c,20,

    0x19,20,0x17,20,0x1c,20,0x1c,20,0x20,20,0x26,20,0x2f,20,

    0x2a,80,0xff,0x20,40,0x26,20,0x20,20,0x17,60,0x19,20,

    0x1c,40,0x17,40,0x20,80,0x20,40,0x2a,20,0x26, 20,

    0x24,60,0x32,20,0x2f,80,0xff,0x20,40,0x26,20,0x20,20,

    0x17,80,0x1c,40,0x17,40,0x20,80,0x20,40, 0x2f,20,0x2a,20,

    0x26,40,0x2a,20,0x2f,20,0x2a,80,0xff,0x20,40,0x26,20,

    0x20,20,0x17,60,0x19,20,0x1c, 40,0x17,40,0x20,80,0x20,40,

    0x2a,20,0x26,20,0x24,60,0x32,20,0x2f,80,0};  //送别

    main()

    {

    spek=0;

    P3=0x7f;

    TMOD=0x01;  //T0工作于方式1,即16位定时器模式

    IE=0x82;  //开总中断,T0中断

    flag2=0;  //

    flag1=0;

    key=1;

    k_max=3;  //最大键值(取值范围1~254)

    n=0;

    i=0;

    p_music=music_table1;  //指针赋初值

    while (1)

    {

    switch (p_music[i])

    {

    case 0x00: i=0;  //歌曲完,则停止0.5S后重新开始

    timer_ms(250);  //延时0.25ms

    timer_ms(250);

    break;

    case 0xff: i++;  //遇到休止符则停止100us

    timer_ms(250);

    timer_ms(250);

    break;

    default:   f_t=p_music[i++];

    n=p_music[i++];

    spek=1;

    TR0=1;

    while (n!=0)

    {

    spek=~spek;

    timer_us(4*f_t);  //改变f_t前面的系数可以调整音符频率的高低

    }

    TR0=0;

    spek=0;

    if(set==0)

    {

    key_scan();

    key_manage();

    }

    }

    }

    }

    /**************************************************************

    函数名称: 定时器0的中断处理程序 函数功能: 完成10毫秒定时 入口参数:

    出口参数:  其      它:   **************************************************************/

    void timer0() interrupt 1 using 2

    {

    TH0=(65536-10000)/256;  //定时10毫秒

    TL0=(65536-10000)%256;

    n--; }

    /**************************************************************

    函数名称: 延时程序  函数功能: 完成微秒级的延时  入口参数:

    t为需延时的时间(取值范围1~255;延时时间5~1275us) 出口参数:

    其      它:   **************************************************************/

    void timer_us(unsigned char t)

    {

    while (--t);  //本语句执行一次需5us的时间

    }

    /**************************************************************

    函数名称: 按键扫描函数 函数功能: 完成按键扫描处理  入口参数:

    应为在中断函数中被调用,所以不能有参数传递 出口参数:  其      它:

    **************************************************************/

    void key_scan(void)

    {

    timer_ms(10);  //延时10ms等待按键状态稳定

    if (set==0)  //再次确认

    {

    while (set==0);  //等待按键松开

    flag1=1;  //该位为1,表示进入按键扫描处理;为0,表示本次按键扫描处理完成

    while (flag1)

    {

    if (up==0)  //加一键

    {

    timer_ms(10);

    if (up==0)

    {

    while (!up);

    key++;

    if (key>k_max) key=1;

    }

    }

    if (down==0)  //减一键

    {

    timer_ms(10);

    if (down==0)

    {

    while (!down);

    key--;

    if (key<1) key=k_max;

    }

    }

    if (set==0)  //退出键

    {

    timer_ms(10);

    if (set==0)

    {

    while (set==0);

    flag1=0;  //表示本次按键扫描处理完成

    flag2=1;  //该位置1,表示有新键值要处理

    }

    }//以上键值处理的范围为1到254个键值

    }

    }

    }

    /**************************************************************

    函数名称: 键值处理函数  函数功能: 完成按键键值的处理

    入口参数: 应为在中断函数中被调用,所以不能有参数传递

    出口参数:  其      它:

    **************************************************************/

    void key_manage()

    {

    flag2=0;

    switch (key)

    {

    case 1: p_music=music_table1;  //键值为1 播放第一首乐曲

    goto kh1;

    case 2: p_music=&music_table2[0];  //键值为2 播放第2首乐曲

    goto kh1;

    case 3: p_music=&music_table3[0];  //键值为3 播放第3首乐曲

    goto kh1;

    default:  key=1;

    p_music=music_table1;

    kh1: TH0=(65536-10000)/256;

    TL0=(65536-10000)%256;

    break;

    }

    n=0;

    i=0;

    }

    /*----------------------------------------------------------------------------------------------------

    函数名称: timer_ms  函数说明: 1ms延时子程序  入口参数: tim为接收主调传来需延时的毫秒数,取值范围1~256,定时时间1~256ms

    出口参数: 其    它:  ----------------------------------------------------------------------------------------------------*/

    void timer_ms(unsigned char tim)

    {

    unsigned char j;

    while(tim--)

    {

    for(j=0;j<200;j++);   //延时1ms

    }

    }

    展开全文
  • 蜂鸣器是很常见的设备,分为无源和有源两种。根据项目需求选择不同类型的蜂鸣器。最近的项目里有用到有源蜂鸣器对有源蜂鸣器。还是老一套,把电路板画完,接着编程。在项目中原理图如下:如果不能保证I/O的输出性能...
  • 51单片机AT89C52控制蜂鸣器proteus仿真
  • 基于51单片机的倒计时设计2015-07-22 10:53:04来源:51heivoid Displaypro(void){StrTab[0]=tab[hour/10]; //存储小时StrTab[1]=tab[hour%10];StrTab[2]=0x40; //存储"-"StrTab[3]=tab[minute/10];...
  • 单片机控制蜂鸣器和弦音发音程序

    千次阅读 2017-11-16 16:56:00
    // 函数功能:蜂鸣器控制 - // 入口參数:无 // 出口參数:无 // 返 回 值:无 //*************************************** void CmdBzhx(void) { static tBuzHx Bx1 ; switch(RBzStatus) { case MBZ_P1 : ...
  • 单片机蜂鸣器

    千次阅读 2019-08-21 11:24:30
    我们很多的案例实际上就是用来检测我们的单片机上的零件等是否能正常使用,我们已经测试了很多的二极管,数码管等,对于我们的发生装置还没有一定的了解,故我们现在学习一下蜂鸣器和可变调的蜂鸣器 蜂鸣器 实验...
  • 下面就直接进入正题,按键中断控制LED蜂鸣器,首先确定按键属于输入信号,需要向开发板输入电平来对LED灯和蜂鸣器进行控制,那么我们需要做的分为以下几步: 首先查看开发板原理图,确定你所需要控制的KEY和LED以及...
  • 1、 实验目的了解单片机定时器中断原理学会单片机定时器中断蜂鸣器结合的用法;2、 实验设备装有sdcc交叉编译环境,Python烧写工具,装有Linux的系统;51单片机开发板 1 个,USB 数据线 1 根,跳线帽 1 个3、 实验...
  • keil MDK s3c2440 按键 中断 led 蜂鸣器
  • 51单片机驱动蜂鸣器发声教程(扫盲)

    万次阅读 多人点赞 2019-03-25 14:27:44
    51单片机 蜂鸣器 蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加...
  • //设置中断触发方式:0——低电平触发 1——下降沿触发 (测试方法:长按效果) EX0 = 1; //打开外部中断 EA = 1; //打开总中断 } void INT0_ISR() interrupt 0 { EX0 = 0; //关闭外部中断 delay_2ms(5); ...
  • 通过采用C#语言实现的上位机控制单片机的步进电机模块、LED灯和蜂鸣器模块,使步进电机进行正、反转和停止并控制转速;LED灯模块进行有选择的呼吸式表达;蜂鸣器模块的开始和终止。 上位机通过串口和自定义的通信...
  • 单片机中级项目9丨按键控制蜂鸣器 #include<reg51.h> //宏定义 #define uchar unsigned char #define LED P2 //全局变量 uchar Time; void main(void) { uchar data1=0xfe; TMOD = 0x01; //选择...
  • 蜂鸣器从结构区分分为压电式蜂鸣器和电磁式蜂鸣器。压电式为压电陶瓷片发音,电流比较小一些,电磁式蜂鸣器为线圈通电震动发音,体积比较小。按照驱动方式分为有源蜂鸣器和无源蜂鸣器。这里的有源和无源不是指电源,...
  • -- @File: main.c ---- @Edit: ZHQ ---- @Version: V1.0 ---- @CreationTime: 20200505 ---- @ModifiedTime: 20200505 ---- @Description: LED闪烁,蜂鸣器报警 ---- 单片机:AT89C52 *****************************...
  • 单片机蜂鸣器控制程序和驱动电路

    千次阅读 2016-12-27 15:24:03
    蜂鸣器从结构区分分为压电式蜂鸣器和电磁式蜂鸣器。压电式为压电陶瓷片发音,电流比较小一些,电磁式蜂鸣器为线圈通电震动发音,体积比较小。 按照驱动方式分为有源蜂鸣器和无源蜂鸣器。这里的有源和无源不是指...
  • 作者:阿莫amigenius,排版整理:晓宇微信公众号:芯片之家(ID:chiphome-dy)阿莫上有位兄弟发帖问蜂鸣器如何产生清脆的“叮叮”的声音,帖子不小心????了。很快就盖了100多层楼,大家普遍都很感兴趣,ID为amigenius...
  • 目前单片机是掌握嵌入式开发技术的基础,而单片机的种类多样,因此单片机控制...本篇文章以51单片机开发的流水灯、数码管、独立按键、蜂鸣器的结合案例进行分析学习,没有涉及太多那种随便一找都能翻到的知识讲解。
  • LED闪烁+按键控制蜂鸣器简介配置方法(轮询法)1. 配置LED2....硬件需求:STM32单片机,LED灯,按键,蜂鸣器 配置方法(轮询法) 1. 配置LED 实现LED初始化函数LED_Init(); 2.配置延时 实现延时
  • 关于单片机--蜂鸣器输出音调设置

    万次阅读 多人点赞 2018-06-10 18:51:24
    单片机的晶振为12MHz,那么定时器将在1us进行一次加 1 . 加到65536就会出现中断。 据此,就可计算出定时器定时半个周期所需的初值,如下表中所示:  4. 定时器初值:   将以上计算所得的值,作为定时器初值,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,795
精华内容 1,118
关键字:

单片机中断控制蜂鸣器