51单片机 使用两个独立按键k1,k2,实现按下一个蜂鸣器响,按下另一个蜂鸣器停止程序

51单片机 使用两个独立按键k1,k2,实现按下一个蜂鸣器响,按下另一个蜂鸣器停止程序,第1张

//假设你是 按开关时为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单片机控制蜂鸣器,使其能响出音乐。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9685119.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存