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

📄 common.c

📁 是用ARM7模拟RGB程序
💻 C
字号:
/******************************Copyright (c)*********************************
** 文件说明
**---------------------------------------------------------------------------
**文   件   名: common.c
**创   建   人: 杨宏伟(YGRAND)
**修   改   人: 杨宏伟(YGRAND)
**创  建 日 期:2003年10月19日
**最后修改日期: 2005年02月28日
**描        述: 公用函数定义,FOR ARM LPC2100
****************************************************************************/
#include "config.h"

/****************************************************************************
** 函数实现
*****************************************************************************/


/*===========================================================================
** 函数名称: delay()
** 功能描述: 软件延时
============================================================================*/
void  delay(uint32  dly)
{ 
    uint32  i;
    for(; dly>0; dly--) 
       for(i=0; i<50000; i++);

}

/*===========================================================================
** 函数名称: reset()
** 功能描述: 复位LCD,注意,有时需调整前后两个delay()的输入值大小
============================================================================*/
void reset(void)
{
    IO1CLR = RES;
    delay(50);
    IO1SET = RES;
    delay(50);
}



/*===========================================================================
** 函数名称: setPin()
** 功能描述: 设置PIN脚的功能选择和GPIO方向
============================================================================*/
void setPin(uint8 i)
{

	switch(i)
	{ 
		case 0:
		
			// 选择按8位接口分配IO功能
			//PINSEL0 = 0xA0000000;			// 设置IO口工作模式,P0.14设置为EINT1,P0.15设置为EINT2,P0.16设置为EINT0,P0.27~P0.31用于从JTAG
		    //PINSEL1 = 0x55400001;			// 注意:当使用16位数据接口时应禁止外部中断0(EINT1)和外部中断2(EINT2)的设置

			// 选择按16位接口分配IO功能
			PINSEL0 = 0x00000005;			// 设置IO口工作模式,P0为GPIO,EINT 0 有效(P0.16),P0.27,P0.28为AD转换输入
			PINSEL1 = 0x01400001;             	
			PINSEL2 = 0x00000004;           // P1.16~P1.25为GPIO,P1.26~P1.31为调试端口
			
		    IO0DIR  = 0xFFFFFFFF;			// 设置GPIO控制口方向,所有管脚设置为输出
		    IO1DIR  = 0xFFFFFFFF;
		               

		    EXTMODE = 0x00;                 // 设置EINT0中断为电平触发模式
		    break;
		    
		case 1:
			PINSEL0 = 0x00000000;			// 设置IO口工作模式,P0为GPIO,EINT3 有效(P0.20)
			PINSEL1 = 0x00000300;            	
			PINSEL2 = 0x00000004;           // P1.16~P1.25为GPIO,P1.26~P1.31为调试端口
		
		    IO0DIR  = 0xFFFFFFFF;			// 设置GPIO控制口方向,所有管脚设置为输出
		    IO1DIR  = 0xFFFFFFFF;

		    EXTMODE = 0x00;                 // 设置EINT0中断为电平触发模式		
			break;
			
		default:
			;
			
	}
}	                              




/*===========================================================================
** 函数名称: setHL()
** 功能描述: 设置端口电平
============================================================================*/
void setHL(uint8 port,uint32 value)
{
	switch(port)
	{
		case 0:
    		IO0SET = value;
    		IO0CLR = ~value;			
    		break;
		case 1:
		    IO1SET = value;
    		IO1CLR = ~value;	
			break;
		default:
			;
	}

}





/*===========================================================================
** 函数名称: testPin()
** 功能描述: 测试端口用
============================================================================*/
void testPin(uint8 port,uint32 value)
{
	switch(port)
	{
		case 0:
		    for(;;)
		    {
		    	IO0SET = value;
		    	IO0CLR = ~value;
		    }		
    		break;
		case 1:
		    for(;;)
		    {
		    	IO1SET = value;
		    	IO1CLR = ~value;
		    }	
			break;
		default:
			;
	}

}


/*===========================================================================
** 函数名称: beep()
** 功能描述: 蜂鸣器发声,beep_bit为连接蜂鸣器的管脚(一般定义在P1口,P1.25),count控制蜂鸣长度
============================================================================*/
void beep(uint8 port,uint32 beep_bit,uint8 count,uint8 dly)
{
    uint8 i; 
    
   
	switch(port)
	{
		case 0:
		   
		    for(i=0;i<count;i++)   
		    {
		    	IO0CLR = beep_bit;
		    	delay(dly);	
		    	IO0SET = beep_bit;
		    	delay(dly);    
		    }
		   
    		break;
		case 1:
   
		    for(i=0;i<count;i++)   
		    {
		    	IO1CLR = beep_bit;
		    	delay(dly);
		    	IO1SET = beep_bit;  
		    	delay(dly); 
		    }
		    
			break;
		default:
			;
	}    
  
}



/*===========================================================================
** 函数名称: ledBlink()
** 功能描述: LED闪烁控制,LED闪烁控制,LED1-P0.22,LED2-P0.23,LED3-P0.24,LED4-P0.25
============================================================================*/
void ledBlink(uint32 startLedAdd,uint8 num,uint8 del,uint8 reCount)
{

    uint8 i,j;

    for(i=0;i<reCount;i++)
    {   
        
        for(j=0;j<num;j++)
	    {
	    	IO0CLR = startLedAdd<<j;
	    	delay(del);
	    	IO0SET = startLedAdd<<j;
	    	delay(del);

	    }
    }
}


/*===========================================================================
** 函数名称: waitKey()
** 功能描述: 暂停,直到按相应键后退出继续, 一般定义在KEY6(P0.21)
============================================================================*/
void  waitKey(uint32 keyValue,uint32 led_bit)
{ 
   uint32  i;

   IO0DIR = ~keyValue;
   
   //IO1SET = CS1;
   //IO1SET = CS1_S;
   
   while(1)
   {  while( (IOPIN&keyValue)!=0 )		// 等待KEY键按下
      {
      	 IO0CLR = led_bit;
      }

      for(i=0; i<500; i++);		        // 延时去抖
      if( (IOPIN&keyValue)!=0 ) 
      break;
   }
   
   while( (IOPIN&keyValue)==0 ); 		// 等待KEY键放开
   
   IO0SET = led_bit;
   
  
}







/*===========================================================================
** 函数名称: ledTest()
** 功能描述: 测试七彩灯
============================================================================*/
void ledTest(uint8 repetCount,uint8 dly)
{
     
    uint8  j;
    
    for(j=0;j<repetCount;j++)
    {	
    
		IO0CLR = LED_R;
		IO0CLR = LED_G;
		IO0CLR = LED_B;
  
    
    	IO0SET = LED_R;
    	delay(dly);  	
    	IO0CLR = LED_R;
    	delay(dly);
   
    	IO0SET = LED_G;
    	delay(dly);  	
    	IO0CLR = LED_G;
    	delay(dly);
    	
    	IO0SET = LED_B;
    	delay(dly);  	
    	IO0CLR = LED_B;
    	delay(dly);

    }
    
}



/*===========================================================================
** 函数名称: shortTest()
** 功能描述: 控制端口短路检测
============================================================================*/
void shortTest(uint8 total_num,uint8 const *p_num,uint8 beep_count)
{
	
	uint8 i,j;

	//SET HIGH
	for(i=0;i<total_num;i++)
	{
		IO1SET = 1<<p_num[i];
	}
	
	// SHORT TEST
	for(i=0;i<total_num;i++)
	{
	
		IO1CLR = 1<<p_num[i];
		for(j=i+1;j<total_num;j++)
		{
	   		if( (IO1PIN&(1<<p_num[j]))== 0 )
			{	
					beep(1,BEEP_BIT,beep_count,20);	

			}
		}

	}
	
	
	//SET LOW
	for(i=0;i<total_num;i++)
	{
		IO1CLR = 1<<p_num[i];
	}
	
	// SHORT TEST
	for(i=0;i<total_num;i++)
	{
	
		IO1SET = 1<<p_num[i];
		for(j=i+1;j<total_num;j++)
		{
	   		if( (IO1PIN&(1<<p_num[j]))!= 0 )
			{
		
				beep(1,BEEP_BIT,beep_count,20);	
			}
		}

	}
	





}






/******************************************************************************
**                            End Of File
*******************************************************************************/

⌨️ 快捷键说明

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