MCU

您所在的位置:网站首页 播放小行星的声音是什么 MCU

MCU

2024-07-10 15:22:42| 来源: 网络整理| 查看: 265

目录 一、蜂鸣器介绍二、驱动电路2.1 三极管驱动2.2 集成电路驱动 三、蜂鸣器播放音乐3.1 键盘与音符对照3.2 音符与频率对照3.3 简谱 四、代码演示4.1 按键蜂鸣器播放提示音4.2 小星星 注意:一定要看

一、蜂鸣器介绍

蜂鸣器是一种将电信号转换为声音信号的器件,常用来产生设备的按键音、报警音等提示信号 蜂鸣器按驱动方式可分为有源蜂鸣器和无源蜂鸣器 有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定 无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音

在这里插入图片描述

二、驱动电路 2.1 三极管驱动

在这里插入图片描述

2.2 集成电路驱动

在这里插入图片描述 在这里插入图片描述

三、蜂鸣器播放音乐 3.1 键盘与音符对照

在这里插入图片描述

3.2 音符与频率对照

在这里插入图片描述

3.3 简谱

在这里插入图片描述

四、代码演示 4.1 按键蜂鸣器播放提示音

main.c

#include #include "Delay.h" #include "key.h" #include "Nixie.h" #include "Buzzer.h" unsigned char KeyNum; void main() { Nixie(1,0); while(1) { KeyNum=Key(); if(KeyNum) { Buzzer_Time(100); Nixie(1,KeyNum); } } }

Nixie.c

#include #include "Delay.h" //包含Delay头文件 //数码管段码表 unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //数码管显示子函数 void Nixie(unsigned char Location,Number) { switch(Location) //位码输出 { case 1:P2_4=1;P2_3=1;P2_2=1;break; case 2:P2_4=1;P2_3=1;P2_2=0;break; case 3:P2_4=1;P2_3=0;P2_2=1;break; case 4:P2_4=1;P2_3=0;P2_2=0;break; case 5:P2_4=0;P2_3=1;P2_2=1;break; case 6:P2_4=0;P2_3=1;P2_2=0;break; case 7:P2_4=0;P2_3=0;P2_2=1;break; case 8:P2_4=0;P2_3=0;P2_2=0;break; } P0=NixieTable[Number]; //段码输出 // Delay(1); //显示一段时间 // P0=0x00; //段码清0,消影 }

Buzzer.c

#include #include #include "Delay.h" //蜂鸣器端口 sbit Buzzer=P2^5; /** * @brief 蜂鸣器私有延时函数,延时500us * @param 无 * @retval 无 */ void Buzzer_Delay500us() //@12.000MHz { unsigned char i; _nop_(); i = 247; while (--i); } /** * @brief 蜂鸣器发声 * @param ms 发声时长 * @retval 无 */ void Buzzer_Time(unsigned int ms) { unsigned int i; for(i=0;i unsigned char KeyNumber=0; if(P3_1==0) { Delay(20);while(P2_1==0);Delay(20);KeyNumber=1; } if(P3_0==0) { Delay(20);while(P2_0==0);Delay(20);KeyNumber=2; } if(P3_2==0) { Delay(20);while(P2_2==0);Delay(20);KeyNumber=3; } if(P3_3==0) { Delay(20);while(P2_3==0);Delay(20);KeyNumber=4; } return KeyNumber; }

key.h

#ifndef __KEY_H__ #define __KEY_H__ unsigned char Key(); #endif

Delay.c

void Delay(unsigned int i) { while(i--); }

Delay.h

#ifndef __DELAY_H__ #define __DELAY_H__ void Delay(unsigned int i); #endif 4.2 小星星 #include #include "Delay.h" #include "Timer0.h" //蜂鸣器端口定义 sbit Buzzer=P2^5; //播放速度,值为四分音符的时长(ms) #define SPEED 50 //索引与频率对照表 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, 14,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 char FreqSelect,MusicSelect; void main() { Timer0_Init(); while(1) { if(Music[MusicSelect]!=0xFF) //如果不是停止标志位 { FreqSelect=Music[MusicSelect]; //选择音符对应的频率 MusicSelect++; Delay(SPEED/4*Music[MusicSelect]); //选择音符对应的时值 MusicSelect++; TR0=0; Delay(5); //音符间短暂停顿 TR0=1; } else //如果是停止标志位 { TR0=0; while(1); } } } void Timer0_Routine() interrupt 1 { if(FreqTable[FreqSelect]) //如果不是休止符 { /*取对应频率值的重装载值到定时器*/ TL0 = FreqTable[FreqSelect]%256; //设置定时初值 TH0 = FreqTable[FreqSelect]/256; //设置定时初值 Buzzer=!Buzzer; //翻转蜂鸣器IO口 } } 注意:一定要看

千万不要直接复制代码,因为是模块化编写,模块的代码没有往上复制,大家一定要自己动手跟着教学视屏自己写!!!!!



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭