MINI2440 LED灯驱动

 一.LED 跑马灯

编写及编译软件:ADS 1.2

所用开发板:MINI2440(ARM 920t)

启动汇编代码  start.s

   area start,code,readonly
 
reset
    ldr sp,=4096
    import main
    b main
    end
   

头文件 def.h

#ifndef _DEF_
  #define _DEF_

  #define rGPBCON (*((volatile unsigned *)0x56000010)) //定义rGPBCON为状态寄存器的物理地址
  #define rGPBDAT (*((volatile unsigned *)0x56000014))//定义rGPBDAT为数据寄存器的物理地址

  #define LED1_ON rGPBDAT &=(~(1<<5))//第五位置0
  #define LED2_ON rGPBDAT &=(~(1<<6))
  #define LED3_ON rGPBDAT &=(~(1<<7))
  #define LED4_ON rGPBDAT &=(~(1<<8))

  #define LED1_OFF rGPBDAT |=(1<<5)//第五位置1
  #define LED2_OFF rGPBDAT |=(1<<6)
  #define LED3_OFF rGPBDAT |=(1<<7)
  #define LED4_OFF rGPBDAT |=(1<<8)

#endif

 

主函数 main.c

#include"def.h"
int delay(unsigned int a)//延迟函数
{
    while(a--);
    return 0;
}
int main(int argc,char *argv[])

 rGPBCON |=0x15400;
    while(1)
    {
      
       LED1_ON;
       delay(100000);
       LED2_ON;
       delay(100000);
       LED3_ON;
       delay(100000);
       LED4_ON;
       delay(100000);
       LED1_OFF;
       delay(100000);
       LED2_OFF;
       delay(100000);
       LED3_OFF;
       delay(100000);
       LED4_OFF;
       delay(100000);
    }
    return 0;
}

 

二.按键控制LED

启动汇编代码 start.s

  area start,code,readonly
  b reset
reset 
  ldr sp,=1024*4
  import main
  b main
  end

头文件 def.h

#ifndef _def_
#define _def_

#define rGPBCON (*((volatile unsigned *)0x56000010))
#define rGPBDAT (*((volatile unsigned *)0x56000014))
#define GPGCON (*((volatile unsigned *)0x56000060))
#define rGPGDAT (*((volatile unsigned *)0x56000064))


  #define LED1_ON rGPBDAT&=(~(0x1<<5))
  #define LED2_ON rGPBDAT&=(~(0x1<<6))
  #define LED3_ON rGPBDAT&=(~(0x1<<7))
  #define LED4_ON rGPBDAT&=(~(0x1<<8))

  #define LED1_OFF rGPBDAT|=(0x1<<5)
  #define LED2_OFF rGPBDAT|=(0x1<<6)
  #define LED3_OFF rGPBDAT|=(0x1<<7)
  #define LED4_OFF rGPBDAT|=(0x1<<8)

  #define KEY1 (rGPGDAT&=(0x1)                                                 一开始在做的时候没有加最外边的括号,结果虽然编译没错,但是怎么做都无法实现按键控制,看了宏定义后的
  #define KEY2 (rGPGDAT&=(0x1<<3))                                           优先级很重要啊,所以以后最好养成加个括号的习惯!
  #define KEY3 (rGPGDAT&=(0x1<<5))
  #define KEY4 (rGPGDAT&=(0x1<<6))
  #define KEY5 (rGPGDAT&=(0x1<<7))
  #define KEY6 (rGPGDAT&=(0x1<<11))
 


#endif

 

主函数 main.c

#include"def.h"

int delay(unsigned a)
{
  while(a--);
  return 0;
}

int main()
{
  rGPBCON =0x15400;
  GPGCON =0x80A882;
 
  while(1)
  {
   if(KEY1==0)
   LED1_ON;
    if(KEY2==0)
    LED2_ON;
    if(KEY3==0)
    LED3_ON;
    if(KEY4==0)
    LED4_ON;
   if(KEY5==0)
  {

    LED1_OFF;

    delay(10000);
    LED2_OFF;

   delay(10000);

    LED3_OFF;

   delay(10000);

    LED4_OFF;

   delay(10000);

   }
    if(KEY6==0)
    {
    LED1_ON;

   delay(10000);

    LED2_ON;

   delay(10000);

    LED3_ON;

   delay(10000);

    LED4_ON;

   delay(10000);

    }
    }

  return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值