6410裸板程序,led、蜂鸣器、按键…

原创 2013年12月02日 09:10:31
//*****************************************************************
//作者:昊天
//
//功能:在ok6410板子上跑裸板程序,用四个按键控制四个led灯的两灭及蜂鸣器的叫声,
//      当按键1按下时(此时为低电平)点亮led1同时蜂鸣器响,当松手时,led1灭及蜂鸣器不响    
//      以此类推剩下三个键
//时间:2012/12/13   22:01
//******************************************************************



//蜂鸣器---GPF15
#define GPFCON   (*(volatile unsigned *)(0x7f0080a0))
#define GPFDAT   (*(volatile unsigned *)(0x7f0080a4))
#define GPFPUD   (*(volatile unsigned *)(0x7f0080a8))
//按键(6个)---GPN0--GPN5
#define GPNCON   (*(volatile unsigned *)(0x7f008830))
#define GPNDAT   (*(volatile unsigned *)(0x7f008834))
#define GPNPUD   (*(volatile unsigned *)(0x7f008838))

//LED(四个)----GPM0--GPM3
#define GPMCON  (*(volatile unsigned long *)(0x7F008820))
#define GPMDAT  (*(volatile unsigned long *)(0x7F008824))
#define GPMPUD   (*(volatile unsigned long *)(0x7F008828))

void msDelay(volatile unsigned int time)
{
volatile unsigned int i;
volatile unsigned int j;
for(i=0;i<200000;i++)
{
for(j=0;j
}
}
 void GPIO_Init(void)
 {  //初始化buzzer
GPFCON = GPFCON & (~(0x1<<(31)));   //最高位31至0
GPFCON = GPFCON | (0x1<<(2*15));      //第30位置1   这样01表示输出
GPFPUD = GPFPUD & (~(0x3<<(2*15)));   //上拉电阻禁用
GPFDAT = GPFDAT & 0x7fff;   //第16管脚输出为0  也就是buzzer不响
 
//初始化按键
GPNCON = GPNCON & (0xffffffff<<12);
  GPNPUD = GPNPUD & (0xffffffff<<12);
  GPNDAT = GPNDAT | (~(0xffffffff<<6));
 
  //led初始化
    GPMCON = GPMCON | (0x00001111);
    GPMPUD = GPMPUD & (0xFFFFFFFF<<8);
    GPMDAT = GPMDAT | (~(0xfffffff0));
    
    
 }
 void BeepOff(void)
{
GPFDAT = GPFDAT &0x7fff;
}

void BeepOn(void)
{
GPFDAT = GPFDAT | 0x8000;
}

unsigned int KeyScan(void)
{

  
    if((GPNDAT & 0x3f)==0x3e)
  return 1;  //说明按键1按下
else if((GPNDAT & 0x3f)==0x3d)
  return 2;   //说明有按键2按下
else if((GPNDAT & 0x3f)==0x3b)
  return 3;     //说明有按键3按下
else if((GPNDAT & 0x3f)==0x37)
  return 4;      //说明有按键4按下
else
  return 0;    //说明没有按键按下
  
}

void KeyTest(void)
{
   unsigned int KeyStatus;
   while(1)
   {
    KeyStatus=KeyScan();
     
    switch(KeyStatus)
    {
    case 0:BeepOff(); 
          GPMDAT = GPMDAT | 0x0000000f;
          break;
    case 1:GPMDAT = (GPMDAT & 0xfffffffe);   //1键按下点亮led1               
              BeepOn();                          
          break;
    case 2:GPMDAT = GPMDAT & 0xfffffffd;
              BeepOn();
              break;
    case 3:GPMDAT = GPMDAT & 0xfffffffb;
              BeepOn();
              break;
       case 4:GPMDAT = GPMDAT & 0xfffffff7;
              BeepOn();
              break;
    }
     
     
   }
}


void main(void)
{
GPIO_Init();
    BeepOff();
    KeyTest();

    
}


下面是启动代码init.o:

PRESERVE8
IMPORT main
AREA init,CODE,READONLY

ENTRY
CODE32
START
ldr r0,=0x70000000
orr r0,r0,#0x13
mcr p15,0,r0,c15,c2,4


ldr r0,=0x7E004000
mov r1,#0
str r1,[r0]

ldr sp,=8*1024
bl main
            END
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【tiny6410】led裸板程序

start.s文件 启动代码很简单,主要做一些硬件相关的设置:告诉CPU外设的基地址、关看门狗、设置栈(为调用c语言准备)   .globl _start _start: /* 硬件相关...

OK6410学习之裸板LED程序及RAM烧录

GPIO 每组GPIO有5个寄存器 GPxCON GPxDA
  • zqs1994
  • zqs1994
  • 2014年04月11日 02:40
  • 1006

OK6410开发板裸板程序实验-LED

本人想写一个简单的Bootloader,以前在2410上写过一个。因此现在想在6410上也写一个,方便理解启动过程。但是发现刚一起步就遇到了困惑。 以前玩ARM7、ARM9、PowerPC板子时,都...

Mini 2440 LED、按键和蜂鸣器裸机测试程序(C语言)

已有 215 次阅读  2010-07-08 01:10 出处:http://student.csdn.net/space.php?uid=4434&do=blog&id=37880   ...

OK6410 led+蜂鸣器 裸机程序

  • 2012年04月12日 08:56
  • 22KB
  • 下载

友善之臂第二个裸板驱动蜂鸣器程序

这次文件稍比前一个程序要多要点,文件有:beep.c     beep.h     main.c     Makefile    mkv210_image.c    start.S    write2...
  • bilifo
  • bilifo
  • 2015年09月29日 16:56
  • 294

6410裸板测试程序

  • 2015年05月09日 16:20
  • 20.58MB
  • 下载

tiny6410 串口打印裸板程序

  • 2016年01月18日 16:52
  • 66KB
  • 下载

S3C6410 按键控制LED应用程序 ---源代码

#include #include #include #include #define ON 0 #define OFF 1 int k_fd; int l_fd; int led_st...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:6410裸板程序,led、蜂鸣器、按键…
举报原因:
原因补充:

(最多只允许输入30个字)