C语言蜂鸣器唱歌代码

蜂鸣器发声原理

       要想使蜂鸣器发出不同的声音就必须通过PWM波来驱动蜂鸣器,调节PWM波的频率就可以发出不同声调的声音。PWM是脉冲宽度调制的简称,PWM在控制中应用广泛,可以用于电机调速,舵机控制,步进电机控制等。在这个实验中我们用PWM波来驱动蜂鸣器发出不同声调的声音。

        这个实验通过在T0中断中改变BUZZ接口的电平状态,来产生频率一定的方波,来驱动蜂鸣器。改变定时器的计数初始值,就可以产生不同声调的声音。例如:唱名为1的音的频率为262Hz,则它对应的周期约为3816us,周期的一半为1908us。也就是说当单片机采用12MHz晶振时,它的周期是1908个机器周期。则定时器的计数初始值为65536-1908=63628,对应的16进制值为0xF88C。以此类推,可以起算出其它唱名的计数初始值。

        在程序中,toneH[10]和toneL[10]用来存储音调对应的计数初始值的高8位和低8位。soundtone[42]存储的是需要发声的音调,其中1~7代表唱名1~7。soundlong[42]用来存储与soundtone[42]相对应的唱名的发声时长。

        在本文中,我们用蜂鸣器来播放《小星星亮晶晶》这首简单的儿歌,它的简谱如下所示。

 简谱

 

小星星1简单片段

 PWM_SetFrequency(524);
		Delay_ms(1000);                                                                                                   
		PWM_SetFrequency(524);
		Delay_ms(1000);   
    PWM_SetFrequency(784);
		Delay_ms(1000);                                                                                                   
		PWM_SetFrequency(784);
		Delay_ms(1000);  
		
		PWM_SetFrequency(0);
		Delay_ms(300);                                                                                                   

    
		PWM_SetFrequency(880);
		Delay_ms(1000);                                                                                                   
		PWM_SetFrequency(880);
		Delay_ms(1000);   
    PWM_SetFrequency(784);
	
		PWM_SetFrequency(0);
		Delay_ms(300);  
		
		PWM_SetFrequency(700);
		Delay_ms(1000);                                                                                                   
		PWM_SetFrequency(700);
		Delay_ms(1000);   
    PWM_SetFrequency(660);
		Delay_ms(1000); 
    PWM_SetFrequency(660);
		Delay_ms(1000); 		
	
	  PWM_SetFrequency(588);
		Delay_ms(1000);                                                                                   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值