【OK210试用体验】按键控制LED点亮 - 在线问答 - 电子威廉希尔官方网站 论坛 - 最好最受欢迎电子论坛!

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

陈星 ( 楼主 ) 2015-9-16 15:32:02  只看该作者 倒序浏览
    经过一个星期对交叉编译环境的学习,已经懂得如何编写简单的裸机程序。
    今天分享的程序是通过按键控制LED,按键按下LED亮,松开LED灭。

    首先看原理图中GPIO的描述:
   
   

      
       配置按键的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;
}

       演示:
       光线不好,请原谅。

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


1个回复

HelloWii 发表于 2015-9-17 12:58:27
楼主加油,期待更多的分享。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /6 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 湘ICP备2023018690号 )

GMT+8, 2024-9-22 16:48 , Processed in 0.441428 second(s), Total 33, Slave 24 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表