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

📄 control.c

📁 LPC2294 测试程序 YL_LPC229X_Test_Data的目录说明
💻 C
📖 第 1 页 / 共 2 页
字号:
			break ;

		PWM5_Set( CYCLE , ( CYCLE / 2 ) ) ;
		printf( "\tNow beep CYCLE is %duS\n" , ( CYCLE * 10 ) ) ;
	}

	PWM5_Stop() ;
	//return 1 ;
}

/****************************************************************************
* 名称:LedSet()
* 功能:根据表DISP_TAB来控制LED显示
****************************************************************************/
void LedSet( U32 m )
{
	if ( m & 0x01 )
		IO0SET = IO0SET | ( 1 << 2 ) ;
	else
		IO0CLR = IO0CLR | ( 1 << 2 ) ;

	if ( m & 0x08 )
		IO0SET = IO0SET | ( 1 << 4 ) ;
	else
		IO0CLR = IO0CLR | ( 1 << 4 ) ;

	if ( m & 0x4 )
		IO0SET = IO0SET | ( 1 << 5 ) ;
	else
		IO0CLR = IO0CLR | ( 1 << 5 ) ;

	if ( m & 0x02 )
		IO0SET = IO0SET | ( 1 << 6 ) ;
	else
		IO0CLR = IO0CLR | ( 1 << 6 ) ;

	if ( m & 0x80 )
		IO2SET = IO2SET | ( 1 << 28 ) ;
	else
		IO2CLR = IO2CLR | ( 1 << 28 ) ;

	if ( m & 0x40 )
		IO2SET = IO2SET | ( 1 << 29 ) ;
	else
		IO2CLR = IO2CLR | ( 1 << 29 ) ;

	if ( m & 0x20 )
		IO2SET = IO2SET | ( 1 << 30 ) ;
	else
		IO2CLR = IO2CLR | ( 1 << 30 ) ;

	if ( m & 0x10 )
		IO2SET = IO2SET | ( 1 << 31 ) ;
	else
		IO2CLR = IO2CLR | ( 1 << 31 ) ;
}

/****************************************************************************
* 名称:LedDisp()
* 功能:根据表DISP_TAB来控制LED显示。
****************************************************************************/
void LedDisp( U32 m , U32 delay_time )
{
	while ( m-- )
	{
		LedSet( ~0x01 ) ;
		Delay( delay_time ) ;
		LedSet( ~0x02 ) ;
		Delay( delay_time ) ;
		LedSet( ~0x04 ) ;
		Delay( delay_time ) ;
		LedSet( ~0x08 ) ;
		Delay( delay_time ) ;
		LedSet( ~0x10 ) ;
		Delay( delay_time ) ;
		LedSet( ~0x20 ) ;
		Delay( delay_time ) ;
		LedSet( ~0x40 ) ;
		Delay( delay_time ) ;
		LedSet( ~0x80 ) ;
		Delay( delay_time ) ;
	}
}

U8 Get_Keystoke( void )
{
	if ( ( IO2PIN & ( 1 << 16 ) ) == 0 )
		return 1 ;
	else if ( ( IO2PIN & ( 1 << 17 ) ) == 0 )
		return 2 ;
	else if ( ( IO2PIN & ( 1 << 18 ) ) == 0 )
		return 3 ;
	else if ( ( IO2PIN & ( 1 << 19 ) ) == 0 )
		return 4 ;
	else if ( ( IO2PIN & ( 1 << 20 ) ) == 0 )
		return 5 ;
	else if ( ( IO2PIN & ( 1 << 21 ) ) == 0 )
		return 6 ;
	else if ( ( IO2PIN & ( 1 << 22 ) ) == 0 )
		return 7 ;
	else if ( ( IO0PIN & ( 1 << 30 ) ) == 0 )
		return 8 ;
	else
		return 0 ;
}

void Keystoke_Test(void)
{
	U8 m ;

	printf( "Keystoke test, ESC key to exit\n" ); 
	while ( getkey() != ESC_KEY )
	{
		m = Get_Keystoke() ;
		if(m)printf("Key=%d\n",m);
		if ( m != 0 )
		{
			LedSet( ~( 1 << ( m - 1 ) ) ) ;
			PWM5_Set( ( m * 10 ) , ( m * 5 ) ) ;
			
			Delay( 50 ) ;
			PWM5_Stop() ;
		}
		else
			LedSet( 0xff ) ;
	}

	//return 1 ;
}


void __irq IRQ_Exception( void )
{
	while ( 1 );				   // 这一句替换为自己的代码
}

void FIQ_Exception( void )
{
	while ( 1 );				   // 这一句替换为自己的代码
}

void TargetInit( void )
{
	/* 添加自己的代码 */
}




void Delay( U32 ms )
{
	U32 CLK = ( Fcclk / 1000 ) * ms / 2 ;

	while ( CLK-- ) ;		//这个语句需要两条汇编指令
}

void Delay_uS( U32 us )	//以uS为延时单位
{
	U32 CLK = ( Fcclk / 1000000 ) * us / 2 ;

	while ( CLK-- ) ;		//这个语句需要两条汇编指令
}


int WaitEventWithTimeout( int ( *event ) ( void ) , int cond , U32 ms )
{
	U32 i ;
	int result;

	while ( ms-- )
	{
		result = ( *event ) ();
		if ( cond )
		{
			if ( result )
				return 0;
		}
		else
		{
			if ( !result )
				return 0;
		}

		for ( i = 0; i < 5000; )
			i++ ;
	}

	return -1;
}

/******************************************************************
** serial function
*******************************************************************/

static U16 SerialPortSel;

U16 SerialSwitch( U16 port )
{
#ifdef	SERIAL_PORTS_SWITCH
	SerialPortSel = port ? 1 : 0;
#else
	SerialPortSel = 0;
#endif
	return SerialPortSel;
}

void SerialChgBaud( U32 mclk , U32 baud )
{
	U32 Fdiv;

	//	U32 mclk =  GetMasterClock();

	U0LCR = 0x80;   							/* 允许访问分频因子寄存器 */
	Fdiv = ( Fpclk / 16 ) / baud ;  				/* 设置波特率 */
	U0DLM = Fdiv / 256;							
	U0DLL = Fdiv % 256;						
	U0LCR = 0x03;   							/* 禁止访问分频因子寄存器 */
	/* 且设置为8,1,n */
	U0IER = 0x00;   							/* 禁止接收和发送中断 */
	U0FCR = 0x00;   							/* 初始化FIFO */
	//**********************************************************************
	U1LCR = 0x80;   							/* 允许访问分频因子寄存器 */
	U1DLM = Fdiv / 256;							
	U1DLL = Fdiv % 256;						
	U1LCR = 0x03;   							/* 禁止访问分频因子寄存器 */
	/* 且设置为8,1,n */
	U1IER = 0x00;   							/* 禁止接收和发送中断 */
	U1FCR = 0x00;   							/* 初始化FIFO */
}

void SerialTxEmpty( void )
{
	if ( SerialPortSel )
		while ( !( U1LSR & 0x20 ) );		//还有数据未发送完,等待
	else
		while ( !( U0LSR & 0x20 ) );		//还有数据未发送完,等待
}

void SerialTxChar( char data )
{
	//U16 m ;
	if ( SerialPortSel )
	{
		if ( data == '\n' )
		{
			while ( !( U1LSR & 0x20 ) );		//还有数据未发送完,等待
			//for( m = 0; m < 100;  )  m++ ;		//短暂延时防止超级终端来不及响应
			U1THR = '\r' ;
		}
		while ( !( U1LSR & 0x20 ) );		//还有数据未发送完,等待
		//for( m = 0; m < 100;  )  m++ ;		//短暂延时防止超级终端来不及响应
		U1THR = data;					// 发送数据
	}
	else
	{
		if ( data == '\n' )
		{
			while ( !( U0LSR & 0x20 ) );		//还有数据未发送完,等待
			//for( m = 0; m < 100;  )  m++ ;		//短暂延时防止超级终端来不及响应
			U0THR = '\r' ;
		}
		while ( !( U0LSR & 0x20 ) );		//还有数据未发送完,等待
		//for( m = 0; m < 100;  )  m++ ;		//短暂延时防止超级终端来不及响应
		U0THR = data;					// 发送数据
	}
}

void SerialTxString( char* s )
{
	while ( *s )
		SerialTxChar( *s++ );
}

int SerialRxReady( void )
{
	if ( SerialPortSel )
		return ( U1LSR & 0x01 );	//Receive data ready
	else
		return ( U0LSR & 0x01 );	//Receive data ready
}

char SerialRxKey( void )
{
	if ( SerialPortSel )
	{
		if ( U1LSR & 0x01 ) //Receive data ready
			return U1RBR ;
	}
	else
	{
		if ( U0LSR & 0x01 ) //Receive data ready
			return U0RBR ;
	}

	return 0;
}

char SerialRxChar( void )
{
	if ( SerialPortSel )
	{
		while ( ( U1LSR & 0x01 ) == 0 );		//没有收到数据
		return U1RBR ;
	}
	else
	{
		while ( ( U0LSR & 0x01 ) == 0 );		//没有收到数据
		return U0RBR ;
	}

	return 0 ;
}

int SerialRxToBuf( char* b )
{
	if ( SerialPortSel )
	{
		if ( U1LSR & 0x01 )    //Receive data ready
			*b = U1RBR ;
		else
			return 0;
	}
	else
	{
		if ( U0LSR & 0x01 )    //Receive data ready
			*b = U0RBR ;
		else
			return 0;
	}

	return 1;
}






⌨️ 快捷键说明

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