//假设你是 按开关时为0电平
//具体IO口 自己配置
//简单的就可以这么写 如果要求消抖 我们再讨论
while(1)
{
if(k1==0)beep=1;
if(k2==0)beep=0;
}
不知道你安装的是变频器还是软启动器,看样子是变频器。变频器输出的是方波组合成的模拟正弦波,电动机在这个波形下声音是会比较尖的,而且频率不同声音还会变化。如果声音实在很大,可以在变频器的设置里调整一下载波频率试试,看看电机声音有没有变化。
#include<reg52h>
8 #define uchar unsigned char
9 #define uint unsigned int
10 uchar Count;
11
12 sbit Speak =P1^2; //蜂鸣器器控制脚
13 /以下数组是音符编码/
14 unsigned char code SONG[] ={ //祝你平安
15 0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,
16 0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,
17 0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,
18 0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,
19 0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,
20 0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,
21 0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,
22 0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,
23 0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,
24 0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,
25 0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,
26 0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,
27 0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,
28 0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,
29 //路边的野华不要采
30 0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,0x1C,
31 0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20,0x30,0x1C,0x10,0x18,0x20,
32 0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,
33 0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,
34 0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,
35 0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,
36 0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1C,0x10,0x20,
37 0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,0x1F,
38 0x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,
39 0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,
40 0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0x1C,0x20,0x20,
41 0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0x00,
42
43 };
44
45 /
46 名称 : Time0_Init()
47 功能 : 定时器的初始化,定时时间可用光碟中软件计算,110592MZ晶振,10ms
48 输入 : 无
49 输出 : 无
50 /
51 void Time0_Init()
52 {
53 1 TMOD = 0x01;
54 1 IE = 0x82;
55 1 TH0 = 0xDC;
C51 COMPILER V750 蜂胈芲唱歌 08/26/2011 10:26:23 PAGE 2
56 1 TL0 = 0x00;
57 1 }
58
59 /
60 名称 : Time0_Int()
61 功能 : 定时器中断,中断中实现 Count 加一
62 输入 : 无
63 输出 : 无
64 /
65 void Time0_Int() interrupt 1
66 {
67 1 TH0 = 0xDC;
68 1 TL0 = 0x00;
69 1 Count++; //长度加1
70 1 }
71
72 /
73 名称 : Delay_xMs()
74 功能 : 延时子程序,经过软件调试,测得延时程序大概为55us
75 输入 : x
76 输出 : 无
77 /
78 void Delay_xMs(uint x)
79 {
80 1 uint i,j;
81 1 for(i=0; i<x; i++)
82 1 {
83 2 for(j=0; j<3; j++);
84 2 }
85 1 }
86
87 /
88 名称 : Play_Song()
89 功能 : 播放蜂鸣器控制程序
90 输入 : i (选择播放哪首歌曲,0为“祝你平安”,1为“路边的野花你不要采”
91 输出 : 无
92 /
93 void Play_Song(uchar i)
94 {
95 1 uchar Temp1,Temp2;
96 1 uint Addr;
97 1 Count = 0; //中断计数器清0
98 1 Addr = i 217;
99 1 while(1)
100 1 {
101 2 Temp1 = SONG[Addr++];
102 2 if (Temp1 == 0xFF) //休止符
103 2 {
104 3 TR0 = 0;
105 3 Delay_xMs(100);
106 3 }
107 2 else if (Temp1 == 0x00) //歌曲结束符
108 2 {
109 3 return;
110 3 }
111 2 else
112 2 {
113 3 Temp2 = SONG[Addr++];
114 3 TR0 = 1;
115 3 while(1)
116 3 {
117 4 Speak = ~Speak;
C51 COMPILER V750 蜂胈芲唱歌 08/26/2011 10:26:23 PAGE 3
118 4 Delay_xMs(Temp1);
119 4 if(Temp2 == Count)
120 4 {
121 5 Count = 0;
122 5 break;
123 5 }
124 4 }
125 3 }
126 2 }
127 1 }
//8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。
#include <reg52h> //52系列单片机头文件
#include <intrinsh>
#define uint unsigned int //宏定义
#define uchar unsigned char
void delayms(uint); //声明子函数
sbit beep=P2^3;
uchar aa;
void main() //主函数
{
aa=0xfe; //赋初值11111110
while(1) //大循环
{
P1=aa;
beep=0;
delayms(500); //延时500毫秒
P1=0xff; //灭灯
beep=1;
delayms(500); //延时500毫秒
aa=_crol_(aa,1); //将aa循环左移1位后再赋给aa
}
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=115;j>0;j--);
}
根据你的程序BZ默认值为0可以知道,你的想法是控制蜂鸣器的IO口是高电平时,蜂鸣器响。单片机在上电复位时IO口为高点平,蜂鸣器会响一声。
有两个解决方法:
一个是改变硬件,使蜂鸣器在控制的IO口为低电平时响,并改动程序的相应部分。
另一个比较简单,在main主程序的BZ=0后加上一小段延时,把单片机上电复位的时间给错过去,试试可以不可以达到效果。
以上就是关于51单片机 使用两个独立按键k1,k2,实现按下一个蜂鸣器响,按下另一个蜂鸣器停止程序全部的内容,包括:51单片机 使用两个独立按键k1,k2,实现按下一个蜂鸣器响,按下另一个蜂鸣器停止程序、110kw电机超过120转就有蜂鸣器声音怎么回事、谁知道51单片机控制蜂鸣器,使其能响出音乐。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)