首页 > 其他分享 >51单片机(普中板)蜂鸣器控制

51单片机(普中板)蜂鸣器控制

时间:2023-04-25 12:35:08浏览次数:33  
标签:buzzer FreqTable 蜂鸣器 MusicSelect 51 unsigned 单片机 Music FreqSelect

蜂鸣器通过震荡脉冲控制

1,尝试发声

#include <REGX52.H>
#include "Delay.h"


sbit buzzer = P2^5; // 蜂鸣器端口
unsigned int i; //演奏时长 void main() { while(1) { for (i=0 ; i < 500; i++) { buzzer =! buzzer; Delay(100); //100*100us = 10000us = 10ms = 0.01s = 100hz } } }

 2,演奏音乐(演奏完停止)

#include <REGX52.H>
#include "Timer0.h"
#include "Delay.h"

// 蜂鸣器端口
sbit buzzer = P2^5;
# define step 250

//索引与频率对照表
unsigned int FreqTable[]={
    0,
    63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,
    64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,
    65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283,
};
// 音符集
unsigned char Music[] = {
    13,4,
    13,4,
    20,4,
    20,4,
    22,4,
    22,4,
    20,4+4,
    0,4,
    18,4,
    18,4,
    17,4,
    17,4,
    15,4,
    15,4,
    13,4+4,
    0xff  // 截至符
};
// 
unsigned int FreqSelect,MusicSelect;

void main()
{
    Timer0_Init(); // us
    while(1)
    {
        if (Music[MusicSelect] != 0xff)
        {
                FreqSelect = Music[MusicSelect];
                MusicSelect ++;
                
                Delay1ms(step/4*Music[MusicSelect]);
                MusicSelect ++;
                
                TR0 = 0;
                Delay1ms(5);
                TR0 = 1;
        }
        else
        {
            TR0 = 0;
            while(1);
        }
        
    }
}

// 定时其中断函数
void Timer0() interrupt 1
{    
    if (FreqTable[FreqSelect])
    {
        TH0 = FreqTable[FreqSelect] / 256;                //设置定时初始值
        TL0 = FreqTable[FreqSelect] % 256;                //设置定时初始值
        buzzer =! buzzer;
    }

}

3,演奏音乐(循环播放)

#include <REGX52.H>
#include "Timer0.h"
#include "Delay.h"

// 蜂鸣器端口
sbit buzzer = P2^5;
# define step 250

//索引与频率对照表
unsigned int FreqTable[]={
    0,
    63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,
    64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,
    65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283,
};
// 音符集
unsigned char Music[] = {
    13,4,
    13,4,
    20,4,
    20,4,
    22,4,
    22,4,
    20,4+4,
    0,4,
    18,4,
    18,4,
    17,4,
    17,4,
    15,4,
    15,4,
    13,4+4,
    0xff  // 截至符
};
// 
unsigned int FreqSelect,MusicSelect;

void main()
{
    Timer0_Init(); // us
    while(1)
    {
        if (Music[MusicSelect] != 0xff)
        {
                FreqSelect = Music[MusicSelect];
                MusicSelect ++;
                
                Delay1ms(step/4*Music[MusicSelect]);
                MusicSelect ++;
                
                TR0 = 0;
                Delay1ms(5);
                TR0 = 1;
        }
        else
        {
            MusicSelect  = 0;
        }
        
    }
}

// 定时其中断函数
void Timer0() interrupt 1
{    
    if (FreqTable[FreqSelect])
    {
        TH0 = FreqTable[FreqSelect] / 256;                //设置定时初始值
        TL0 = FreqTable[FreqSelect] % 256;                //设置定时初始值
        buzzer =! buzzer;
    }

}

音符与频率对照表:

 

#in

clude <REGX52.H>

#include "Timer0.h"#include "Delay.h"
// 蜂鸣器端口sbit buzzer = P2^5;# define step 250
//索引与频率对照表unsigned int FreqTable[]={0,63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283,};// 音符集unsigned char Music[] = {13,4,13,4,20,4,20,4,22,4,22,4,20,4+4,0,4,18,4,18,4,17,4,17,4,15,4,15,4,13,4+4,0xff  // 截至符};// unsigned int FreqSelect,MusicSelect;
void main(){Timer0_Init(); // uswhile(1){if (Music[MusicSelect] != 0xff){FreqSelect = Music[MusicSelect];MusicSelect ++;Delay1ms(step/4*Music[MusicSelect]);MusicSelect ++;TR0 = 0;Delay1ms(5);TR0 = 1;}else{TR0 = 0;while(1);}}}
// 定时其中断函数void Timer0() interrupt 1{if (FreqTable[FreqSelect]){TH0 = FreqTable[FreqSelect] / 256;//设置定时初始值TL0 = FreqTable[FreqSelect] % 256;//设置定时初始值buzzer =! buzzer;}
}

标签:buzzer,FreqTable,蜂鸣器,MusicSelect,51,unsigned,单片机,Music,FreqSelect
From: https://www.cnblogs.com/lld76/p/17350293.html

相关文章

  • 51单片机(普中板)函数库
    外部中断Into.c#include<REGX52.H>voidInto_Init(){IT0=1;//1:下降沿触发;0:低电平触发IE0=0;EX0=1;EA=1;PX0=1;//触发优先级}/*voidInto_Routine(void)interrupt0{}*/Into.h#ifndef__Into_H__#define__Into_......
  • 51 Nod 2497 数三角形 二分
    小b有一个仅包含非负整数的数组a,她想知道有多少个三元组(i,j,k),满足i<j<k且a[i],a[j],a[k]可能作为某个三角形的三条边的边长。 收起 输入第一行输入一个正整数n,表示数组a中元素个数;第二行n个非负整数,表示a中元素,以空格隔开;其中0<n≤1000,a中任意元素a[i]满......
  • Movie collection UVA - 1513
    有n个影碟,标号为1~n,位置为0~n-1,每次取出一个影碟看完后,将其放在最前面(标号为0处),问每个影碟取出前,其位置之前有多少个影碟 开2倍数组,"i放置前面"这个操作add(i,-1),add(newi,1)  #include<iostream>#include<cstring>#include<algorithm>#include<vector>usingn......
  • C51笔记-郭天祥-第二章 从点灯大师开始
    第2章  Keil软件的使用及流水灯设计 Keil的用法:用Keil建立工程;            工程配置;            C51单片机程序软件仿真、单步、全速、断点设置和变量查看等; 用一个完整的C51程序操控LED亮灭;调用库函数实现流水灯;蜂鸣器与继电器的操作方法,集......
  • 51单片机 90g360°舵机控制
    主函数main#include<REGX52.H>#include"Delay.h"#include"Timer0.h"unsignedcharcount=0;unsignedcharpwm;voidTimer0()interrupt1{//每隔0.1ms=100us进入TH0=65435/256;//设置定时初始值TL0=6......
  • 全志v851s 的uart3 设置成普通串口收发
    本文转载自:https://bbs.aw-ol.com/topic/3281/由于UART0被设定为系统dubug输出(简单来说就是将ttyS0设定为console),所以使用UART3作为普通的串口,进行与别的设备通信。1.查看硬件电路图SCH_Schematic1_2022-11-23,查看uart3的TXRXpin脚电路图pdf路径:Yuzukilizard/Hardware/......
  • 为什么单片机编程放不下超过32万的整数?
    因为你的单片机可能是16位的,c语言16位编译器的int类型占2字节,也就是范围:-2^15~2^15-1 (-32768~32767)。32位的编译器int类型占4字节。这种情况下可以使用longint(16位编译器4字节),也可以使用循环处理整数。 ......
  • 51单片机学习笔记 STC89C52RC (05)矩阵键盘和独立键盘(轻触开关)
    按键抖动,需要消抖 原理图来自清翔电子一、独立键盘模块1.可以直接获取 P3^0对应S2 P3^1对应S3 P3^2对应S4 P3^3对应S5 的电压当轻触开关按下时,电流会流向GND,此时这一路的电压为0V,松开轻触开关,又变为5V //第一种方法:单个I/O口检测控制#include<reg51.h>sbi......
  • 正确使用 51CTO博客—Markdown 的排版事例
    这是一篇关于讲解如何正确使用51CTO博客-Markdown的排版示例,希望通过此,大家都能轻松上手,都能通过Markdown能够让自己的文章有更加出色、更清晰明了的排版。什么是MarkdownMarkdown(MD)是现在普遍使用的一种文档书写语言格式,只需用一些非常简单易记的符号,如(#*/>[]()\),......
  • 51单片机学习笔记 STC89CRC (04)数码管和锁存器
    一、数码管 点亮:共阴极给高电平,共阳级给低电平,二进制点亮顺序为  dpgfedcba想要显示1,就可以给0x06, //00000110,bc亮起显示1.0x3F,//"0"0x06,//"1"0x5B,//"2"0x4F,//"3"0x66,//"4"0x6D,//"5"......