zoukankan      html  css  js  c++  java
  • 6410裸板程序,led、蜂鸣器、按键…

    //*****************************************************************
    //作者:昊天
    //
    //功能:在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
  • 相关阅读:
    HDU 2196 Computer (树形DP)
    HDU 4756 Install Air Conditioning (MST+树形DP)
    HDU 4126 Genghis Khan the Conqueror (树形DP+MST)
    HDU 4714 Tree2cycle (树形DP)
    HDU 1159 Common Subsequence (LCS)
    HDU 2159 FATE (二维背包)
    HDU 2602 Bone Collector (01背包DP)
    HDU 5918 Sequence I (KMP)
    关于一些逗逼函数//atoi,itoa,strtok,strupr,
    二叉树—-1(No.9HN省赛小题)
  • 原文地址:https://www.cnblogs.com/songfeixiang/p/3733838.html
Copyright © 2011-2022 走看看