嵌入式按键LED灯

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tingary/article/details/71825203

通过按键,实现灯左移右移

#include "int_test.h"
#include "sys_init.h"

#define rCPLDLEDADDR  (*(volatile unsigned char*)0x21180000)  
/*********************************************************************************************
* name:  main
* func:  c code entry
* para:  none
* ret:  none
* modify:
* comment:  
*********************************************************************************************/
int main( )
{

 sys_init();              // Initial s3c2410's Clock, Interrupt,Port and UART

 while(1)
 {
  int_test();
 }
}


/*********************************************************************************************
* File:  button_test.c
* Author: embest
* Descript: Button_Test
* History: 
*   EINT0 --- KEY1   EINT1 --- KEY2
*********************************************************************************************/

/*------------------------------------------------------------------------------------------*/
/*          include files               */
/*------------------------------------------------------------------------------------------*/
#include "2410lib.h"

/*------------------------------------------------------------------------------------------*/
/*          const define               */
/*------------------------------------------------------------------------------------------*/
#define rCPLDIntControl  (*(volatile unsigned char*)0x22600000)
#define rCPLDIntStatus   (*(volatile unsigned char*)0x22200000)
#define rCPLDLEDADDR  (*(volatile unsigned char*)0x21180000)
 extern int flag;
/*------------------------------------------------------------------------------------------*/
/*                                     function declare                                     */
/*------------------------------------------------------------------------------------------*/
void  __irq int_int(void);
/*********************************************************************************************
* name:  int_int
* func:  EXTINT interrupt service routine
* para:  none
* ret:  none
* modify:
* comment: 
*********************************************************************************************/

void  __irq int_int(void)
{
  unsigned char Status;

 Status = rCPLDIntStatus;
 Status = ~(Status & 0x6);

扫描二维码关注公众号,回复: 4655255 查看本文章

    if(Status & 0x2)
 {
  flag=1;
  uart_printf(" Eint0 interrupt occurred.\n");
  rCPLDIntControl |= (1<<1);
  rCPLDIntControl &= ~(1<<1);
 }
 else if(Status & 0x4)
 {
  flag=0;
  uart_printf(" EINT1 interrupt occurred.\n");
  rCPLDIntControl |= (1<<2);
  rCPLDIntControl &= ~(1<<2);
  
 }

 rEINTPEND=(1<<9);

    ClearPending(BIT_EINT8_23);
}

/*********************************************************************************************
* name:  int_init
* func:  Interrupt initialize
* para:  none
* ret:  none
* modify:
* comment: 
*********************************************************************************************/
void int_init(void)
{
    rSRCPND = rSRCPND;                       // Clear all interrupt
    rINTPND = rINTPND;                       // Clear all interrupt
   
 // nIntMode='3';
 rGPGCON |= (0xf<<0);   
    rGPGCON &= (0xa<<0);  

 rCPLDIntControl = 0xFF;
 rCPLDIntControl = 0xF9;

 pISR_EINT8_23=(UINT32T)int_int;

 rEINTPEND = 0xffffff;
 rSRCPND = BIT_EINT8_23;          // Clear the previous pending states
 rINTPND = BIT_EINT8_23;
   
 rEXTINT1 &= ~((0x7<<4)|(0x7<<0));
 rEXTINT1 |= ((0x2<<4)|(0x2<<0));

 rEINTMASK &= ~(3<<8);
 rINTMSK   &= ~(BIT_EINT8_23);
}

void led_on(void)
{
 int i,nOut;
 nOut = 0xFF;

 rCPLDLEDADDR = nOut & 0xFE;
 for(i = 0; i < 100000; i++);
 rCPLDLEDADDR = nOut & 0xFC; 
 for(i = 0; i < 100000; i++); 
 rCPLDLEDADDR = nOut & 0xF8;  
 for(i = 0; i < 100000; i++); 
 rCPLDLEDADDR = nOut & 0xF0; 
 for(i = 0; i < 100000; i++);

}
void led_off(void)
{
 int i,nOut; 
 nOut = 0xF0; 
 rCPLDLEDADDR = nOut | 0x01;
 for(i = 0; i < 100000; i++); 
 rCPLDLEDADDR = nOut | 0x03;
 for(i = 0; i < 100000; i++); 
 rCPLDLEDADDR = nOut | 0x07;
 for(i = 0; i < 100000; i++); 
 rCPLDLEDADDR = nOut | 0x0F;
 for(i = 0; i < 100000; i++);
}
void led_on_off(void)
{
 int i; 
 rCPLDLEDADDR = 0xF0;
 for(i = 0; i < 100000; i++);
 rCPLDLEDADDR = 0xFF;
 for(i = 0; i < 100000; i++);  
}
void led_left(void)
{
 int i,nOut;
 nOut = 0xFF;

 rCPLDLEDADDR = nOut & 0xFE;
 for(i = 0; i < 100000; i++);
 rCPLDLEDADDR = nOut & 0xFC; 
 for(i = 0; i < 100000; i++); 
 rCPLDLEDADDR = nOut & 0xF8;  
 for(i = 0; i < 100000; i++); 
 rCPLDLEDADDR = nOut & 0xF0; 
 for(i = 0; i < 100000; i++);

}
void led_right(void)
{
 int i,nOut; 
 nOut = 0xF0; 
 rCPLDLEDADDR = nOut | 0x07;
 for(i = 0; i < 100000; i++); 
 rCPLDLEDADDR = nOut | 0x03;
 for(i = 0; i < 100000; i++); 
 rCPLDLEDADDR = nOut | 0x01;
 for(i = 0; i < 100000; i++); 
 rCPLDLEDADDR = nOut | 0x00;
 for(i = 0; i < 100000; i++);
}
void led_on_off1(void)
{
 int i; 
 rCPLDLEDADDR = 0xF0;
 for(i = 0; i < 100000; i++);
 rCPLDLEDADDR = 0xFF;
 for(i = 0; i < 100000; i++);  
}
/*********************************************************************************************
* name:  int_test
* func:  Extern interrupt test
* para:  none
* ret:  none
* modify:
* comment: 
*********************************************************************************************/
void int_test(void)
{
 int_init();
 uart_printf("\n External Interrupt Test Example\n");
   if(flag==1)
  {led_left();led_on_off1();}
  else{led_right();led_on_off1();}


}

猜你喜欢

转载自blog.csdn.net/tingary/article/details/71825203
今日推荐