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

📄 extend.c

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

extern uint8  G_FLAG;                    // 全局变量,作为判断暂停或继续的标志
extern uint8  G_STEP_VALUE;              // 全局变量,存储步值
extern uint8  G_CurrContrastValue;
extern uint8  G_CurrContrastValue_S;
extern void   comm_out(uint16 i,uint16 j);
extern void   data_out(uint16 i,uint16 j);
extern void   delay(uint32  dly);
extern void   reset(void);
extern void   beep(uint8 port,uint32 beep_bit,uint8 count,uint8 dly);
extern void   dispByStep(uint8 step);



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



/*===========================================================================
** 函数名称: __irq IRQ_Eint0()
** 功能描述: 外部中断EINT0服务函数,实现暂停/继续功能,P0.16-KEY1
** 输   入: 无
** 输   出: 无    
** 全局变量: G_FLAG-作为判断暂停或继续的标志
============================================================================*/
void   __irq IRQ_Eint0(void)
{ 
    uint32  i;

    i = VICIRQStatus;				// 读出VICIRQStatus的值  
    IO1SET = CS0;
    IO1SET = CS1;
    IO0SET = (1<<23)|(1<<24)|(1<<25);  // LED2,LED3,LED4灭
    
 	beep(1,BEEP_BIT,1,10);          
   
    while( (EXTINT&0x01)!=0 )		// 等待外部中断信号恢复为高电平	
    {  
        EXTINT = 0x01;				// 清除EINT0中断标志
        //dispContrastToLcd(0,0,0x00,0x1f,0xff,0xff,G_CurrContrastValue);
    } 
    
    
    G_FLAG=~G_FLAG;
   
    if(G_FLAG&0x01!=0)
    {
        while((EXTINT&0x01)==0);
    }   
    
    
    IO0CLR = (1<<23)|(1<<24)|(1<<25);    // LED2,LED3,LED4亮
    VICVectAddr = 0x00;
    
    
}		


/*===========================================================================
** 函数名称: __irq IRQ_Eint1()
** 功能描述: 外部中断EINT1服务函数
** 输   入: 无
** 输   出: 无    
============================================================================*/
void   __irq IRQ_Eint1(void)
{  

}		



/*===========================================================================
** 函数名称: __irq IRQ_Eint2()
** 功能描述: 外部中断EINT2服务函数
** 输   入: 无
** 输   出: 无    
============================================================================*/
void   __irq IRQ_Eint2(void)
{  
   
      
}		

/*===========================================================================
** 函数名称: __irq IRQ_Eint3()
** 功能描述: 外部中断EINT3服务函数,实现暂停/继续功能,P0.20-KEY5
** 输   入: 无
** 输   出: 无    
** 全局变量: G_FLAG-作为判断暂停或继续的标志
============================================================================*/
void   __irq IRQ_Eint3(void)
{ 

    uint32  i;

    i = VICIRQStatus;				// 读出VICIRQStatus的值  
    IO1SET = CS0;
    IO1SET = CS1;

    IO0SET = (1<<23)|(1<<24)|(1<<25);  // LED2,LED3,LED4灭
    
 	beep(1,BEEP_BIT,1,10);
 
 
    while( (EXTINT&0x08)!=0 )		// 等待外部中断信号恢复为高电平	
    {  
        EXTINT = 0x08;				// 清除EINT3中断标志
        //dispContrastToLcd(1,0,8,G_CurrContrastValue); 
    } 
    
    
    G_FLAG=~G_FLAG;
   
    if(G_FLAG&0x08!=0)
    {
        while((EXTINT&0x08)==0);
    }   


    VICVectAddr = 0x00;				     // 通知VIC中断处理结束  
    IO0CLR = (1<<23)|(1<<24)|(1<<25);    // LED2,LED3,LED4亮

    
}		


/*===========================================================================
** 函数名称: __irq IRQ_T0()
** 功能描述: T0中断服务函数
** 输   入: 无
** 输   出: 无    
============================================================================*/
void __irq IRQ_T0(void)
{
   
     
    IODIR = ~((1<<16)|(1<<17)|(1<<18)|(1<<19)|(1<<21));//
  
    //display by step
    
    if( (IOPIN&(1<<18))==0 ) // P0.18,key3, <<
    {	
    	
		if(G_STEP_VALUE>0)
		{
			G_STEP_VALUE --;
		}
		else
		{
			G_STEP_VALUE = G_STEP_VALUE_MAX;
		}
		dispByStep(G_STEP_VALUE);
		
	
    } 
  

    if( (IOPIN&(1<<19))==0 ) // P0.19,key4, >>
    {	
    	
		if(G_STEP_VALUE<G_STEP_VALUE_MAX)
		{
			G_STEP_VALUE ++;
		}
		else
		{
			G_STEP_VALUE = 0;
		}
		dispByStep(G_STEP_VALUE);
    }
    
   
    
    
    //adjust contrast

    if( (IOPIN&(1<<16))==0 ) // P0.16,key1, --
    {	
    	//IO1SET = CS1;
		//adjustContrast(0);
        //enterSleepMode();
    }
    
    if( (IOPIN&(1<<17))==0 ) // P0.17,key2, ++
    {	
    	//IO1SET = CS1;
		//adjustContrast(1);
		//exitSleepMode();
	}


	  
    T0IR = 0x01;	    			            // 清除中断标志
    VICVectAddr = 0x00;				            // 通知VIC中断处理结束  
    
    
}







/*===========================================================================
** 函数名称: setVIC()
** 功能描述: 使能EINT3、T0中断
============================================================================*/
void setVIC(void)
{
       //初始化定时器0,实现0.5S定时;定时器1实现0.1秒定时。
	   //Fcclk=Fosc*4=11.0592MHz*4=44.2368MHz
	   //Fpclk=Fcclk/4=44.2368MHz/4=11.0592MHz
	
	   
	   T0PR  = 99;			    // 设置定时器分频为100分频,得110592Hz
	   T0MCR = 0x03;		    // 匹配通道0匹配中断并复位T0TC
	   T0MR0 = 110592/10;	    // 比较值
	   T0TCR = 0x03;		    // 启动并复位T0TC
	   T0TCR = 0x01; 
	   
	   	
	   //T1PR = 99;			    // 设置定时器分频为100分频,得110592Hz
	   //T1MCR = 0x02;		    // 匹配通道0匹配复位T1TC
	   //T1MR0 = 110592/10;	    // 比较值
	   //T1EMR = 0x30;		    // 设置定时器1的T1MR0匹配输出,输出方式为翻转
	   //T1TCR = 0x03;		    // 启动并复位T1TC
	   //T1TCR = 0x01;
      	
	
	
	   // VIC通道号:EINT3-17   EINT2-16

⌨️ 快捷键说明

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