(基于江协科技)51单片机入门:9.蜂鸣器
蜂鸣器
蜂鸣器是一种将电信号转换为声音信号的器件
蜂鸣器按驱动方式分可分:
1.有源蜂鸣器
内部自带震荡源,将正负极接上直流电压即可持续发声,频率固定
2.无源蜂鸣器
内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音
蜂鸣器的BZ于步进电机模块接通
ULN2003D
会进行取反 7B 给 1 ,7C收到0
7B 给 0 ,7C收到1
所以7B 给 1 才能驱动蜂鸣器
也就是控制P15,去控制蜂鸣器
低音a为基准频率 440
中音a 是低音的两倍 880
高音 a 是低音的4被 1760
低音a和低音a#的差值是 440*2^(1/12)
1/12=0.083
2^0.083=1.0592
440*1.0592=466.048
1.矩阵按键按下驱动蜂鸣器
#include <REGX52.H>
#include "key.h"
#include "Delay.h"
sbit buzzer = P2^5;void lig(int num1,int num2)
{unsigned char arr[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F };switch(num1){case 1:P2_4=0,P2_3=0,P2_2=0;break;case 2:P2_4=0,P2_3=0,P2_2=1;break;case 3:P2_4=0,P2_3=1,P2_2=0;break;case 4:P2_4=0,P2_3=1,P2_2=1;break;case 5:P2_4=1,P2_3=0,P2_2=0;break;case 6:P2_4=1,P2_3=0,P2_2=1;break;case 7:P2_4=1,P2_3=1,P2_2=0;break;case 8:P2_4=1,P2_3=1,P2_2=1;break;}P0 = arr[num2];
}int main()
{unsigned char ret_key = 0;unsigned int i = 0;while(1){ret_key = key();if(ret_key){for(i = 0; i < 500; i++){buzzer = !buzzer;Delay(1);}lig(1,ret_key%10);}}return 0;
}