① 怎样控制51单片机的蜂鸣器发出不同频率的声音
用定时器来产生频率,如产生100Hz的声音。x0dx0a思路:x0dx0a100Hz即每秒变换200次,每次的时间就是1/200秒=0.005秒=5毫秒。x0dx0a计算定时器的初值:TH0 = 0x0EE; TL0 = 0x00;x0dx0a x0dx0a#include
② 51单片机如何把矩阵键盘控制数码管和独立键盘控制蜂鸣器共同实现
我们先了解矩阵键盘的工作原理,掌握编码方法并能够编写出扫描程序,使用矩阵键盘控制数码管输出矩阵键值。
显示内容
在显示备橘祥模块的八位 LED 数码的个位显示当前使用矩阵键盘所按下的值。
键阵键盘多用于键伍李数目较多的时候。这样可以更多的节省IO口的占用量,
对于矩阵键盘常用的扫描方法为线反转查询法。具体的思路是:首先使行作为输入,使用单片机内部仿搏电阻上拉为高电平,列输出低电平,读行的状态。如果行有一个IO口是低,说明有键按下,进行下一步,否则退出扫描。如果有键按下,置列为输入,行输出低电平,读列的状态。最后根据
行列的状态查表就可以知道是那个按键按下。
③ 如何用stc15f2k60s2单片机加按键控制无源蜂鸣器分别发出1,2,3的声音
需要编程控制,首先需要一个模拟发声的功能函数,函数包含两个时间控制循环一个控制声音的频率另一个控制声音的长度;其次程序中还要有一个按键控制函数,两个函数配合使用就可以达到你要的效果了,在此只能提供编程思路,具体代码请网络搜索。
④ 在单片机汇编语言里,我用一个按键控制蜂鸣器控制播放音乐,请问,我该如何在用这个按键控制关断
这个很容易的,一般而枯困言,播放音乐都是通过定时器来控制旋律或节拍的,你只要根据按键状态根据设中并计要求,改没培念变TR0或TR1的值就可以关断或开启了。
⑤ 单片机按键蜂鸣器响5秒就停
单片机按键蜂鸣器响5秒就停的原因如下:
1、电路接触不良。重新接电路即可。
2、电压悄基达不到。改变硬件,使蜂鸣器在控制的IO口为低电平时老敏响,并改动程序的相应部分。启含谨
⑥ 51单片机C语言控制按键蜂鸣器
unsigned char flag=1; //定义上升沿ready标志
while(1)
{
if(key1&&flag) // 默认key1下拉至GND,若产生上升沿,则响一次,同时清零兆陵洞标志
{
SPK=1;
delay();
SPK=0;
flag=0;
}
if(!key1) { flag=1;} //检测key1是否归零 准备第二次上升沿,是族枯,则标志位置1
......
}
仅供参考汪禅
⑦ 51单片机用按键控制蜂鸣器发出do re mi fa...的声音,
T0H EQU30H
T0LEQU31H
ORG0000H
LJMPMAIN
ORG000BH
LJMPT0ISR
ORG0030H
MAIN:
MOVSP,#5FH
MOVTMOD,#01H
SETBET0
SETBEA
LOOP:
MOVDPTR,#FREQ
MOVA,P2 ;控制高中低音区
MOVR1,#0
ANLA,#03H
JBACC.0,LOOP01
MOVR1,#14
SJMPLOOP0
LOOP01:
JBACC.1,LOOP0
MOVR1,#28
LOOP0:
JBP0.0,LOOP1 ;控制音频1234567
MOVA,R1
MOVCA,@A+DPTR
MOVT0H,A
INC扮拦DPTR
MOVA,R1
MOVCA,@A+DPTR
MOVT0L,A
LJMPLOOP
LOOP1:
JBP0.1,LOOP2
MOVA,R1
ADDA,#2
MOVCA,@A+DPTR
MOVT0H,A
INCDPTR
MOVA,R1
ADDA,#2
MOVCA,@A+DPTR
MOVT0L,A
LJMPLOOP
LOOP2:
JBP0.2,LOOP3
MOVA,R1
ADDA,#4
MOVCA,@A+DPTR
MOVT0H,A
INCDPTR
MOVA,R1
ADDA,#4
MOVCA,@A+DPTR
MOVT0L,A
LJMPLOOP
LOOP3:
JBP0.3,LOOP4
MOVA,R1
ADDA,#6
MOVCA,@A+DPTR
MOVT0H,A
INCDPTR
MOVA,R1
ADDA,#6
MOVCA,@A+DPTR
MOVT0L,A
LJMPLOOP
LOOP4:
JBP0.4,LOOP5
MOVA,R1
ADDA,#8
MOVCA,@A+DPTR
MOVT0H,A
INCDPTR
MOVA,R1
ADDA,#8
MOVCA,@A+DPTR
MOVT0L,A
LJMPLOOP
LOOP5:
JBP0.5,LOOP6
MOVA,R1
ADDA,#10
MOVCA,@A+DPTR
MOVT0H,A
INCDPTR
MOVA,R1
ADDA,#10
MOVCA,@A+DPTR
MOVT0L,A
LJMPLOOP
LOOP6:
JBP0.6,LOOP7
MOVA,R1
ADDA,#12
MOVCA,@A+DPTR
MOVT0H,A
INCDPTR
MOVA,R1
ADDA,#12
MOVCA,@A+DPTR
MOVT0L,A
LJMPLOOP
LOOP7:
CLRTR0
LJMPLOOP
;-----------------------------
T0ISR:
CLRTR0
MOVTH0,T0H
MOVTL0,T0L
SETBTR0
CPLP3.0
RETI
;-----------------------------
FREQ:
DB0F2H,03DH ;低音1
DB0F3H,0BDH ;低音2
DB0F5H,014H ;低音3
DB0F5H,0B1H ;低音4
DB0F6H,0D0H ;低音5
DB0F7H,0D1H ;低音配缺顷6
DB0F8H,0B5H ;低音7
DB0F9H,01EH ;中音1
DB0F9H,0DEH ;中音2
DB0FAH,08AH ;中音3
DB0FAH,0D8H ;中音4
DB培陆0FBH,068H ;中音5
DB0FBH,0E8H ;中音6
DB0FCH,05AH ;中音7
DB0FCH,08FH ;高音1
DB0FCH,0EFH ;高音2
DB0FDH,045H ;高音3
DB0FDH,06CH ;高音4
DB0FDH,0B4H ;高音5
DB0FDH,0F4H ;高音6
DB0FEH,029H ;高音7
;-----------------------------
END
⑧ 怎么使用单片机控制蜂鸣器发声
蜂鸣器有两种,一种是无源的,另一种为有源的,确认的方法为:1)看封装,如果引脚端为PCB板的,一般为无源的,引脚端为树脂灌封的,一般为有源的。2)加电实验,用5V电压点击接触引脚时,只有“哒哒”声的为无源的,发出一个单音响的为有源的。
两种蜂鸣器用单片机的控制方法是一样的,对于无源的,要求单片机送出一组断续的音频信号,使蜂鸣器按要求发声,对于有源蜂鸣器,要求单片机送出一组断续的电脉冲信号,用于分断蜂鸣器的通断状态,而使有源蜂鸣器发出“嘀...嘀”,“嘀...嘀...嘀”等希望的声音。
无源蜂鸣器举例:
/**********************************************************************/
//声响驱动程序 BELL--整点报时(闹钟音两短一长)
/**********************************************************************/
void Beep(void)
{
uint a;//定义变量用于发声的长度设置
uchar b;
for(b=2;b>0;b--){
for(a=200;a>0;a--){//第一个声音的长度
beep = ~beep;//取反扬声器驱动口,以产生音频
Delay_1us(500);//音调设置延时
}
DelayM(1000);
}
for(a=1000;a>0;a--){//第一个声音的长度
beep = ~beep;//取反扬声器驱动口,以产生音频
Delay_1us(500);//音调设置延时
}
beep = 1;//音乐结束后扬声器关闭
}
有源蜂鸣器举例:
void main(void)
{
NB=0;//有源蜂鸣器初始不送电
while(1)
{
NB=0;//有源蜂鸣器断电
delay(300);//停一段时间
NB=1;//有源蜂鸣器送电
delay(1000);//响一段时间
}
}
⑨ 51单片机 ,用C语言编程 通过独立按键控制蜂鸣器和静态数码管,
#include<reg51.h>
#defineucharunsignedchar
uchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
sbitkey=P2^2;
sbitfmq=P2^3;
uchardat;
voiddelay()//延时约10毫秒
{
uchari,j;
for(i=0;i<10;i++)
for(j=0;j<120;j++);
}
main()
{
while(1)
{
if(key==0)
{
delay();
if(key==0)
{
fmq=0;
while(key==0);
fmq=1;
dat++;
dat%=10;
P1=table[dat];
}
}
}
}
⑩ 51单片机用三个按键控制报警,任意按两个按键蜂鸣器就报警的程序
设按键为k1,k2,k3
void main()
{
char beepflag=0;
while(1)
{
if((k1==0)
beepflag|=0x01;
else
beepflag&=0xFE;
if(k2==0) //按键按下腔唤差
beepflag|=0x02;
else
beepflag&=0xFD;
if(k3==0) /链基/按键按下
beepflag|=0x04;
else
beepflag&=0xFB;
//------------这里判断字符低三位,如果有其中两位置一,则开启蜂鸣器
}
}
思路大概就是这样,如对您有帮助,请采纳,谢谢伍皮!