在线问答
直播中

陈星

10年用户 4705经验值
擅长:电源/新能源 处理器/DSP 控制/MCU
私信 关注

【OK210试用体验】按键控制LED点亮

    经过一个星期对交叉编译环境的学习,已经懂得如何编写简单的裸机程序。
    今天分享的程序是通过按键控制LED,按键按下LED亮,松开LED灭。

    首先看原理图中GPIO的描述:
    QQ截图20150916152343.png
    QQ截图20150916152403.png

       QQ截图20150916152447.png
       配置按键的GPIO管脚为输入,并且设置为上拉,然后通过判断管脚的电压值来控制LED。
       下面是程序:
       #define MP0_4CON    (*(volatile unsigned long *)0xE0200340)
#define MP0_4DAT    (*(volatile unsigned long *)0xE0200344)
#define MP0_4PUD  (*(volatile unsigned long *)0xE0200348)
#define GPH0CON    (*(volatile unsigned long *)0xE0200C00)
#define GPH0DAT     (*(volatile unsigned long *)0xE0200C04)
#define GPH0PUD    (*(volatile unsigned long *)0xE0200C08)
static void Delay(int count)
{
        volatile int i, j = 0;
        volatile static int loop = 800000000/10000;
        for(;count > 0;count--)
            for(i=0;i < loop; i++) { j++; }
}

int main(void)
{
    int i=0;
    MP0_4CON |= (MP0_4CON & ~0xFFFF0000) | 0x11110000; //设置高4为管脚为输出方式
    GPH0CON |= (GPH0CON &~0xFFFF0000) | 0X00000000;//设置高4为管脚为输入方式
    GPH0PUD |=0xAA00;
   
    MP0_4DAT |= 0xff;
    GPH0DAT |= 0xff;
   
    while(1)
    {
        if((GPH0DAT & 0x80) == 0)
            MP0_4DAT &= ~( 1<< 4);
        else
           MP0_4DAT |= 1<< 4;
           
        if((GPH0DAT & 0x40) == 0)
            MP0_4DAT &= ~( 1<< 5);
        else
           MP0_4DAT |= 1<< 5;
           
       if((GPH0DAT & 0x20) == 0)
            MP0_4DAT &= ~( 1<< 6);
       else
           MP0_4DAT |= 1<< 6;
           
       if((GPH0DAT & 0x10) == 0)
            MP0_4DAT &= ~( 1<< 7);
       else
           MP0_4DAT |= 1<< 7;
    }
   
    return 0;
}

       演示: V50915-215934.mp4_1442325878.gif
       光线不好,请原谅。

       这是我id第一个裸机程序,如果有不对的地方,请大家支持,谢谢。


回帖(1)

HelloWii

2015-9-17 12:58:27
楼主加油,期待更多的分享。。。。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分