嵌入式S3C2440开发板LED灯和按键(去抖)驱动实验

LED灯驱动实验
1、用ADS开发软件新建一个工程,在工程中新建一个start.s文件,在其中添加如下代码:
area start,code,readonly                     //注意:声明代码段start,该行不能顶格写(具体为什么还不清楚)
reset
ldr sp ,=4096
import main
bl main
        end


2、新建一个def.h文件,在其中添加如下代码:
#ifndef    _DEF_H
#define   _DEF_H


#define rGPBCON (*((volatile unsigned *)0x56000010))
#define rGPBDAT (*((volatile unsigned *)0x56000014))


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


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


#endif

3、新建一个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;
LED2_ON;
LED3_ON;
LED4_ON;

delay(1000000);

LED1_OFF;
LED2_OFF;
LED3_OFF;
LED4_OFF;

delay(1000000);
}
}
4、进行DebugRel Settings.
       注意:在设置Linker时,其中Output中RO Base设置为0x30000000,Options中Image entry point中也应该设置为0x30000000,在Layout中第一个Object/Symbol中应该填与.s文件名同名的.o文件名,在后面的Section中应该填写在.s文件中的area和code之间的那个名字。
5、连接开发板,打开H-JTAG(它的设置在这里就不说了),H-JTAG中的Init中的Auto Init勾上,点击Init  Script,加载(load)H-JTAG文件夹中的FriendlyARM2440.his。然后就可以运行程序了
 
6、如要用开发板上的按钮控制灯,只需要在代码中添加对按钮的初始化和宏定义即可,然后用if语句作为判断条件。
   在def.h文件中添加这样两行代码:
#define rGPGCON (*((volatile unsigned *)0x56000060))
#define rGPGDAT (*((volatile unsigned *)0x56000064))
   在main.c中添加如下控制条件

#include "def.h"

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

int main(int argc,char argv[])
{
 rGPBCON |=0x15400;
 rGPGCON |=0x80A882;
 while(1)
 {
  if((rGPGDAT&0x1)==0x0)
   LED1_ON;
  if((rGPGDAT&0x8)==0x0)
   LED2_ON;
  if((rGPGDAT&0x20)==0x0)
   LED3_ON;
  if((rGPGDAT&0x40)==0x0)
   LED4_ON;
  
//  delay(1000000);
  
  if((rGPGDAT&0x1)==0x1)
   LED1_OFF;
  if((rGPGDAT&0x8)==0x8)  
   LED2_OFF;
  if((rGPGDAT&0x20)==0x20)
   LED3_OFF;
  if((rGPGDAT&0x40)==0x40)
   LED4_OFF;
  
//  delay(1000000);
 }
}

7、去抖只需要在if条件语句之前,再加一个if条件语句即可,如:
   if((rGPGDAT&0x1)==0x0)
{
        delay(100);
        if((rGPGDAT&0x1)==0x0)
{
        ......
}
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值