⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 beep.c

📁 S3C2440通过脉宽调制控制蜂鸣器
💻 C
字号:
/*
***********************************************************
* Copyright (c)
* All rights reserved.				            
*
* 文件名称:beep.c
* 文件标识:
* 摘    要:本文件是对beep进行初始化和操作。
* 当前版本:1.0
* 作    者:刘征
* 完成日期:2005.4.3
*
* 取代版本:
* 作    者:
* 完成日期:
***********************************************************
*/


/*
===========================================================
*   					 头文件                           *
===========================================================
*/

#include  "def.h"
#include  "option.h"
#include  "2440addr.h"
#include  "2440lib.h"
#include  "2440slib.h" 

		
/* ================  Initialization PWM  ================= */

void Buzzer_Init( U32 freq )
{
	rGPBCON =  (rGPBCON & ( ~3 )) | 2;		// set GPB0 as tout0, pwm output
		
	rTCFG0	=  (rTCFG0 & ( ~0xff )) | 24;	// prescaler = 24+1
	rTCFG1	=  rTCFG1 & ( ~0xf );			// Select MUX input for PWM Timer0	MUX = 1/2
	rTCNTB0 =  PCLK / 50 / freq;			// Time input clock Frep = PCLK/(prescaler+1)/(divider value)
	rTCMPB0 =  rTCNTB0 >> 1;				// set duty ratio 50%
	rTCON	=  (rTCON & ( ~0x1f )) | 0xb;	// disable deadzone, auto-reload, inv-off, update TCNTB0&TCMPB0, start for timer 0
	rTCON	&= ~2;							// clear manual update bit
}


/* ===============  change buzzer frequency  ============= */

void Buzzer_Freq_Set( U32 freq )
{
	rTCNTB0 =  PCLK / 50 / freq;			// Time input clock Frep = PCLK/(prescaler+1)/(divider value)
	rTCMPB0 =  rTCNTB0 >> 1;				// set duty ratio 50%
}


/* =====================  stop buzzer  =================== */

void Buzzer_Stop( void )
{
	rGPBCON	&= ~3;							// set GPB0 as output
	rGPBCON	|= 1;
	rGPBDAT &= ~1;
}


/*
===========================================================
*					  蜂鸣器PWM测试						  *	
===========================================================
*/

void BUZZER_PWM_Test( void )
{
	U8	Key ;
	U16	freq = 4000 ;
	
	Uart_Printf( "\nBUZZER TEST ( PWM Control )\n" );
   	Uart_Printf( "Press +/- to increase/reduce the frequency of BUZZER !\n" ) ;
	Uart_Printf( "Press 'ENTER' key to the test !\n\n" );
	
	Buzzer_Init( freq );					// Initialization PWM

    while( 1 )
    {
		Key = Uart_Getch();

		if( Key == '+' )
		{
			if( freq < 80000 )
				freq += 10 ;
				
			Buzzer_Freq_Set(freq) ;
		}
		

		if( Key == '-' )
		{
			if( freq > 10 ) 
				freq -= 10 ;
							
			Buzzer_Freq_Set(freq) ;
		}
				
		Uart_Printf( "\tFreq = %d\n", freq ) ;
		
		if( Key == '\r' )
		{
			Buzzer_Stop() ;
			return ;
		}

	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -