您的位置:首页 > 编程语言 > PHP开发

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

2011-07-09 12:35 351 查看
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){        ......}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息