心地よい音を奏でる51マイコンブザー
1。概要
この記事では、マイコンを使用してブザーを制御するための小さな入門実験を紹介します。この実験を通じて、ブザーの音の原理を習得し、音を制御して聴きたい音楽を作り出すことができます。
2. ブザー音
2.1.ハードウェア原理
1. ブザーの正極はマイクロコントローラーのピン 20 (VCC) に接続され、負極はピン 19 (P1.7) に接続されます。 2. 20MHZ
水晶発振器はマイクロコントローラーのピン 4 と 5 に接続されます。 XTAL2 と XTAL1 それぞれ
3. 水晶発振器の各ピンは 30pf のコンデンサに接続されています マイクロコントローラ ピン 10 GND
2.2. ブザーサウンドコード
関数内のディレイ関数の値をmain
変更してDELAY_MS()
ブザー音の変化を観察し、電流周波数の変化によってブザー音がどのように変化するかを体感的に理解してください。
/*************************************************************
* 程序名:控制蜂鸣器发声
* 编写人:bruce
* 日 期:2023-11-26
* 修改日志:开始编写
/*************************************************************/
#include<STC12C2052AD.H>
sbit BEEP = P1^7;
/*********************************************************************************************
函数名:毫秒级CPU延时函数
调 用:DELAY_MS (?);
参 数:1~65535(参数不可为0)
返回值:无
结 果:占用CPU方式延时与参数数值相同的毫秒时间
备 注:应用于1T单片机时i<600,应用于12T单片机时i<125
/*********************************************************************************************/
void DELAY_MS (unsigned int a){
unsigned int i;
while( --a != 0){
for(i = 0; i < 600; i++);
}
}
void main(){
while(1){
BEEP = 1;
DELAY_MS(2);
BEEP = 0;
DELAY_MS(2);
}
}
3.電子キーボード
ブザーは、マイクロコントローラーを介して電流のデジタル信号の方形波の幅を制御することによって、さまざまな音を発します。
3.1. キーボード 電子キーボード
1.ハードウェア原理
回路図と物理図に従ってハードウェアを接続します。
2. 8鍵電子キーボードプログラム
/*************************************************************
* 程序名:控制蜂鸣器发声
* 编写人:bruce
* 日 期:2023-11-26
* 修改日志:开始编写
/*************************************************************/
#include<STC12C2052AD.H>
sbit SPEAKER = P3^7;
#define KEY P1
unsigned char MUSIC;
unsigned char STH0;
unsigned char STL0;
// tab数组中的值是乐谱中音调对应HZ频率值
unsigned int code tab[]={
64021,64103,64260,64400,//低音3开始
64524,64580,64684,64777,
64820,64898,64968,65030,
65058,65110,65157,65178
};
void main(void){
TMOD=0x01;
ET0=1;
EA=1;
KEY = 0xff;
while(1){
if(KEY != 0xff){
switch (~KEY){
//显示的列位置
case 0x01://
MUSIC = 7;
break;//
case 0x02://
MUSIC = 6;
break;//
case 0x04://
MUSIC = 5;
break;//
case 0x08://
MUSIC = 4;
break;//
case 0x10://
MUSIC = 3;
break;//
case 0x20://
MUSIC = 2;
break;//
case 0x40://
MUSIC = 1;
break;//
case 0x80://
MUSIC = 0;
break;//
}
// 用数组的值/256获取十六进制的值
STH0=tab[MUSIC]/256;
STL0=tab[MUSIC]%256;
TR0=1;
}else{
SPEAKER = 1;
TR0=0;
}
}
}
// 定义计数器的起始值,来控制电流方形波的宽度,改变发声的音调。
void t0(void) interrupt 1 using 0{
TH0=STH0;
TL0=STL0;
SPEAKER=~SPEAKER;
}